- kollino.de - https://www.kollino.de -

Pullup- und Pulldown Widerstand

PullupPulldown-HeaderHeute mal ein kurzer Beitrag zum Thema Pullup- und Pulldown-Widerstände in Verbindung mit Buttons, sprich Tastern.

Aber auch beim Einsatz von Transistoren kommen recht häufig auch Pulldown-Widerstände vor. Das ist nicht sehr verwunderlich, sind Transistoren ja auch eine Art Schalter, die schalten, sobald an der Basis genug Strom anliegt und der Transistor dann Collector und Emitter durchschaltet.

Wofür brauchen wir aber diese Pullup-/Pulldown-Widerstände?
In knappen Worten: Um einen unbestimmten Zustand bestimmt zu machen. Mit den Worten eines Programmierers: Wir initialisieren die Variable “Taste” mit dem Wert “HIGH” oder “LOW”.

Stellen wir uns folgendes vor:

Zum Vergrößern Bild anklicken [1]

Zum Vergrößern Bild anklicken

Wir haben einen Taster der angeschlossen ist am Pin 6 und mit GND (Ground/Masse) verbunden ist.
Wenn der Taster noch nicht gedrückt wurde, besteht auch keine Verbindung zwischen Eingangspin 6 und GND.

Fehlt jetzt an dieser Stelle noch die Verbindung zu VCC über den Widerstand (rechts daneben) – wir haben ihn im Gegensatz zum Bild noch nicht auf dem Breadboard eingebaut – dann liegt so lange der Taster nicht gedrückt wurde am Pin 6 weder GND, noch VCC an.
Man sagt auch, der Zustand ist schwebend.

Der Pin kann diesen Zustand nicht interpretieren, da er nur HIGH (VCC) und LOW (GND) kennt. Kleinste Veränderungen, beispielsweise ausgelöst durch die Berührung mit dem Finger lassen eine dazwischengeschaltete LED mal leuchten, mal nicht leuchten. Denn unsere Haut ist auch Widerstand, die in diesem Fall die Signalhöhe verändert von LOW nach HIGH und umgekehrt.

Daher müssen wir dafür sorgen, dass der Pin einen Startwert bekommt, der eindeutig ist. Das machen wir mit dem Widerstand fest, in dem wir ihn entweder zwischen Taster und GND (Pulldown-Widerstand), oder zwischen Taster und VCC (Pullup-Widerstand) setzen und das Signal so entsprechend LOW oder HIGH defnieren.

Zum Vergrößern Bild anklicken [2]

Zum Vergrößern Bild anklicken

Zum Vergrößern Bild anklicken [3]

Zum Vergrößern Bild anklicken

Internal Pullup

Bei einem ATMega-Prozessor könnte man beispielsweise auf einen Pullup-Widerstand verzichten, da diese auf allen Pins – außer auf Pin 13, (Arduino Unos haben da ja auf dem Board eine LED verbaut) – von Werk aus einen Pullup-Widerstand integriert haben.

Der Vollständigkeit halber hier eine kurze Erklärung, denn ich für meinen Teil verwende in eigenen Aufbauten immer Pullup-Schaltungen mit einem externen Widerstand. Diese 2 Cent für den Widerstand können einem unter Umständen viel Zeit ersparen, denn nicht jeder Controller verfügt über interne Pullup-Widerstände und will man seine Schaltung mal mit einem anderen Controller verwenden und denkt nicht mehr an die fehlenden Pullup-Widerstände, wird man lange nach zufällig auftretenden Fehlern suchen.

In der Zeile 11 definieren wir vor Programmstart mittels “INPUT_PULLUP” die Verwendung des internen Pullup-Widerstands.

Man findet nur selten einen Hinweis darauf – außer im meterdicken Manual des ATMega-Controllers – dass es intern keinen Pulldown-Widerstand gibt. Den sucht Ihr vergebens.

Der Rest des Programms sollte klar sein. Wir definieren Ein- und Ausgabepins, initialisieren den Status des Tasters und warten in der loop() auf den Druck des Tasters und wenn dies geschieht, soll die LED aufleuchten und beim loslassen wieder ausgehen.

Gar nicht so schwer, oder?
Und genau so verhält es sich auch bei den vorhin schon angesprochenen Transistoren. Um einen nicht schwebenden Zustand zu erreichen sollte man einen entsprechenden Widerstand (R1) von der Basis nach GND legen, um das Signal initial nach unten zu ziehen. Wir wenden damit einen Pulldown-Widerstand an, um die Ausgangssituation auf einen bestimmten Wert zu setzen, den wir dann durch weiteren Ausbau unserer Schaltung eindeutig ändern können, ohne störende Einflüsse.

Zum Vergrößern Bild anklicken [4]

Zum Vergrößern Bild anklicken