На новых Arduinos можно установить pinMode в одном из трех состояний: OUTPUT
, INPUT
, и INPUT_PULLUP
.
На этой странице написано:
Чип Atmega на Arduino имеет внутренние подтягивающие резисторы (резисторы, которые подключаются к источнику питания внутри), к которым вы можете получить доступ. Если вы предпочитаете использовать их вместо внешних понижающих резисторов, вы можете использовать аргумент INPUT_PULLUP в pinMode (). Это эффективно инвертирует поведение, где HIGH означает, что датчик выключен, а LOW означает, что датчик включен.
Я скорее уверен, что инвертирование поведения - это не единственное, что он делает.
Что делает INPUT_PULLUP
? Чем он отличается INPUT
и как решить, какой из них использовать?
Ответы:
По умолчанию
INPUT
устанавливается пин-код какINPUT
. Если контакт полностью отключен, он будет случайным образом читатьHIGH
иLOW
. Если вы связываете его с +5 В или 0 В, он, очевидно, будет читатьHIGH
илиLOW
.Внутри Arduino установлены подтягивающие резисторы со значением около 50 кОм. Эти резисторы могут быть подключены по выбору
INPUT_PULLUP
. Это функционально (и электрически) эквивалентно подключению резистора 50 кОм между контактом и + 5 В, единственное отличие состоит в том, что для него не требуются внешние компоненты, и вы можете включать и выключать его в программном обеспечении во время выполнения вашей программы.Так почему подтягивания, а не понижения? Вероятно, для этого есть несколько причин, но при подключении кнопок или переключателей или чего-либо «нормально разомкнутого» вам нужно только привязать их к земле, вам не нужно подавать на них + 5В. Так как большинство досок будут спроектированы с большими разливами грунта по причинам экранирования, в любом случае, привязка к грунту является практически причиной.
Некоторые более функциональные микросхемы, такие как микросхемы ARM, имеют как повышающие, так и понижающие уровни, но 8-разрядная линия AVR поставляется только с повышающими характеристиками. Вы просто должны помнить, что
HIGH
это «открыто» иLOW
«закрыто».источник
Обратите внимание, что до версии 1.0.1 вы могли включить подтягивания с помощью
digitalWrite()
. И ты все еще можешь.Код:
Это важное различие, потому что,
INPUT_PULLUP
очевидно, включает подтягивающий резистор. Однако, менее очевидным является то, что начиная с 1.0.1, простой вызов вызываетINPUT
отключение подтягивания. (Раньше состояние подтяжки оставалось прежним).Чтобы увидеть, как работает пин с подтягиванием и без него, посмотрите следующие видео.
Плавающая булавка на осциллографе: http://www.youtube.com/watch?v=dBIBFLYCjMM
С включенным Pull-Up: http://www.youtube.com/watch?v=SAIw7LLVl-U
Полное учебное видео по подтягиванию (обратите внимание, что я сделал это до того, как INPUT_PULLUP был добавлен в библиотеку Arduino): http://www.youtube.com/watch?&v=jJnD6LdGmUo
источник