Sonntag, 30. August 2015

Pull-up und Pull-down Widerstände

In diesem Post geht es um Pull-up und Pull-down Widerstände. Diese werden immer dann gebraucht, wenn ein Pin des Arduino als Eingang, beispielsweise mit einem Button, verwendet wird. Dabei ist der Zustand des Eingangs klar, wenn der Button gedrückt wird. Solange er jedoch nicht gedrückt wird, weiß man nicht, ob der Eingang LOW oder HIGH ist. Über einen Pull-up Widerstand wir dann der Eingang auf HIGH geschaltet, und über einen Pull-down Widerstand auf LOW.


Die Funktionsweise von Pull-up / Pull-down Widerständen

Ein Pull-up Widerstand soll den Eingang des Mikrocontrollers auf HIGH ziehen, solange er mit nichts verbunden ist. Aus diesem Grund wird der Eingangspin über den Pull-up Widerstand(ein ganz normaler Widerstand mit einer Größe von mehreren kOhm) mit den 5V Spannung des Arduino verbunden. Dadurch entsteht nur ein kleiner, sehr begrenzter, Stromfluss, der jedoch genügt, damit der Pin auf HIGH steht.

Ein Pull-down Widerstand soll genau das Gegenteil bewirken, also den Pin auf LOW ziehen, solange er mit nichts verbunden ist. Dazu wird der Pin über einen Widerstand(mehrere kOhm groß) mit dem Ground verbunden. 

Da bei beiden Varianten ein Widerstand dazwischen geschaltet ist, ist das einkommende Signal stärker, wodurch es den Status des Eingangs bestimmern kann.

Interner Pull-up Widerstand

Praktischerweise haben die verschiedenen Arduino Boards bereits interne Pull-up Widerstände integriert. Diese kann man an allen Pins verwenden, wobei ein paar Dinge beachtet werden müssen. An Pin 0 bis 12 funktionieren sie einwandfrei. An Pin 13 ist ja bekanntlich die LED und deren Widerstand angeschlossen. Diese begrenzen den Stromfluss, wodurch die Wirkung des Pull-up Widerstands zunichte gemacht wird. 

Auch an den analog Pins sind die internen Pull-up Widerstände vorhanden, wobei hier durch die Verwendung der Pull-up Widerstände die analogen Werte zerstören würde. Deshalb sollte man die Pull-up Widerstände nur an den analog Pins verwenden, wenn man sie, in diesem Sketch, nur als digitale Inputs verwenden möchte.

Um die Pull-up Widerstände in der Arduino IDE zu aktivieren, schreibt man:
pinMode(Pin, INPUT);
digitalWrite(Pin, HIGH);

Die jeweilige Größe des Pull-up Widerstands variiert von Mikrocontroller zu Mikrocontroller. 
Da Pull-up Widerstände um einiges häufiger verwendet werden, besitzen Mikrocontroller nur integrierte Pull-up aber keine Pull-down Widerstände.

Externe Pull-up / Pull-down Widerstände

Sollte man einen Pull-down Widerstand benötigen, oder der verwendete Mikrocontroller keinen internen Pull-up Widerstand haben, muss man externe Pull-up oder Pull-down Widerstände verwenden. Dabei verbindet man immer den Eingangspin über einen großen Widerstand mit den +5V oder dem Ground. In Kombination mit einem Button sähe das so aus:

Extener Pull-down Widerstand:


Externer Pull-up Widerstand:

Kommentare:

  1. Danke, war sehr hilfreich. Bin noch Anfänger und war mir nicht so ganz im klaren was pull up bzw. down Widerstände sind.

    AntwortenLöschen
  2. Ich glaub, ich habs jetzt! Mir war das mit der Stabilisierung des Pins nicht wirklich klar (obwohl jetzt eh alles logisch erscheint). Hab seit Tagen dieses Problem gewälzt und kann nach etlichen Erklärungen, Internetseiten, Artikeln usw. die Notwendigkeit und das physikalische Konzept dahinter begreifen und endlich was anfangen damit :-).

    Vielen Dank für deine klaren Worte!
    LG, Roland

    AntwortenLöschen