Как работать с несколькими подтягивающими резисторами на модулях

9

Я думал о создании модулей для платы разработки, которую я сделал несколько дней назад, которая будет включать интерфейсы spi / i2c.

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

Но потом я столкнулся со следующей проблемой. Если я добавлю подтягивающие резисторы в дополнительные модули и подключу, например, два или более модулей к одной шине, я получу эти резисторы параллельно, поэтому сопротивление будет падать и не будет выполнять свою функцию.

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

Итак, главный вопрос:

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

Или лучшее решение здесь - включить нагрузочные резисторы в MCU и не включать их в модули?

Спасибо.-

Кислород Sein
источник
Создайте отдельный модуль, который будет содержать только подтягивающие резисторы :)
Александр Зарубкин

Ответы:

14

Я предполагаю, что общая длина каждого из ваших автобусов меньше 1 метра, что типично для простых I 2 C и SPI. Кроме того, емкость шины находится в пределах спецификации.

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

Если вы хотите иметь подтягивание в некоторых случаях и не иметь их в других случаях.

  • Не заполняйте подтягивающие резисторы, когда они вам не нужны.
  • Разработайте главную плату контроллера таким образом, чтобы подтягивающие устройства соединялись с сигнальными линиями через перемычки. Удалите закорачивающие блоки, когда вам не нужны подтягивания.

редактирование: честно говоря, я думаю, что это ошибка, что Sparkfun помещает подтягивания на ведомые модули I 2 C. К сожалению, не все, кто покупает модули, понимают, что чрезмерная подтяжка может быть проблемой. Было бы лучше, если бы платы контроллера (вместо ведомых периферийных плат) имели подтягивания с помощью перемычек припоя. Ох ... Подождите ... Arduino не несет (опционально) подтягивания (хотя, возможно, так и должно быть). Итак, давайте повсюду будем подтягивать. Более простой начальный опыт. Но добавьте несколько ведомых модулей, и шина перестанет работать.

Обновление (май 2015):
- Связанное обсуждение в комментариях в другой ветке.
- В своих недавних модулях SparkFun начал добавлять перемычки для пайки между Vcc и подтягивающими резисторами I 2 C ( пример ). Это позволяет легче отключать подтягивания.

обновление (декабрь 2015 г.): на досках объявлений постоянно появляются
похожие вопросы об устранении неполадок I 2 C с несколькими модулями. Попытка расширенного общего ответа.

Ник Алексеев
источник
Да на самом деле мой случай был для примера. Например, все модули rtc, продаваемые в некоторых магазинах, включают в себя подтягивающие резисторы, так что ... как обращаться с этими модулями в этом случае. Вот почему я выделил жирным шрифтом основной вопрос. :)
Sein Oxygen
1
@SeinOxygen Если у вас есть модули с подтягивающими резисторами, а также контроллер с собственными подтягиваниями, то все эти резисторы будут появляться параллельно и представлять более жесткое подтягивание (меньшее сопротивление). Предположим, у вас есть 3х (три) резистора 2,2 кОм в качестве подтягивающих устройств. Общее сопротивление подтягиванию составляет 733 Ом. Это нарушает спецификации I2C. Что делать? Удалите лишние подтягивания из модулей (возможно, они не должны были быть там во-первых).
Ник Алексеев
@SeinOxygen Подробнее о подтягивающих значениях I2C в этой теме .
Ник Алексеев
4

Одним из вариантов является использование комплектов резисторов SIL или DIL и установка их в гнезда на каждом модуле. При построении системы с несколькими модулями извлекайте их из каждого модуля, кроме последнего. Это экономит место на доске над перемычками.

Вариации на эту тему могут включать в себя переключатели FET для подключения или отключения резисторов, управляемые одной перемычкой, или запасной контакт на разъеме (чтобы при подключении другого модуля резисторы автоматически отключались)

Брайан Драммонд
источник