I2C подтягивающие резисторы и I2C MUX
У меня есть установка с 5 датчиками освещенности на мультиплексоре I2C, и мне интересно, нужен ли мне только 1 подтягивающий резистор для всей шины или по одному на каждой ветви от мультиплексора?
Или мне следует снять все подтягивания с ветвей и оставить один на мультиплексоре?
Моя проблема в том, что Arduino softlocks после 5-60 минут работы, и это всегда softlocks на вызове read lux.
@levi Clouser, 👍0
1 ответ
Из того, что я могу сказать, мультиплексор шины I2C сам получает и повторно передает то, что составляет совершенно отдельную шину. Таким образом, каждая шина будет нуждаться в своих собственных подтягивающих резисторах. Тем не менее, плата, которую вы связали, которая разрывает чип мультиплексора, имеет подтягивающие резисторы на каждой шине, которую он предоставляет:
Прорыв также имеет подтягивания на автобусе, идущем к самому мультиплексору:
Кроме того, прорыв датчика окружающего освещения, по-видимому, обеспечивает свои собственные подтягиванияна 4,7 К. Arduino на основе AVR (и, вероятно, другие) также включают свои собственные, по общему признанию, слабые, подтягивания в кишках проволочной библиотеки.
Кажется, вам не обязательно нужно добавлять какие-либо дополнительные подтягивающие резисторы к тому, что уже есть на шинах.
Что касается приведенного ниже комментария О. П., то он обеспокоен слишком большим количеством подтягивающих резисторов.
В какой-то момент, вероятно, ниже (возможно, намного ниже) 500 Ом некоторые устройства могут иметь проблемы с погружением достаточно тока, чтобы создать НИЗКИЙ. Например, у AVR не было бы проблем с 500 омами.
Спецификация ATmega328P (как и большинство других спецификаций AVR) сообщит вам, что внутреннее значение подтягивания находится в диапазоне от 20 до 50 Тыс. Если вас беспокоит слишком много параллельных резисторов/слишком много токовых путей/слишком мало общего сопротивления, вы можете взять цифру 20K вместе с цифрой прорыва мультиплексора 4,7 K, чтобы вычислить pow(1/20e3 + 1/4.7e3, -1)
примерно для 3,8 K , что должно быть прекрасно. Если вы сделаете то же самое вычисление для отдельного резистора шины мультиплексора 4,7 к и собственного резистора пробоя датчика окружающего освещения 4,7 к, вы получите 2,35 к (половина), что также, вероятно, нормально. Во всяком случае, обе эти суммарные цифры можно сделать меньше (добавив еще один параллельный резистор) для более длинных шин и на более высоких частотах. Если вы беспокоитесь об этих цифрах, вы можете снизить тактовую частоту I2C. Вы также можете исследовать края вашего сигнала с помощью прицела. Кроме того, если вы действительно хотите покопаться в этом материале, вы читаете в официальном руководстве I2C. Но на самом деле я думаю, что то, что у вас есть, вероятно, прекрасно.
- Отключение внутренних подтягивающих резисторов i2c
- Путаница между SPI и I2C для SSD1306 OLED
- Минимальное значение I2C-подтягивающий резистор для arduino
- Несколько подчиненных устройств I2C на Arduino — Pull-up значения
- Не могу отключить внутренний интерфейс I2C подтягиваний на ESP32
- i2c высокоскоростные и подтягивающие резисторы
- DS1337 с общим подтягиванием I2C
- Отправка и получение различных типов данных через I2C в Arduino
но не слишком ли много у меня подтягивающих резисторов? я думал, что у меня должен быть только 1 комплект? тогда я должен удалить те, что на датчиках lux?, @levi Clouser
Я преобразовал большую часть моего предыдущего (теперь удаленного) комментария, адресованного вам, в дополнение к ответу., @timemage
Попробуйте заменить некоторые из объемных колпачков 1,0 мкФ чем - то в диапазоне 10-100 нФ, чтобы добавить обход высокой частоты., @Gil