Was ist der Unterschied zwischen INPUT und INPUT_PULLUP?

24

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_PULLUPdas? Was unterscheidet es von INPUTund wie entscheidet man sich für eine?

Manishearth
quelle
INPUT_PULLUP wurde mit IDE 1.0.1 hinzugefügt. Es ist unerheblich, welches Arduino-Board Sie verwenden, alle unterstützen PULLUPs.
Baldengineer

Antworten:

23

Die Voreinstellung ist, INPUTdie den Pin als einstellt INPUT. Wenn der Stift vollständig abgezogen ist, wird zufällig HIGHund gelesen LOW. Wenn Sie es an + 5V oder 0V binden, wird es offensichtlich HIGHoder lesen LOW.

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" und LOW"geschlossen" ist.


quelle
Upvote. Zu Ihrer Information, laut Dokumentation sind die internen Klimmzüge 20K, nicht dass es einen großen Unterschied zu 50K macht. arduino.cc/de/Tutorial/DigitalPins
SDsolar
9

Beachten Sie, dass Sie vor 1.0.1 Pullups mithilfe von aktivieren konnten digitalWrite(). Und du kannst es immer noch.

Der Code:

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

Dies ist ein wichtiger Unterschied, da INPUT_PULLUPder Pull-up-Widerstand offensichtlich eingeschaltet wird. Weniger offensichtlich ist jedoch, dass ab 1.0.1 durch einfaches Aufrufen INPUTdas 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

Baldengineer
quelle
Sehr schlau. Vielen Dank für das Schreiben. Upvote.
SDsolar