Усилитель для шины I2C. Работа I2C по длинному кабелю.

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Всем привет дорогие профессионалы. Собираю проект умного дома. Имееется контролер 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 можно подключить много датчиков (экономия пинов арудино).

 

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Вот микруха для  I2C . Ссылка на алиэкспрес не рабочая на форуме

a5021
Offline
Зарегистрирован: 07.07.2013

На упомянутых длинах и типе кабеля решение работоспособное. В интернетах полно вариантов.

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

У меня не работает. Вообще не могу к remoreXY  подключиться как через облако так и по TCPIP. Или даже просто делаю Веб сервер тоже самое. На коротких проводах все работает

Logik
Offline
Зарегистрирован: 05.08.2014

Наверно скорость снижать надо, терминаторы ставить, провод получше... Надеюсь Вы осознаете всю геморность выбраного решения. i2c не для передачи на существенніе растояния и простым повышением тока драйвера там не решается. Вопрос уже много раз обсуждался. Иное решение - например  RS485 с компанией как раз для такого. Или тональная передача. Или токовая петля. Но в любом случае система заметно усложнится.

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Cesium137 пишет:
Если микросхема не способна обеспечить стабильную работы шины на длинном кабеле. посоветуйте есть ли иное решение.

Про PCA9515 тут на форуме проскакивала инфа о нестабильной работе на 25-метровую линию. На 15 метров, скорее всего будет работать.
До 50 метров - P82B715. На али их навалом, есть также в ЧиД, рублей по 100.

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Осознаю теперь. сделал вывод лучше использовать обычные не I2C  датчики. например у меня даллас ДС18Б20 прекрасно на 10 метрах работает а также реле и датчики движения пир тоже на 10 - 15 метрах работаю стаильно по витой паре(причем не экранированной). Думаю приобрести ардуину мегу для увеличения входов моего проекта умного дома. тут еще этернет шилд w5100  4 пина  под себя забирает у УНЫ)))).

Спсибо ВСЕМ за окончательный вывод.

Одон не понятно зачем производители делают эти итусишные датчки  если они на большом расстоянии неработают если только для роботов)))

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Ребят сможете посоветовать, конечно немного другой вопрос не по теме форума . Есть ли датчик движения для ардуино который работает пр минус 30 -40. Например наулице хочу поставить чтобы свет включался вечером когда прихоожу. Сколько смотрел и микроволновый датчик и пир и ультразвуковой и прочие - у всех диапазон рабочей температуры от -20С 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Cesium137 пишет:

Одон не понятно зачем производители делают эти итусишные датчки  если они на большом расстоянии неработают если только для роботов)))

Производители делают их потому, что I2C - внутрисхемный интерфейс, и производителям как-то невдомёк, что кто-то там ВНЕЗАПНО захочет вытащить их на дохренилиард метров от контроллера. В чём производители виноваты-то? В том, что не соответствуют чаяниям и обманывают ваши ожидания, делая на датчике надпись "I2C"?

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Нет не виноваты. ну если бы какойто усилитель изоблели для таких целей было бы здорово.

alex_r61
Offline
Зарегистрирован: 20.06.2012

Cesium137 пишет:

Нет не виноваты. ну если бы какойто усилитель изоблели для таких целей было бы здорово.

Уже изоблели, RS485 называется. 1200 метров, мало?

a5021
Offline
Зарегистрирован: 07.07.2013

Cesium137 пишет:

Нет не виноваты. ну если бы какойто усилитель изоблели для таких целей было бы здорово.

Вам же уже в сообщении №5 сказали, что усилитель такой существует и обеспечивает работу I2C на длинах до 50 метров по витой паре.

Штирлиц
Штирлиц аватар
Offline
Зарегистрирован: 13.06.2015

a5021 пишет:

Cesium137 пишет:

Нет не виноваты. ну если бы какойто усилитель изоблели для таких целей было бы здорово.

Вам же уже в сообщении №5 сказали, что усилитель такой существует и обеспечивает работу I2C на длинах до 50 метров по витой паре.

Так там надо на приемной стороне МК ставить. А если бы с датчика и сразу на I2C экран и без кода!!! Вот. А вы все предлагаете какие-то екстендеры ,RS485.

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

А можно узнать у вас как правильно подключиться между контролером и датчиками к этой микросхеме (P82B715) которую посоветовали выше. я в радиотехнике не очень силен. только поверхностно.? Буду очень благодарен вам за совет или схему

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

мне 485 не нужен. мне I2C  интересует. У меня далас через обычное подключение работает прекрасно на 15 метрах

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Вроде нашнл. Скрин взятый из аналогичной темы с этого форума. Незнаю правильно ли собрана схема. Я так понимаю две микросхемыы нужно одна рядом с контролером вторая перед датчиком...

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Cesium137 пишет:
Я так понимаю две микросхемыы нужно одна рядом с контролером вторая перед датчиком...

Я же дал ссылку на даташит, там всегда правильная схема, ей и верьте,  а не "весёлым картинкам".
А вообще, понимаете правильно.

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Спасибо. буду повнимателен. Получается две микросхемы надо. А резисторы номиналом поойдут те что на красивой картинке?

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Cesium137 пишет:
А резисторы номиналом поойдут те что на красивой картинке?

В ДШ, на стр. 6 есть раздел 8.1.1 "Pull-up resistance calculation" (Расчёт подтягивающих резисторов).
Как там указано, приблизительно можно можно считать ёмкость каждого подключённого устройства равной 10 пФ, внутрисхемные соединения - 10пФ, а ёмкость кабеля - 50-100пФ на метр.
Например, имеем 2 датчика, соединённых кабелем в 30 метров. Тогда общая ёмкость составит 2 * 20пФ + 30 * 100пФ = 3040пФ. Про приведённой в ДШ формуле получится, что сопротивление подтягивающих резисторов будет по 1/3040 ~330Ом.

ЗЫ. Результат после формулы - в Мегаомах, поэтому умножайте результат на миллион, что бы получить значение в Омах.

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

. благодарю   за помощь. не хочу показаться глупм. просто толком не изучал детально даташиты. но есть большое желание сделать свой проект умного дома. 

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Я так понимаю напряжение питания микросхемы должно быть 3,3В как питание самих датчиков I2C. Так как подключал один раз итусишный датчик к 5В и он не работал. к счастью остался живой.

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Cesium137 пишет:
напряжение питания микросхемы должно быть 3,3В как питание самих датчиков I2C.

Судя по ДШ, напряжение питания м/с не влияет на логические уровни на шине I2C.
Назовём выводы со стороны МК и датчиков - шина I2C, а  кабель, соединяющий два драйвера - магистральная шина.
Т.е. со стороны МК шина I2C может быть подтянута к 3.3В или 5В (взависимости от питания МК),  м/с драйверов запитаны от 4,5-12В (рассчитанные выше резисторы подтяжки магистральной шины цепляем к этому питанию), а шина I2C со стороны датчика подтягивается к питанию датчика, т.е. 3.3В, в Вашем случае.

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Смысл ясен. А резисторы подтяжки как состороны контролера так и состороны датчика поставить? Схему вашу смотрел - резистор с обеих сторон стоят

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Я собираюсь питать  микросхему так и датчики I2C отдельным питанием  БП от компа ( вывод 3,3В) Собственно у меня ардуино и все датчики и реле питаются от БП. Ардуино - 12В, датчики (не I2C) и реле - 5В. Земля разумеется общая

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Схема не моя, а из ДШ производителя ))
В том же ДШ гляньте, есть полная схема подключения -

Защитные цепи (ESD protection) можно ставить или не ставить.
А питание датчиков 3.3В можно получить с напряжения питания линии, через LDO стабилизатор.

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

"А питание датчиков 3.3В можно получить с напряжения питания линии, через LDO стабилизатор........"

БП от компа можно же питать всю цепь? 3.3 вольтами

Или всетаки как выше вы указали драйвер м/с питание у него от 4.5-12В

 

 

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

 В даташите нашел что от 3 до 12,5 микросхема питается

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Кое что нашел для меня непонятное немного. Это фрагмент из даташита про питание микросхемы. Переводил переводчиком.

Как я понял полная производительность самой микросхемы будет только от напряжения 4.5В

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

 

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Имеется ввиду, полная производительность, в заявленном тепературном диапазоне -40...+85 град., гарантируется при питании от 4.5 вольт, а работоспособность - от 3 вольт. В любом случае, можно попробовать - прицепить витуху, метров 30 и проэкспериментить.

Cesium137
Cesium137 аватар
Offline
Зарегистрирован: 13.12.2016

Хорошо. попробую посмотрю на 3.3 вольта

Удачи и спасибо Вам за детальный ответ

Brewster
Offline
Зарегистрирован: 26.11.2017

Немножко личного опыта. Подключил тут к Нано небезызвестный датчик температуры/давления/влажности - BME280. Подключение было произведено витухой 5 категории. Длина кабеля 40 метров. Все завелось  

Одна пара - питание и земля

Две других пары это SDA с землёй и SCL с землёй. Соединения - проводки витухи припаяны к макетным дюпоновским кабелям.

Рядом с ардуино стоят подтягивающие резисторы в 3.5 кОм. С 10 кОм не работает. 

a5021
Offline
Зарегистрирован: 07.07.2013

Через усилитель на 40 метров пробивает или просто витая пара напрямую?

Brewster
Offline
Зарегистрирован: 26.11.2017

Напрямую через витую пару. Никаких усилителей. 

a5021
Offline
Зарегистрирован: 07.07.2013

Надо срочно засекретить это от лошика. Как-то раз,  он тут неделю бился в истериках, что I2C на длинах более пары метров нарушает законы физики.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

I2C на какой частоте работает? 100кГц или 400?   Интересно посмотреть осликом фронты на 40 метрах

Brewster
Offline
Зарегистрирован: 26.11.2017

Осциллографа нет - фронты посмотреть не могу.  Самому интересно. 

Про частоту тоже не могу сказать. Работаю с библиотекой bme280i2c со стандартными настройками. Глубже не копал, поэтому не знаю. 

Сборка проработала всю ночь. Никаких зависаний и потерь. 

a5021
Offline
Зарегистрирован: 07.07.2013

Витая пара довольно неудобный кабель для I2C. По этому поводу здесь целый мега-срач на форуме наблюдался.

Brewster
Offline
Зарегистрирован: 26.11.2017

При всём при этом все завелось и работает вопреки устоявшемуся мнению. А где можно почитать этот срач? Интересно :)

a5021
Offline
Зарегистрирован: 07.07.2013

Вроде где-то здесь же, в "аппаратных вопросах". Точнее уже не вспомнить и не отыскать.

Brewster
Offline
Зарегистрирован: 26.11.2017

Подключил к шине дисплей  размотал витуху из бухты хаотично по дому  Работает.

Достану протяжку для кабеля, затяну на его рабочее место. Там будет интереснее - сантиметрах в 7 будут идти силовой кабель на насос в колодце и греющий внутритрубный кабель. Вот там и посмотрим на стабильность. DIY такой DIY... :)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Скорость, скорость вашего И2Цэ .. какая? (спрашивали жеж).. :)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ну дак он жэж ответил 

Brewster пишет:

Про частоту тоже не могу сказать. Работаю с библиотекой bme280i2c со стандартными настройками. Глубже не копал, поэтому не знаю. 

Brewster
Offline
Зарегистрирован: 26.11.2017

Да. Именно так. Я не знаю, куда в той библиотеке смотреть, чтоб понять, с какой скоростью оно работает.

В коде у меня написано так. Дальше, если вы сможете разобраться и сказать, с какой реально оно скоростью работает, буду очень благодарен.

#include <BME280I2C.h>
BME280I2C bme;    // Default : forced mode, standby time = 1000 ms
 // Oversampling = pressure ×1, temperature ×1, humidity ×1, filter off,

Вот что пишут в инетах по поводу 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.

sadman41
Offline
Зарегистрирован: 19.10.2016

С 99% вероятностью оно все работает на дефолтовой скорости Wire.h

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Интересный эксперимент.

У меня на 20 метрах витой пары Si7021 не завелся, а bme280 завелся и работал. Сопротивления на подтяжку 4.7 кОм.

Поменял витую пару на кабель КСВВ 4 жилки, как раз 2 сигнальных 2 питание. Так вот что интересно bme280 тоже завелся работает без ошибок, Si7021 не пробовал, а вот TSL2561 датчик освещения через раз работает, то найдется то нет, причем это при сопротивлении подтяжки 2.7кОм.  При подтяжке 4.7 не видит TSL2561 вообще.

Поставил p82b715 с двух сторон, все работает нормально и bme280 и TSL2561 и Si7021, простояло на столе 4 дня, сбоев нет.

a5021
Offline
Зарегистрирован: 07.07.2013

Для I2C лучше использовать кабель с низкой емкостью и малым уровнем перекрестных помех. Хорошие результаты получаются на аудио-кабеле и даже на осветительном. Я экспериментировал на телефонной лапше (ТРП), тоже лучше, чем витая пара.

Brewster
Offline
Зарегистрирован: 26.11.2017

Ну что, затянул кабель в трубу. Вдоль трубы идёт кабель насоса. В соседней трубе идёт греющий кабель. Никакого влияния на связь будучи включёнными не оказывают. Все работает. 

Brewster
Offline
Зарегистрирован: 26.11.2017

Скоро год уж последнему моему посту. Надо бы отчитаться. К сожалению в прошлом сентябре эксперименты был вынужден прекратить с закрытием дачного сезона. Сейчас возобновил это дело. 

та же дистанция, тот же кабель, только теперь 4 отдельных неспаренных проводника. Подключил так же с подтяжкой сигнальных линий на + через резисторы 3.3 кОм. Работает. 

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

О профильную тему увидел!... Может кто подскажет по моему вопросу #20 ???

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

AlexArGC пишет:

О профильную тему увидел!... Может кто подскажет по моему вопросу #20 ???

А Вы что, ответы на свой вопрос принципиально не читаете? Тогда зачем Вам подсказывать?