Действительно ли НУЖНЫ внешние резисторы для подключения переключателя IO к земле?
Много лет назад я столкнулся с довольно долгими дебатами на AVRFreaks.сеть о том, можно ли напрямую подключать контакты AVR, которые сконфигурированы как входы с включенным внутренним подтягиванием, непосредственно к земле через кнопку или переключатель.
Из того, что я помню, консенсус в то время состоял в том, что это не так (по крайней мере, для коммутаторов, которые могут быть закрыты и проводить при сбросе), потому что, по крайней мере, некоторые микроконтроллеры AVR не были абсолютно гарантированы, чтобы их контакты находились в состоянии высокого импеданса при сбросе (по крайней мере, если чип сброс в состоянии отключения или что-то в этом роде).
Оглядываясь назад, я не уверен, применялись ли эти предупреждения даже к чипам, с которыми я познакомился в то время (ATtiny2313, ATtiny13 и ATmega162)... Я просто помню, что другие на сайте были довольно непреклонны в том, что я навлекаю беду, и я поверил им на слово.
Быстрая перемотка вперед ~15 лет.
Текущая спецификация для ATmega2560 (at https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega640-1280-1281-2560-2561-Datasheet-DS40002211A.pdf ), по-видимому, гарантирует (на стр. 7-9), что контакты, используемые портами A-L, являются трехфазными входными контактами с высоким импедансом при сбросе при всех условиях, в том числе при остановке часов (очевидно, что впоследствии используется любой загрузчик Arduino оф мог бы вести себя по-другому, если бы я попытался захватить его для двойного чтения кнопки/переключателя... но у Mega2560 так много контактов, что на самом деле нет никаких причин повторно использовать контакты, которые Arduino использует для своих целей).
Навскидку я могу вспомнить о трех потенциальных оставшихся проблемах:
Если я облажаюсь и случайно выполню код, который настраивает вывод, подключенный непосредственно к земле через замкнутый переключатель, как высокий выход, вывод (и, вероятно, весь чип), скорее всего, превратится в дым. Я могу справиться с этим риском.
Если бы я питал его от батарей, меня бы волновала постоянная утечка энергии, тратящая впустую время автономной работы. А я-нет, и не хочу.
Я не совсем уверен, что "ОК для подключения непосредственно к земле через мгновенную кнопку" обязательно приравнивается к "ОК для подключения непосредственно к земле через переключатель, который может быть замкнут и непрерывно проводить ток в течение всего срока службы цепи.
Итак... я что-нибудь пропустил? И является ли #3 законной проблемой, или это то, о чем не стоит беспокоиться, если вы говорите о чем-то вроде 8 контактов, соединенных через DIP-переключатель?
Иллюстративная схема:
Заземление <- [переключатель] -> Вывод ввода-вывода (сконфигурирован для ввода, включено внутреннее подтягивание)
@Bitbang3r, 👍6
Обсуждение2 ответа
Если я облажаюсь и случайно выполню код, который настраивает вывод, подключенный непосредственно к земле через замкнутый переключатель, как высокий выход, вывод (и, вероятно, весь чип), скорее всего, превратится в дым. Я могу справиться с этим риском.
В дополнение к “есть очевидная ошибка”, также может быть ошибка, которая срабатывает только в очень редких условиях, или событие “космический луч”, которое заставляет процессор неправильно выполнять инструкции.
Или, может быть, металлический инструмент или кусок мусора упал на два вывода процессора, а другой вывод-это выход, который в настоящее время высок. (Конечно, от этого невозможно защититься во всех случаях.)
В любом из этих случаев опасность заключается в том, что вы превращаете ситуацию, когда устройство временно ведет себя неправильно, в ситуацию, когда устройство постоянно повреждено.
Произойдет ли это? Скорее всего, нет. Стоит ли от этого защищаться? Зависит от вашего приложения, от трудно поддающихся количественной оценке вероятностей риска и от того, насколько сложной будет замена процессора.
Главная проблема в том, что я застрял, работая с платой Arduino Mega2560 protoshield, которая имеет только море изолированных кольцевых площадок. Если бы он был похож на макетную плату с подключенными 2 или более соседними колодками (так что я мог бы просто припаять DIP-переключатель вдоль границы между двумя наборами колодок, а затем припаять резисторы к следующим колодкам), я бы даже не потрудился задуматься о необходимости резисторов. Но в этом случае пайка даже ПРОВОДОВ AWG30 к контактам DIP-переключателя была большой болью, а резисторы вызвали бы у меня слезы., @Bitbang3r
Обычно лучше использовать резистор при подключении либо к +5В, либо к земле. Это защищает систему от программных ошибок, особенно во время напряженной отладки. Даже переход к следующему проекту, забыв о существующей проводке, может стать источником неприятностей.
- Как использовать этот 3-контактный ползунковый переключатель?
- Чтение датчика давления от 4 до 20 мА с использованием uno
- Остановить мигание светодиодов
- Потенциометр 10 кОм против резистора 10 кОм на ЖК-дисплее
- Как изменить вывод VCC на 3,3В на 5V Arduino Pro Micro?
- Кнопка с таймером переключения и функцией сброса времени + светодиод обратной связи
- Как узнать, нужно ли мне использовать резистор в цепи?
- Как узнать сопротивление внутреннего подтягивающего резистора?
Внутреннее подтягивание-это как 50 тысяч. Там не так уж много течения, чтобы беспокоиться о нем, @chrisl
Я думаю, что ваш анализ верен., @the busybee