<style>[reveal]{opacity:1 !important;transform:none !important}</style>

Taster am Mikrocontroller (Pull-up, Pull-down)

Taster richtig an Arduino und ESP32 anschließen: Pull-up oder Pull-down, interner oder externer Widerstand, Wert mit Logikpegeln, Leitungslänge und Leckstrom bestimmen.

7 Min. LesezeitTaster ArduinoPull-up-WiderstandPull-down-WiderstandINPUT_PULLUP

Ein Taster ist das einfachste Eingabegerät überhaupt, und doch geht beim Anschließen oft etwas schief: Der Eingang meldet wilde Tastendrücke, sobald du die Hand in die Nähe hältst, oder er reagiert gar nicht. Der Grund ist fast immer derselbe. Ein Taster kann einen Pin nur mit einem Potenzial verbinden, etwa mit Masse. Ist er offen, hängt der Pin in der Luft. Ein Pull-up- oder Pull-down-Widerstand gibt ihm dann einen festen Pegel.

Diese Beschaltung brauchst du für jeden Taster, Schalter, Endschalter, Reedkontakt und jeden Open-Collector-Ausgang eines Sensors. Sie gilt für den Arduino Uno mit 5 V genauso wie für den ESP32 mit 3,3 V; die Unterschiede stehen weiter unten.

Schaltplan

Drei Taster an einem ATmega328P: S1 an PD2 (Pin 4) mit Pull-up R1 10 kΩ nach +5 V und Taster nach Masse; S2 an PD3 (Pin 5) als Pull-down mit R2 10 kΩ nach Masse und Taster nach +5 V; S3 an PD4 (Pin 6) direkt nach Masse, Pull-up im Chip
Links zwei Pull-up-Varianten, rechts der Pull-down. Die Pinnummern gelten für den ATmega328P im DIP-28-Gehäuse.
  • S1, S2, S3: Taster als Schließer. Sie verbinden den Pin nur, solange sie gedrückt sind.
  • R1, 10 kΩ (Pull-up): zieht D2 auf 5 V, solange S1 offen ist. Gedrückt liegt der Pin auf Masse: Der Taster ist aktiv low.
  • R2, 10 kΩ (Pull-down): zieht D3 auf Masse. S2 legt den Pin beim Drücken an 5 V: aktiv high.
  • S3 ohne Widerstand: Hier übernimmt der eingebaute Pull-up des Mikrocontrollers die Aufgabe von R1. Du schaltest ihn per Software mit INPUT_PULLUP ein.
  • IC1, ATmega328P: der Controller des Arduino Uno. D2, D3 und D4 sind die Pins 4, 5 und 6 des DIP-28-Gehäuses.

So funktioniert die Schaltung

Ein Eingang des Mikrocontrollers ist extrem hochohmig. Laut Datenblatt fließt höchstens 1 µA hinein. Hängt er offen, bestimmen winzige Ladungen sein Potenzial: Einstreuungen von Leitungen, die Hand des Nutzers, der Nachbarpin. Der gelesene Wert springt zufällig zwischen 0 und 1. Man spricht von einem floating input.

Der Pull-up-Widerstand ist eine schwache Verbindung zur Versorgung. Ohne Tastendruck fließt durch ihn nur der winzige Eingangsstrom; an 10 kΩ fallen dabei höchstens 1 µA · 10 kΩ = 10 mV ab, der Pin liegt also praktisch auf 5 V. Drückst du den Taster, verbindet er den Pin niederohmig mit Masse. Der Widerstand verhindert, dass dabei ein Kurzschluss entsteht: Es fließen 5 V / 10 kΩ = 0,5 mA, und an ihm liegt die volle Spannung. R1 und Taster bilden einen Spannungsteiler, dessen unterer Teil entweder unendlich oder null Ohm hat.

Der Pull-down arbeitet spiegelbildlich. Welche Variante du nimmst, ist meist Geschmackssache. In der Praxis setzt sich der Pull-up durch: Der Taster liegt dann an Masse, die Leitung zum Taster führt im Ruhezustand keine Versorgung, und jeder Mikrocontroller hat Pull-ups eingebaut. Der ATmega328P hat gar keine internen Pull-downs.

Dimensionierung

Beispiel: Ein Endschalter sitzt 10 m vom Arduino Uno entfernt. Die zweiadrige Leitung hat etwa 100 pF pro Meter.

1. Logikpegel. Der ATmega328P erkennt an 5 V sicher Low unter 0,3 · UCC = 1,5 V und sicher High über 0,6 · UCC = 3,0 V. Dazwischen ist der Zustand nicht garantiert. Wie solche Schwellen entstehen, steht unter Logikfamilien.

2. Obergrenze aus dem Leckstrom. Mit dem Pull-up muss der Pin trotz 1 µA Eingangsstrom über 3,0 V bleiben:

Rmax = UCC − UIH,minIIL = 5 V − 3,0 V1 µA = 2 MΩ

Das ist keine echte Grenze; Störungen setzen ihr viel früher ein Ende.

3. Untergrenze aus dem Strom. Gedrückt fließt I = UCC / R. Bei Batteriebetrieb kostet ein dauernd gedrückter Schalter Energie, außerdem sollen Kontakte nicht unnötig belastet werden. 10 kΩ ergeben 0,5 mA und 5 V · 0,5 mA = 2,5 mW – unkritisch. Viele Kontakte brauchen umgekehrt einen kleinen Mindeststrom, damit sich keine Oxidschicht bildet; bei vergoldeten Tastern genügen Mikroampere, bei Industrieschaltern mit Silberkontakten ist 1 mA eine gute Wahl.

4. Leitungskapazität. 10 m Leitung haben rund 1 nF. Lässt du den Taster los, muss der Pull-up diese Kapazität aufladen (Kondensator an Gleichspannung). Die Zeit bis zur High-Schwelle:

t = −R · C · ln(1 − UIH,minUCC) = 0,92 · R · C

Mit R1 = 10 kΩ sind das 9,2 µs, mit dem internen Pull-up im ungünstigsten Fall von 50 kΩ dann 46 µs. Für einen Taster ist beides schnell genug.

Spannung am Pin nach dem Loslassen bei 1 nF Leitungskapazität: mit 10 kΩ nach 9,2 µs über 3 V, mit 50 kΩ erst nach 46 µs
Der Pull-up lädt die Leitung auf. Je hochohmiger er ist, desto länger hängt der Pin im undefinierten Bereich.

5. Störfestigkeit. Wichtiger als die Zeit ist, wie leicht sich der Pegel stören lässt. Koppelt eine benachbarte Leitung einen Störstrom von 10 µA ein, erzeugt er am internen 50-kΩ-Pull-up 0,5 V, am externen 10-kΩ-Widerstand nur 0,1 V. Für Leitungen über einen Meter oder in gestörter Umgebung nimmst du deshalb einen externen Pull-up von 4,7 bis 10 kΩ. Kurze Taster auf der Platine kommen mit dem internen aus.

Code

const int S1 = 2;   // externer Pull-up R1
const int S2 = 3;   // externer Pull-down R2
const int S3 = 4;   // interner Pull-up

void setup() {
  pinMode(S1, INPUT);           // R1 hält den Pegel
  pinMode(S2, INPUT);
  pinMode(S3, INPUT_PULLUP);    // Pull-up im Chip einschalten
  Serial.begin(9600);
}

void loop() {
  bool s1 = digitalRead(S1) == LOW;    // Pull-up: gedrückt = LOW
  bool s2 = digitalRead(S2) == HIGH;   // Pull-down: gedrückt = HIGH
  bool s3 = digitalRead(S3) == LOW;
  Serial.print(s1); Serial.print(s2); Serial.println(s3);
  delay(100);
}

Der Code fragt nur den Zustand ab. Willst du Tastendrücke zählen, musst du das Prellen der Kontakte abfangen; wie das in Hardware und Software geht, steht unter Taster entprellen.

Bauteilliste

BezeichnerWert/TypHinweis
IC1ATmega328P (Arduino Uno)oder ESP32, siehe unten
R110 kΩ, 0,25 WPull-up für D2; bei langer Leitung 4,7 kΩ
R210 kΩ, 0,25 WPull-down für D3
S1–S3Kurzhubtaster 6 × 6 mmvier Beine: je zwei sind intern verbunden

Varianten

ESP32. Hier liegen die Schwellen bei 0,25 · 3,3 V ≈ 0,83 V und 0,75 · 3,3 V ≈ 2,5 V. Die Pull-ups und Pull-downs im Chip haben etwa 45 kΩ; beide Richtungen gibt es, also auch INPUT_PULLDOWN. Ausnahme sind GPIO 34 bis 39: Sie können nur Eingang sein und haben keine internen Widerstände. Ein Taster dort braucht immer einen externen Pull-up. Und kein Pin verträgt mehr als 3,3 V; ein Pull-up nach 5 V ist tabu.

Strapping-Pins meiden. GPIO 0, 2, 5, 12 und 15 des ESP32 legen beim Start fest, wie er bootet. Ein externer Pull-up an GPIO 12 etwa schaltet die Flash-Spannung auf 1,8 V, und das Modul startet nicht mehr. Für Taster nimmst du lieber Pins wie GPIO 4, 13, 14 oder 27.

Schutz bei langen Leitungen. Ein Widerstand von 1 kΩ in Reihe direkt vor dem Pin begrenzt den Strom, wenn auf der Leitung eine Störspitze oder statische Entladung ankommt (ESD). Zusammen mit 100 nF gegen Masse entsteht ein RC-Tiefpass, der zugleich grob entprellt. Bei 24-V-Signalen aus der Industrie gehört ein 24-V-Eingang mit Optokoppler dazwischen.

Viele Taster. Mehr als eine Handvoll Taster schließt du als Matrix oder über ein Schieberegister an; oder du legst sie über verschieden große Widerstände an einen einzigen ADC-Eingang.

Typische Fehler

  • Eingang offen gelassen: Der Pin meldet zufällige Tastendrücke, vor allem wenn du die Leitung berührst. Fehlt der Pull-up, oder steht im Code INPUT statt INPUT_PULLUP?
  • Logik verkehrt: Mit Pull-up bedeutet LOW „gedrückt“. Wer HIGH abfragt, sieht den Taster ständig gedrückt.
  • Taster um 90° verdreht: Die vierbeinigen Kurzhubtaster haben zwei intern verbundene Paare. Falsch gesteckt ist der Pin dauerhaft mit Masse verbunden. Mit dem Multimeter im Durchgangsmodus prüfst du, welche Beine zusammengehören.
  • Pin als Ausgang: Ist der Pin versehentlich als Ausgang auf HIGH geschaltet, schließt der Taster ihn gegen Masse kurz. Es fließen 40 mA oder mehr, auf Dauer leidet der Pin.
  • ESP32 startet nicht mehr: Der Taster hängt an einem Strapping-Pin und ist beim Einschalten gedrückt, oder ein Pull-up liegt an GPIO 12.

Selbsttest

Warum liest ein offener Eingang zufällige Werte?

Er ist so hochohmig, dass schon winzige eingekoppelte Ladungen sein Potenzial bestimmen; ohne Pull-up oder Pull-down hat er keinen festen Pegel.

Welcher Strom fließt durch einen 4,7-kΩ-Pull-up an 3,3 V, wenn der Taster gedrückt ist?

3,3 V / 4,7 kΩ ≈ 0,7 mA.

Ein Taster mit internem Pull-up liest gedrückt LOW. Wie fragst du ihn ab?

if (digitalRead(pin) == LOW) – gedrückt ist LOW.

Warum ist ein Pull-up von 1 MΩ eine schlechte Idee, obwohl er rechnerisch funktioniert?

Er ist sehr störanfällig: Schon 1 µA Störstrom verschiebt den Pegel um 1 V, und lange Leitungen lädt er nur langsam auf.

Welche ESP32-Pins brauchen für einen Taster immer einen externen Pull-up?

GPIO 34 bis 39, denn sie haben keine internen Pull-up- oder Pull-down-Widerstände.