Яка різниця між INPUT та INPUT_PULLUP?


24

На нових Arduinos можна встановити pinMode в одному з трьох станів: OUTPUT, INPUT, і INPUT_PULLUP.

На цій сторінці написано:

Мікросхема Atmega на Arduino має внутрішні підтягуючі резистори (резистори, які підключаються до живлення всередині), до яких можна отримати доступ. Якщо ви віддаєте перевагу використовувати ці замість зовнішніх резисторів, що випадають, ви можете використовувати аргумент INPUT_PULLUP у pinMode (). Це ефективно обертає поведінку, коли ВИСОК означає, що датчик вимкнено, а НИЗКО означає, що датчик увімкнено.

Я досить впевнений, що інвертування поведінки - це не єдине, що вона робить.

Що робить INPUT_PULLUP? Чим він відрізняється від того INPUT, і як вирішити, який використовувати?


INPUT_PULLUP додано з IDE 1.0.1. Неважливо, яку дошку Arduino ви використовуєте, всі вони підтримують PULLUP.
baldengineer

Відповіді:


23

За замовчуванням INPUTвстановлено штифт як INPUT. Якщо штифт повністю відключений, він випадково зчитується HIGHі LOW. Якщо прив'язати його до + 5 В або 0 В, воно, очевидно, буде читати HIGHабо LOW.

Внутрішні до Arduino знаходяться підтяжні резистори зі значенням близько 50 кОм. Ці резистори можна додатково підключити внутрішньо, використовуючи INPUT_PULLUP. Це функціонально (і електрично) еквівалентно підключенню резистора 50 к Ом між штифтом і + 5 В, різниця полягає лише в тому, що він не потребує зовнішніх компонентів, і ви можете вмикати і вимикати програмне забезпечення під час виконання програми.

То чому б підтягування, а не спускання? Ймовірно, це є кілька причин, але коли кнопки проводки або перемикачі або що-небудь "нормально відкрите", вам потрібно лише прив'язати їх до землі, вам не потрібно запускати до них 5 В. Оскільки в більшості випадків більшість дощок планується проектувати з великими засипаннями ґрунту з причин екранування, прив'язка до землі - це практично причини.

Деякі більш популярні ІС, такі як мікросхеми ARM, мають як підтягування, так і падіння, але 8-бітна лінія AVR постачається лише із підтягуваннями. Вам просто потрібно пам’ятати, що HIGH«відкрито» і LOW«закрито».


Оновлення FYI, згідно з документацією, внутрішні підтягування становлять 20 К, а не це значно відрізняється від 50 К. arduino.cc/en/Tutorial/DigitalPins
SDsolar

9

Зауважте, що раніше до 1.0.1 ви могли вмикати підключення за допомогою digitalWrite(). А ти ще можеш.

Кодекс:

pinMode(13, INPUT);
digitalWrite(13, HIGH); // Turns internal pull-up on
digitalWrite(13, LOW);  // Turns internal pull-up off

Це важлива відмінність, оскільки, INPUT_PULLUPочевидно, включається підтягуючий резистор. Однак менш очевидним є те, що починаючи з 1.0.1, просто виклик INPUTзмушує вимкнути підтягування. (Раніше стан підтягування залишався колишнім).

Щоб побачити, як працює шпилька з підтяжкою та без неї, перегляньте наступні відео.

Плаваючий штифт на осцилограмі: http://www.youtube.com/watch?v=dBIBFLYCjMM

Якщо ввімкнено функцію підтягування: http://www.youtube.com/watch?v=SAIw7LLVl-U

Повне відео з навчальним посібником на Pull-Ups (зауважте, що я зробив це до того, як INPUT_PULLUP було додано до бібліотеки Arduino): http://www.youtube.com/watch?&v=jJnD6LdGmUo


Дуже розумний. Дякую, що написали це. Оновлення
SDsolar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.