U novějších Arduinos lze nastavit pinMode na jeden ze tří stavů: OUTPUT
, INPUT
a INPUT_PULLUP
.
Tato stránka říká:
Čip Atmega na Arduinu má interní pull-up rezistory (rezistory, které se interně připojují k napájení), ke kterým máte přístup. Pokud dáváte přednost použití těchto namísto externích rozevíracích rezistorů, můžete použít argument INPUT_PULLUP v pinMode (). Toto efektivně invertuje chování, kde HIGH znamená, že je senzor vypnutý, a LOW znamená, že je senzor zapnutý.
Jsem si docela jistý, že invertování chování není však jediná věc, kterou dělá.
Co dělá INPUT_PULLUP
? Čím se liší od INPUT
a jak se člověk rozhodne, který z nich použije?
Komentáře
- INPUT_PULLUP byl přidán s IDE 1.0.1. Není důležité, kterou desku Arduino používáte, všechny podporují PULLUPy.
Odpověď
Výchozí hodnota je INPUT
který nastaví kolík jako INPUT
. Pokud je kolík zcela odpojen, bude náhodně číst HIGH
a LOW
. Pokud jej připojíte na + 5 V nebo 0 V, bude zřejmě číst HIGH
nebo LOW
.
Čip Atmega, který je součástí Arduina, má vnitřní odpory s hodnotou kolem 20 kOhm. (Další podrobnosti najdete v dokumentaci DigitalPins ) Tyto rezistory lze volitelně interně připojit pomocí INPUT_PULLUP
. To je funkčně (a elektricky) ekvivalentní připojení rezistoru ~ 20 kOhm mezi pin a + 5V, jediný rozdíl je v tom, že nevyžaduje žádné externí komponenty a můžete ho během provádění programu zapínat a vypínat v softwaru.
Proč tedy přítahy a ne přítahy? Existuje pravděpodobně několik důvodů, ale když zapojujete tlačítka nebo spínače nebo něco „normálně otevřeného“, musíte je pouze svázat s uzemněním, nemusíte k nim napájet + 5 V. Protože většina desek bude navrženo s velkými zemními vývody z důvodu stínění, vázání na zem je prakticky důvod.
Některé více vybavené integrované obvody, jako jsou čipy ARM, mají jak pull ups, tak pull downs, ale 8bitová řada AVR přichází pouze s pull -ups. Musíte si jen uvědomit, že HIGH
je „otevřený“ a LOW
je „uzavřen“.
Komentáře
- Upvote. Pro informaci, podle dokumentace jsou interní přírůstky 20 kB, ne proto, že by to znamenalo velký rozdíl od 50 kB. arduino.cc/en/Tutorial/DigitalPins
Odpověď
Všimněte si, že předchozí na verzi 1.0.1, můžete zapnout vytažení pomocí digitalWrite()
. A stále můžete.
Kód:
Toto je důležitý rozdíl, protože INPUT_PULLUP
zjevně zapíná pull-up rezistor. Méně zřejmé však je, že počínaje verzí 1.0.1 vynutí volání INPUT
vynutit vypnutí. (Dříve zůstal stav vytažení stejný).
Chcete-li zjistit, jak pin funguje s vytažením a bez něj, podívejte se na následující videa.
Plovoucí pin na osciloskopu: http://www.youtube.com/watch?v=dBIBFLYCjMM
S povoleným Pull-Up: http://www.youtube.com/watch?v=SAIw7LLVl-U
Úplné výukové video o vytažení (všimněte si, že jsem to vytvořil před přidáním INPUT_PULLUP do knihovny Arduino): http://www.youtube.com/watch?&v=jJnD6LdGmUo
Komentáře
- Velmi chytré. Děkuji, že jste to napsali. Hlasovat.