Bei neueren Arduinos kann man pinMode auf einen von drei Zuständen setzen: OUTPUT
, INPUT
und INPUT_PULLUP
.
Auf dieser Seite heißt es:
Der Atmega-Chip auf dem Arduino verfügt über interne Pull-up-Widerstände (Widerstände, die intern an die Stromversorgung angeschlossen sind), auf die Sie zugreifen können. Wenn Sie diese anstelle externer Pulldown-Widerstände bevorzugen, können Sie das Argument INPUT_PULLUP in pinMode () verwenden. Dadurch wird das Verhalten effektiv invertiert, wobei HIGH bedeutet, dass der Sensor ausgeschaltet ist, und LOW bedeutet, dass der Sensor eingeschaltet ist.
Ich bin mir ziemlich sicher, dass das Verhalten invertiert wird ist jedoch nicht das einzige, was es tut.
Was macht INPUT_PULLUP
? Was unterscheidet es von INPUT
und wie entscheidet man, welches verwendet werden soll?
Kommentare
- INPUT_PULLUP wurde mit IDE 1.0.1 hinzugefügt. Es ist unerheblich, welches Arduino-Board Sie verwenden, alle unterstützen PULLUPs.
Antwort
Der Standardwert ist INPUT
, wodurch der Pin als INPUT
eingerichtet wird. Wenn der Pin vollständig getrennt ist, werden zufällig HIGH
und LOW
gelesen. Wenn Sie es an + 5V oder 0V binden, wird offensichtlich HIGH
oder LOW
angezeigt.
Intern im Arduino verfügt der Atmega-Chip über interne Pullup-Widerstände mit einem Wert um 20 kOhm. (Weitere Informationen finden Sie in der Dokumentation zu DigitalPins .) Diese Widerstände können optional intern mit INPUT_PULLUP
verbunden werden. Dies entspricht funktional (und elektrisch) dem Anschließen eines ~ 20 kOhm-Widerstands zwischen Pin und +5 V, der einzige Unterschied besteht darin, dass keine externen Komponenten erforderlich sind und Sie ihn während der Ausführung Ihres Programms in der Software ein- und ausschalten können.
Warum also Klimmzüge und keine Klimmzüge? Es gibt wahrscheinlich mehrere Gründe dafür, aber wenn Sie Tasten oder Schalter oder etwas „normalerweise Offenes“ verkabeln, müssen Sie sie nur an Masse binden, Sie müssen nicht + 5V an sie anschließen. Da die meisten Platinen es sein werden Aus Gründen der Abschirmung mit großen Bodengüssen ausgestattet, ist das Binden an den Boden praktisch ein Grund.
Einige ICs mit mehr Funktionen wie ARM-Chips haben sowohl Pull-Ups als auch Pull-Downs, aber die 8-Bit-AVR-Leitung wird nur mit Pull geliefert Sie müssen sich nur daran erinnern, dass HIGH
„offen“ und LOW
„geschlossen“ ist.
Kommentare
- Upvote. Zu Ihrer Information, laut Dokumentation sind die internen Klimmzüge 20.000, nicht dass es einen großen Unterschied zu 50.000 macht. arduino.cc/en/Tutorial/DigitalPins
Antwort
Beachten Sie, dass vorher In Version 1.0.1 können Sie Pullups mit digitalWrite()
aktivieren. Dies ist weiterhin möglich.
Der Code:
Dies ist eine wichtige Unterscheidung, da INPUT_PULLUP
offensichtlich den Pull-up-Widerstand einschaltet. Weniger offensichtlich ist jedoch, dass ab 1.0.1 durch einfaches Aufrufen von INPUT
das Pull-up deaktiviert wird. (Bisher blieb der Zustand des Klimmzugs gleich).
Um zu sehen, wie ein Pin mit und ohne Klimmzüge funktioniert, sehen Sie sich die folgenden Videos an.
Schwimmender Pin auf einem Oszilloskop: http://www.youtube.com/watch?v=dBIBFLYCjMM
Bei 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
Kommentare
- Sehr klug. Danke, dass du das geschrieben hast. Upvote.