Здравствуйте! Прошу не пинать сильно, с i2c только начал знакомится. Не для работы или производства, а для самопознания и хобби ради.
Немного предыстории:
К Raspberry pi 4 через преобразователь уровней с 3.3v до 5v подключены два pcf8574. Сам преобразователь подключен вплотную к малинке. А устройства к нему идущие, подключены неэкранироваными проводами длиной 20-30см.
Все вродебы работает, но через раз. Указываю LOW на пины с 0 по 5, и HIGH на 6-й и 7-й. Работает но через раз. Иногда пины, которые быть должны у pcf8574 HIGH рандомно при команде уходят в LOW, иногда нет. Как будто часть команды не доходит или доходит не так как надо. Иногда просто так при бездействии pcf8574 сбрасывается и переводит все пины в состояние по умолчанию в HIGH
Все резисторы с преобразователя уровней я выпаял, как на входе так и на выходе(На входе смысла нет, у малинки уже стоят 4.7k), так же выпаял и с pcf8574 и поставил по 28К на каждый. Так в сумме получилось 14K. Скажите что я не так делаю и какой же номинал резисторов более оптимальный? И где лучше эти резисторы ставить? Или уменьшить номинал резисторов? И где лучше размещать, или равномерно по всем устройствам включая и сам преобразователь так что бы в сумме получился нужный номинал или ставить резисторы только в самом начале на преобразователе уровней, а с устройств все отпаять или наоборот? Как лучше?
P.S. Для манипуляции используется python+lib pcf8574_io, частота i2c по дефолту 100 кГц. Добавлю еще что есть на линии i2c еще пара других устройств, но они работают исправно, проблема ток с этими pcf8574.
Upd. Как время показало, причина не в куллере а в самих помехах, статике и т.д и т.п. лучшее решение ставить после pcf8574 - uln2803 или вообще оптроны.
Подтягивиющие резисторы скорее всего не при чем.
Если другие I2C приемники работают, то с резисторами подтяжки играться не стоит.
Дело вероятно в трассировке сигналов.
Нужно анализировать целиком всю цепочку начиная от розетки и источника питания малины до конкретных нагрузок к которым подключен pcf8574.
Паразитные милли и наносекундные коммутационные токи в этом контуре вполне могут приводить к сбоям микросхем если трассировка допускает проход этих токов через них.
У меня то же такое же ощущение сложилось. Подключен LCD1206, длина провода 15см, сколько не мучал работает безошибочно.
pcf8574 длина провода 30см, проходит через wifi антену, мимо куллеров, которые коммутируются полевиками подключенными напрямую к pcf8574.
А так глюки описанные мною происходят если в коде я делаю такую последовательность
Нужные пины на HIGH
Все остальные пины на LOW
Может произойти что все пины LOW, либо не все пины из нужных будут HIGH, если наоборот:
Все остальные пины на LOW
Нужные пины на HIGH
То вероятность данного глюка гораздо реже, но все же есть. В целом глюк происходит один из 10-15 раз, но все же неприятен.
P.S. Проблемные устройства соединены i2c проводами идущими рядом(не совсем рядом но близко) с теми что питают всю схему. Я не думал что это может все так влиять, не хотел экранировать, поскольку это все пока в экспериментальном виде собрано...Попробую все это экранировать сейчас...
20strannik08,
Экранировка I2C на скорости 100 КГц будет избыточной.
Чаще всего помогает просто соединение GND всех устройств проводом по кратчайшему пути звездой с соединение звезды на минусе источника питания.
WiFi наводок на I2C не даст. Слишком большая емкость у I2C для WiFi
А вот кулеры надо исследовать внимательней. Возможно в них сидят ШИМ преобразователи - это уже серьезней.
Indemsys, Отсоединил куллер, и все остальное что коммутировал pcf8574 заработало! В куллере нет шима, он на обычном датчике холла, но проблема всеравно в нем, благодарю за наводку!
подтягивающий резистор 10 КОм ставь (я кстати тож на малинке сейчас)
Если не сработает поставь 1 КОм
вот даташит: https://static.chipdip.ru/lib/368/DOC004368150.pdf
но там ни слова про pull up резисторы
Хм. Я pcf8574 модулем брал. Там были sda и scl к плюсу подянуты 4.7к но я их выпаял.
А куда именно ставить резистор? Получается от основной схемы на расстоянии 30см два таких pcf8574 уходят. Достаточно ли резисторов на sda/scl в самом начале около малинки ткнуть?