Bei neueren Arduinos kann man pinMode einen der drei Zustände gesetzt: OUTPUT
, INPUT
, und INPUT_PULLUP
.
Diese Seite sagt:
Der Atmega-Chip auf dem Arduino verfügt über interne Pull-up-Widerstände (Widerstände, die intern an die Stromversorgung angeschlossen werden), auf die Sie zugreifen können. Wenn Sie diese anstelle von externen Pulldown-Widerständen verwenden möchten, können Sie das INPUT_PULLUP-Argument in pinMode () verwenden. Dies kehrt das Verhalten effektiv um, wobei HOCH bedeutet, dass der Sensor ausgeschaltet ist, und NIEDRIG bedeutet, dass der Sensor eingeschaltet ist.
Ich bin mir ziemlich sicher, dass das Umkehren des Verhaltens nicht das einzige ist, was es tut.
Was macht INPUT_PULLUP
das? Was unterscheidet es von INPUT
und wie entscheidet man sich für eine?
Antworten:
Die Voreinstellung ist,
INPUT
die den Pin als einstelltINPUT
. Wenn der Stift vollständig abgezogen ist, wird zufälligHIGH
und gelesenLOW
. Wenn Sie es an + 5V oder 0V binden, wird es offensichtlichHIGH
oder lesenLOW
.Intern im Arduino befinden sich Pullup-Widerstände mit einem Wert um 50k-Ohm. Diese Widerstände können optional intern angeschlossen werden
INPUT_PULLUP
. Dies ist funktionell (und elektrisch) äquivalent zum Anschließen eines 50k-Ohm-Widerstandes zwischen dem Pin und + 5V. Der einzige Unterschied besteht darin, dass keine externen Komponenten erforderlich sind und Sie diese während der Ausführung Ihres Programms in der Software ein- und ausschalten können.Warum also Klimmzüge und nicht Klimmzüge? Es gibt wahrscheinlich mehrere Gründe dafür, aber wenn Sie Tasten oder Schalter verkabeln oder irgendetwas "normalerweise offen", müssen Sie sie nur an Masse binden, Sie müssen keine + 5V an sie anlegen. Da die meisten Boards ohnehin aus Gründen der Abschirmung mit großen Bodendurchflüssen ausgelegt werden, ist das Binden an den Boden praktisch ein Grund.
Einige weiterentwickelte ICs wie ARM-Chips verfügen sowohl über Pull-Ups als auch über Pull-Downs. Die 8-Bit-AVR-Linie ist jedoch nur mit Pull-Ups ausgestattet. Man muss sich nur daran erinnern, dass
HIGH
"offen" undLOW
"geschlossen" ist.quelle
Beachten Sie, dass Sie vor 1.0.1 Pullups mithilfe von aktivieren konnten
digitalWrite()
. Und du kannst es immer noch.Der Code:
Dies ist ein wichtiger Unterschied, da
INPUT_PULLUP
der Pull-up-Widerstand offensichtlich eingeschaltet wird. Weniger offensichtlich ist jedoch, dass ab 1.0.1 durch einfaches AufrufenINPUT
das Ausschalten des Pullups erzwungen wird. (Zuvor blieb der Zustand des Klimmzugs derselbe).In den folgenden Videos sehen Sie, wie eine Stecknadel mit und ohne Klimmzug funktioniert.
Schwimmender Stift an einem Oszilloskop: http://www.youtube.com/watch?v=dBIBFLYCjMM
Mit aktiviertem Pull-Up: http://www.youtube.com/watch?v=SAIw7LLVl-U
Vollständiges Tutorial-Video zu Pull-Ups (Beachten Sie, dass ich dies gemacht habe, bevor INPUT_PULLUP zur Arduino-Bibliothek hinzugefügt wurde): http://www.youtube.com/watch?&v=jJnD6LdGmUo
quelle