Die Aufgabe
Aus der letzten Lektion bleibt ein Loch: Der Taster legt den Pegel fest, solange er gedrückt ist. Ist er offen, bestimmt ihn niemand.
Gesucht ist also ein Bauteil, das
- den Pin auf einen definierten Pegel zieht, solange der Taster offen ist, und
- dabei so schwach ist, dass der Taster es überstimmen kann, wenn er gedrückt wird.
Genau diese zwei Eigenschaften hat ein Widerstand. Er zieht — aber nur schwach. Deshalb heisst er Pull-Widerstand, von to pull, ziehen.
Der Pull-up
Ein Widerstand von 10 kΩ führt von 3.3 V auf den Knoten, an dem der GPIO-Eingang hängt. Vom selben Knoten geht der Taster nach Masse.
Geh die zwei Fälle einzeln durch — das ist die ganze Lektion:
Taster offen. Der einzige Weg vom Knoten weg führt über den Widerstand nach 3.3 V. Der Eingang zieht praktisch keinen Strom, also fliesst durch den Widerstand auch praktisch keiner. Und wo kein Strom fliesst, fällt nach U = R · I auch keine Spannung ab. Der Knoten liegt damit auf vollen 3.3 V — der Pin liest sauber High.
Taster gedrückt. Jetzt ist der Knoten direkt mit Masse verbunden — über ein Stück Draht mit nahezu null Ohm. Der Pin liest Low. Gleichzeitig liegt der Widerstand nun zwischen 3.3 V und Masse, also fliesst durch ihn ein Strom:
I = 3.3 V / 10 kΩ = 0.33 mA
Das ist der Preis für den definierten Pegel — und er fällt nur an, solange gedrückt wird.
Warum der Taster gewinnt
Beide „ziehen" am Knoten: der Widerstand nach oben, der gedrückte Taster nach unten. Warum gewinnt der Taster?
Weil das ein Spannungsteiler ist — aus 10 kΩ oben und dem Widerstand des geschlossenen Tasters unten. Und der liegt bei Bruchteilen eines Ohms:
U(Pin) = 3.3 V · 0.1 Ω / (10 000 Ω + 0.1 Ω) ≈ 0.00003 V
Also praktisch null. Der Pull-Widerstand ist absichtlich so schwach gewählt, dass jede echte Verbindung ihn mühelos übersteuert. Genau darum ist das Wort „schwach" hier kein Mangel, sondern die Konstruktionsabsicht.
Der Pull-down
Das Spiegelbild: Der Widerstand von 10 kΩ zieht den Knoten nach Masse, und der Taster verbindet ihn bei Bedarf mit 3.3 V.
- Taster offen → kein Strom durch den Widerstand → kein Spannungsabfall → der Knoten liegt auf 0 V → Low.
- Taster gedrückt → der Knoten liegt an 3.3 V → High, und durch den Widerstand fliessen wieder 0.33 mA.
Die Logik ist genau umgekehrt — und deshalb auch der Code.
Die beiden nebeneinander
| Pull-up | Pull-down | |
|---|---|---|
| Widerstand liegt zwischen | Pin und 3.3 V | Pin und Masse |
| Taster verbindet den Pin mit | Masse | 3.3 V |
| Taster offen | High (1) | Low (0) |
| Taster gedrückt | Low (0) | High (1) |
| Abfrage im Code | if pin.is_low() | if pin.is_high() |
Beide sind korrekt. Der Pull-up ist trotzdem der Normalfall — siehe unten.
Warum fast immer Pull-up
Wenn beide funktionieren, warum sieht man in echten Schaltungen fast nur Pull-ups?
- Mikrocontroller haben interne Pull-ups an praktisch jedem Pin. Interne Pull-downs gibt es zwar auch, sind aber nicht überall verfügbar. Mehr dazu in der nächsten Lektion.
- Masse ist überall. Auf jeder Platine ist GND die grösste, am besten verbundene Fläche. Einen Taster nach GND zu führen ist mechanisch und elektrisch einfacher, als eine Versorgungsleitung zu ihm zu ziehen.
- Der sichere Ruhezustand ist meist „nicht gedrückt". Fällt die Leitung zum Taster aus, liest der Pin weiter High — also „nicht gedrückt". Das ist in aller Regel der harmlosere Fehlerfall.
Der Preis ist die invertierte Logik: gedrückt = Low. Daran gewöhnt man sich — und mit einem gut benannten is_pressed() sieht es der restliche Code ohnehin nicht.
Im Aufbaukurs
Warum ein Taster beim Drücken mechanisch mehrfach prellt und dein Code deshalb einen einzigen Druck als fünf Ereignisse sieht — und wie man das entprellt, in Hardware mit Kondensator oder in Software. Ausserdem Pull-ups als Busabschluss bei I²C, wo sie nicht optional, sondern Teil des Protokolls sind.
Kurze Selbstkontrolle
Zählt nicht — nur zum Prüfen, ob es angekommen ist.
1.Ein Taster hängt mit Pull-up am Pin. Warum liest der Pin bei offenem Taster genau 3.3 V und nicht weniger?
2.Wie viel Strom fliesst durch einen 10-kΩ-Pull-up an 3.3 V, während der Taster gedrückt ist?