Действительно ли НУЖНЫ внешние резисторы для подключения переключателя 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-переключатель?

Иллюстративная схема:

Заземление <- [переключатель] -> Вывод ввода-вывода (сконфигурирован для ввода, включено внутреннее подтягивание)

, 👍6

Обсуждение

Внутреннее подтягивание-это как 50 тысяч. Там не так уж много течения, чтобы беспокоиться о нем, @chrisl

Я думаю, что ваш анализ верен., @the busybee


2 ответа


1

Если я облажаюсь и случайно выполню код, который настраивает вывод, подключенный непосредственно к земле через замкнутый переключатель, как высокий выход, вывод (и, вероятно, весь чип), скорее всего, превратится в дым. Я могу справиться с этим риском.

В дополнение к “есть очевидная ошибка”, также может быть ошибка, которая срабатывает только в очень редких условиях, или событие “космический луч”, которое заставляет процессор неправильно выполнять инструкции.

Или, может быть, металлический инструмент или кусок мусора упал на два вывода процессора, а другой вывод-это выход, который в настоящее время высок. (Конечно, от этого невозможно защититься во всех случаях.)

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

Произойдет ли это? Скорее всего, нет. Стоит ли от этого защищаться? Зависит от вашего приложения, от трудно поддающихся количественной оценке вероятностей риска и от того, насколько сложной будет замена процессора.

,

Главная проблема в том, что я застрял, работая с платой Arduino Mega2560 protoshield, которая имеет только море изолированных кольцевых площадок. Если бы он был похож на макетную плату с подключенными 2 или более соседними колодками (так что я мог бы просто припаять DIP-переключатель вдоль границы между двумя наборами колодок, а затем припаять резисторы к следующим колодкам), я бы даже не потрудился задуматься о необходимости резисторов. Но в этом случае пайка даже ПРОВОДОВ AWG30 к контактам DIP-переключателя была большой болью, а резисторы вызвали бы у меня слезы., @Bitbang3r


0

Обычно лучше использовать резистор при подключении либо к +5В, либо к земле. Это защищает систему от программных ошибок, особенно во время напряженной отладки. Даже переход к следующему проекту, забыв о существующей проводке, может стать источником неприятностей.

,