Усилитель для шины I2C. Работа I2C по длинному кабелю.
- Войдите на сайт для отправки комментариев
Всем привет дорогие профессионалы. Собираю проект умного дома. Имееется контролер Arduino UNO и шилд W5100. Управлние домом осуществляется через RemoteXY (на облачном сервере). Систему упрвления делаю в FLPROGe. Есть датчики влажности, люксметр, латчик атмосерного давления работающие по I2C. Столкнулся с проблемой по работе I2C шины на длинном кабеле порядка 15 метров (витая пара). В интернете вычитал в т.ч на этом форуме что максимальная длина кабеля составляет порядка 1-2 метра для нормальной работы датчиков. Предлагают в сети некий усилитель. Извините если я неправильно его таковым назвал. Ссылка на микросхему https://ru.aliexpress.com/item/1PCS-PCA9515D-SOP8-PCA9515-SOP8/32809921860.html.
Вопрос такой. Как подключить микруху к данной шине чтобы мои датчики работали на большом расстоянии (10-20 метром? И обеспечит ли данная микруха такую работу? Всем заранее спасибо за ответ.
Если микросхема не способна обеспечить стабильную работы шины на длинном кабеле. посоветуйте есть ли иное решение.
P.S. Шина I2C необходима мне так как в ней преимущество - к одной шине (задействовать два пина всего A4 A5 можно подключить много датчиков (экономия пинов арудино).
Вот микруха для I2C . Ссылка на алиэкспрес не рабочая на форуме
На упомянутых длинах и типе кабеля решение работоспособное. В интернетах полно вариантов.
У меня не работает. Вообще не могу к remoreXY подключиться как через облако так и по TCPIP. Или даже просто делаю Веб сервер тоже самое. На коротких проводах все работает
Наверно скорость снижать надо, терминаторы ставить, провод получше... Надеюсь Вы осознаете всю геморность выбраного решения. i2c не для передачи на существенніе растояния и простым повышением тока драйвера там не решается. Вопрос уже много раз обсуждался. Иное решение - например RS485 с компанией как раз для такого. Или тональная передача. Или токовая петля. Но в любом случае система заметно усложнится.
Про PCA9515 тут на форуме проскакивала инфа о нестабильной работе на 25-метровую линию. На 15 метров, скорее всего будет работать.
До 50 метров - P82B715. На али их навалом, есть также в ЧиД, рублей по 100.
Осознаю теперь. сделал вывод лучше использовать обычные не I2C датчики. например у меня даллас ДС18Б20 прекрасно на 10 метрах работает а также реле и датчики движения пир тоже на 10 - 15 метрах работаю стаильно по витой паре(причем не экранированной). Думаю приобрести ардуину мегу для увеличения входов моего проекта умного дома. тут еще этернет шилд w5100 4 пина под себя забирает у УНЫ)))).
Спсибо ВСЕМ за окончательный вывод.
Одон не понятно зачем производители делают эти итусишные датчки если они на большом расстоянии неработают если только для роботов)))
Ребят сможете посоветовать, конечно немного другой вопрос не по теме форума . Есть ли датчик движения для ардуино который работает пр минус 30 -40. Например наулице хочу поставить чтобы свет включался вечером когда прихоожу. Сколько смотрел и микроволновый датчик и пир и ультразвуковой и прочие - у всех диапазон рабочей температуры от -20С
Одон не понятно зачем производители делают эти итусишные датчки если они на большом расстоянии неработают если только для роботов)))
Производители делают их потому, что I2C - внутрисхемный интерфейс, и производителям как-то невдомёк, что кто-то там ВНЕЗАПНО захочет вытащить их на дохренилиард метров от контроллера. В чём производители виноваты-то? В том, что не соответствуют чаяниям и обманывают ваши ожидания, делая на датчике надпись "I2C"?
Нет не виноваты. ну если бы какойто усилитель изоблели для таких целей было бы здорово.
Нет не виноваты. ну если бы какойто усилитель изоблели для таких целей было бы здорово.
Уже изоблели, RS485 называется. 1200 метров, мало?
Нет не виноваты. ну если бы какойто усилитель изоблели для таких целей было бы здорово.
Вам же уже в сообщении №5 сказали, что усилитель такой существует и обеспечивает работу I2C на длинах до 50 метров по витой паре.
Нет не виноваты. ну если бы какойто усилитель изоблели для таких целей было бы здорово.
Вам же уже в сообщении №5 сказали, что усилитель такой существует и обеспечивает работу I2C на длинах до 50 метров по витой паре.
Так там надо на приемной стороне МК ставить. А если бы с датчика и сразу на I2C экран и без кода!!! Вот. А вы все предлагаете какие-то екстендеры ,RS485.
А можно узнать у вас как правильно подключиться между контролером и датчиками к этой микросхеме (P82B715) которую посоветовали выше. я в радиотехнике не очень силен. только поверхностно.? Буду очень благодарен вам за совет или схему
мне 485 не нужен. мне I2C интересует. У меня далас через обычное подключение работает прекрасно на 15 метрах
Вроде нашнл. Скрин взятый из аналогичной темы с этого форума. Незнаю правильно ли собрана схема. Я так понимаю две микросхемыы нужно одна рядом с контролером вторая перед датчиком...
Я же дал ссылку на даташит, там всегда правильная схема, ей и верьте, а не "весёлым картинкам".
А вообще, понимаете правильно.
Спасибо. буду повнимателен. Получается две микросхемы надо. А резисторы номиналом поойдут те что на красивой картинке?
В ДШ, на стр. 6 есть раздел 8.1.1 "Pull-up resistance calculation" (Расчёт подтягивающих резисторов).
Как там указано, приблизительно можно можно считать ёмкость каждого подключённого устройства равной 10 пФ, внутрисхемные соединения - 10пФ, а ёмкость кабеля - 50-100пФ на метр.
Например, имеем 2 датчика, соединённых кабелем в 30 метров. Тогда общая ёмкость составит 2 * 20пФ + 30 * 100пФ = 3040пФ. Про приведённой в ДШ формуле получится, что сопротивление подтягивающих резисторов будет по 1/3040 ~330Ом.
ЗЫ. Результат после формулы - в Мегаомах, поэтому умножайте результат на миллион, что бы получить значение в Омах.
. благодарю за помощь. не хочу показаться глупм. просто толком не изучал детально даташиты. но есть большое желание сделать свой проект умного дома.
Я так понимаю напряжение питания микросхемы должно быть 3,3В как питание самих датчиков I2C. Так как подключал один раз итусишный датчик к 5В и он не работал. к счастью остался живой.
Судя по ДШ, напряжение питания м/с не влияет на логические уровни на шине I2C.
Назовём выводы со стороны МК и датчиков - шина I2C, а кабель, соединяющий два драйвера - магистральная шина.
Т.е. со стороны МК шина I2C может быть подтянута к 3.3В или 5В (взависимости от питания МК), м/с драйверов запитаны от 4,5-12В (рассчитанные выше резисторы подтяжки магистральной шины цепляем к этому питанию), а шина I2C со стороны датчика подтягивается к питанию датчика, т.е. 3.3В, в Вашем случае.
Смысл ясен. А резисторы подтяжки как состороны контролера так и состороны датчика поставить? Схему вашу смотрел - резистор с обеих сторон стоят
Я собираюсь питать микросхему так и датчики I2C отдельным питанием БП от компа ( вывод 3,3В) Собственно у меня ардуино и все датчики и реле питаются от БП. Ардуино - 12В, датчики (не I2C) и реле - 5В. Земля разумеется общая
Схема не моя, а из ДШ производителя ))
В том же ДШ гляньте, есть полная схема подключения -
Защитные цепи (ESD protection) можно ставить или не ставить.
А питание датчиков 3.3В можно получить с напряжения питания линии, через LDO стабилизатор.
"А питание датчиков 3.3В можно получить с напряжения питания линии, через LDO стабилизатор........"
БП от компа можно же питать всю цепь? 3.3 вольтами
Или всетаки как выше вы указали драйвер м/с питание у него от 4.5-12В
В даташите нашел что от 3 до 12,5 микросхема питается
Кое что нашел для меня непонятное немного. Это фрагмент из даташита про питание микросхемы. Переводил переводчиком.
Как я понял полная производительность самой микросхемы будет только от напряжения 4.5В
Имеется ввиду, полная производительность, в заявленном тепературном диапазоне -40...+85 град., гарантируется при питании от 4.5 вольт, а работоспособность - от 3 вольт. В любом случае, можно попробовать - прицепить витуху, метров 30 и проэкспериментить.
Хорошо. попробую посмотрю на 3.3 вольта
Удачи и спасибо Вам за детальный ответ
Немножко личного опыта. Подключил тут к Нано небезызвестный датчик температуры/давления/влажности - BME280. Подключение было произведено витухой 5 категории. Длина кабеля 40 метров. Все завелось
Одна пара - питание и земля
Две других пары это SDA с землёй и SCL с землёй. Соединения - проводки витухи припаяны к макетным дюпоновским кабелям.
Рядом с ардуино стоят подтягивающие резисторы в 3.5 кОм. С 10 кОм не работает.
Через усилитель на 40 метров пробивает или просто витая пара напрямую?
Напрямую через витую пару. Никаких усилителей.
Надо срочно засекретить это от лошика. Как-то раз, он тут неделю бился в истериках, что I2C на длинах более пары метров нарушает законы физики.
I2C на какой частоте работает? 100кГц или 400? Интересно посмотреть осликом фронты на 40 метрах
Осциллографа нет - фронты посмотреть не могу. Самому интересно.
Про частоту тоже не могу сказать. Работаю с библиотекой bme280i2c со стандартными настройками. Глубже не копал, поэтому не знаю.
Сборка проработала всю ночь. Никаких зависаний и потерь.
Витая пара довольно неудобный кабель для I2C. По этому поводу здесь целый мега-срач на форуме наблюдался.
При всём при этом все завелось и работает вопреки устоявшемуся мнению. А где можно почитать этот срач? Интересно :)
Вроде где-то здесь же, в "аппаратных вопросах". Точнее уже не вспомнить и не отыскать.
Подключил к шине дисплей размотал витуху из бухты хаотично по дому Работает.
Достану протяжку для кабеля, затяну на его рабочее место. Там будет интереснее - сантиметрах в 7 будут идти силовой кабель на насос в колодце и греющий внутритрубный кабель. Вот там и посмотрим на стабильность. DIY такой DIY... :)
Скорость, скорость вашего И2Цэ .. какая? (спрашивали жеж).. :)
Ну дак он жэж ответил
Про частоту тоже не могу сказать. Работаю с библиотекой bme280i2c со стандартными настройками. Глубже не копал, поэтому не знаю.
Да. Именно так. Я не знаю, куда в той библиотеке смотреть, чтоб понять, с какой скоростью оно работает.
В коде у меня написано так. Дальше, если вы сможете разобраться и сказать, с какой реально оно скоростью работает, буду очень благодарен.
Вот что пишут в инетах по поводу Forced Mode:
Using forced mode is recommended for applications which require low sampling rate or hostbased synchronization. The sensor enters into sleep mode after a forced readout.
С 99% вероятностью оно все работает на дефолтовой скорости Wire.h
Интересный эксперимент.
У меня на 20 метрах витой пары Si7021 не завелся, а bme280 завелся и работал. Сопротивления на подтяжку 4.7 кОм.
Поменял витую пару на кабель КСВВ 4 жилки, как раз 2 сигнальных 2 питание. Так вот что интересно bme280 тоже завелся работает без ошибок, Si7021 не пробовал, а вот TSL2561 датчик освещения через раз работает, то найдется то нет, причем это при сопротивлении подтяжки 2.7кОм. При подтяжке 4.7 не видит TSL2561 вообще.
Поставил p82b715 с двух сторон, все работает нормально и bme280 и TSL2561 и Si7021, простояло на столе 4 дня, сбоев нет.
Для I2C лучше использовать кабель с низкой емкостью и малым уровнем перекрестных помех. Хорошие результаты получаются на аудио-кабеле и даже на осветительном. Я экспериментировал на телефонной лапше (ТРП), тоже лучше, чем витая пара.
Ну что, затянул кабель в трубу. Вдоль трубы идёт кабель насоса. В соседней трубе идёт греющий кабель. Никакого влияния на связь будучи включёнными не оказывают. Все работает.
Скоро год уж последнему моему посту. Надо бы отчитаться. К сожалению в прошлом сентябре эксперименты был вынужден прекратить с закрытием дачного сезона. Сейчас возобновил это дело.
та же дистанция, тот же кабель, только теперь 4 отдельных неспаренных проводника. Подключил так же с подтяжкой сигнальных линий на + через резисторы 3.3 кОм. Работает.
О профильную тему увидел!... Может кто подскажет по моему вопросу #20 ???
О профильную тему увидел!... Может кто подскажет по моему вопросу #20 ???