Я думал о создании модулей для платы разработки, которую я сделал несколько дней назад, которая будет включать интерфейсы spi / i2c.
Проблема в том, что я не включил подтягивающие резисторы в выводы MCU на основной плате и думал добавить их в модули, чтобы сделать их более «общими», чтобы каждый пользователь мог использовать их без необходимости добавлять дополнительные резисторы в модули. макетная плата.
Но потом я столкнулся со следующей проблемой. Если я добавлю подтягивающие резисторы в дополнительные модули и подключу, например, два или более модулей к одной шине, я получу эти резисторы параллельно, поэтому сопротивление будет падать и не будет выполнять свою функцию.
Но если я добавлю подтягивающие резисторы к основной плате, у меня эти контакты в MCU будут всегда как активный низкий уровень.
Итак, главный вопрос:
Как подключить несколько модулей к одной шине, имея на каждом из них нагрузочные резисторы, но не подключить их параллельно, если у вас более одного модуля? Это возможно?
Или лучшее решение здесь - включить нагрузочные резисторы в MCU и не включать их в модули?
Спасибо.-
Ответы:
Я предполагаю, что общая длина каждого из ваших автобусов меньше 1 метра, что типично для простых I 2 C и SPI. Кроме того, емкость шины находится в пределах спецификации.
Должен быть только один (1) набор подтягивающих резисторов. В результате, лучшее место для них - плата основного контроллера. Не помещайте подтягивания на модули.
Если вы хотите иметь подтягивание в некоторых случаях и не иметь их в других случаях.
редактирование: честно говоря, я думаю, что это ошибка, что Sparkfun помещает подтягивания на ведомые модули I 2 C. К сожалению, не все, кто покупает модули, понимают, что чрезмерная подтяжка может быть проблемой. Было бы лучше, если бы платы контроллера (вместо ведомых периферийных плат) имели подтягивания с помощью перемычек припоя. Ох ... Подождите ... Arduino не несет (опционально) подтягивания (хотя, возможно, так и должно быть). Итак, давайте повсюду будем подтягивать. Более простой начальный опыт. Но добавьте несколько ведомых модулей, и шина перестанет работать.
Обновление (май 2015):
- Связанное обсуждение в комментариях в другой ветке.
- В своих недавних модулях SparkFun начал добавлять перемычки для пайки между Vcc и подтягивающими резисторами I 2 C ( пример ). Это позволяет легче отключать подтягивания.
обновление (декабрь 2015 г.): на досках объявлений постоянно появляются
похожие вопросы об устранении неполадок I 2 C с несколькими модулями. Попытка расширенного общего ответа.
источник
Одним из вариантов является использование комплектов резисторов SIL или DIL и установка их в гнезда на каждом модуле. При построении системы с несколькими модулями извлекайте их из каждого модуля, кроме последнего. Это экономит место на доске над перемычками.
Вариации на эту тему могут включать в себя переключатели FET для подключения или отключения резисторов, управляемые одной перемычкой, или запасной контакт на разъеме (чтобы при подключении другого модуля резисторы автоматически отключались)
источник