Worum es geht: Warum ein einziger Tastendruck fünf oder sieben Ereignisse erzeugt — und wie man das abstellt, in Hardware oder in Software.
Wozu du das brauchst: Weil der Fehler wie ein Programmierfehler aussieht und keiner ist. Der Zähler springt um drei, das Menü überspringt zwei Einträge, und man sucht im Code nach einer Ursache, die im Taster liegt.
Danach kannst du: einen Hardware-Entpreller dimensionieren, den Unterschied zwischen Lade- und Entladeweg begründen, und entscheiden, wann Software genügt und wann nicht.
Der Fehler, den man dem Code zuschreibt
Du hast einen Taster mit Pull-up, du fragst ihn in einer Schleife ab, du zählst die Drücke. Und der Zähler springt bei jedem Druck um drei, fünf oder sieben weiter.
Das ist kein Programmierfehler. Es ist ein mechanischer Vorgang, und er lässt sich fotografieren.
Was hier aufgezeichnet ist, ist ein einziger Tastendruck. Der Pegel springt innerhalb von 3.6 ms siebenmal zwischen High und Low, bevor er unten liegen bleibt. Das amberne Band markiert den Bereich zwischen den beiden Schaltschwellen des Eingangs.
Der Grund ist einfach: Zwei Metallkontakte, die aufeinandertreffen, federn. Sie berühren sich, springen zurück, berühren sich wieder — jedes Mal ein echter Kontaktabriss, kein Rauschen und keine Störung von aussen.
Wie lange das dauert, hängt am Taster. Typisch sind 1 bis 10 ms; ein billiger Mikroschalter prellt länger als eine gute Folientastatur. Und jedes Exemplar prellt anders, auch aus derselben Packung.
Das Unangenehme daran ist der Zeitmassstab. Eine Abfrageschleife auf einem ESP32 kommt leicht alle Mikrosekunden am Pin vorbei:
5 ms / 1 µs = 5000 Abtastungen während des Prellens
Fünftausend Blicke auf einen Pegel, der siebenmal wechselt. Die Software sieht jeden einzelnen Wechsel — sie ist zu schnell, nicht zu langsam.
Zwei Wege, und beide sind richtig
Entprellen heisst: entscheiden, dass ein Wechsel erst zählt, wenn er eine Weile Bestand hat. Ob das in Hardware oder in Software geschieht, ist eine Abwägung, keine Glaubensfrage.
Der Hardware-Weg besteht aus drei Bauteilen. Der bekannte Pull-up von 10 kΩ zieht den Knoten nach 3.3 V. Vom Knoten führt ein Serienwiderstand von 1 kΩ zum Taster und weiter nach Masse. Und am Knoten hängt ein Kondensator von 1 µF gegen Masse.
Der Kondensator ist der eigentliche Entpreller: Er kann seine Spannung nicht springen lassen, also verwandelt er jeden Kontaktabriss in ein kaum sichtbares Kräuseln.
Dabei ist die Schaltung unsymmetrisch, und das ist Absicht:
| Vorgang | Weg | Zeitkonstante |
|---|---|---|
| Laden (Taster löst) | über den Pull-up | τ = 10 kΩ · 1 µF = 10 ms |
| Entladen (Taster drückt) | über den Serienwiderstand | τ = 1 kΩ · 1 µF = 1 ms |
Die 10 ms sind der Wert, auf den es ankommt. Bis der Knoten beim Loslassen wieder über die obere Schwelle bei rund 70 % steigt, vergehen:
t = −10 ms · ln(1 − 0.7) = 12.04 ms
Zwölf Millisekunden — mehr als die 5 ms, die der Taster prellt. Damit ist der Prellvorgang vorbei, bevor der Eingang überhaupt umkippt.
Der Serienwiderstand ist nicht optional
Ohne ihn läge der Kondensator direkt am Taster. Beim Drücken entlädt er sich dann über den Kontaktwiderstand allein — ein Strompuls von mehreren Ampere in wenigen Mikrosekunden.
Die Folge ist Kontaktabbrand: Bei jedem Druck verdampft ein wenig Metall, bis die Kontakte rau werden, hängen bleiben oder verschweissen. Ein Taster, der nach ein paar tausend Drücken unzuverlässig wird, hat oft genau diese Ursache.
Die 1 kΩ begrenzen den Entladestrom auf 3.3 mA und kosten nichts.
Warum der Schmitt-Trigger dazugehört
Der Kondensator macht aus der steilen Flanke eine Rampe. Und eine Rampe ist für einen gewöhnlichen Eingang ein Problem: Sie kriecht langsam durch den undefinierten Bereich, und dort kann der Eingang mehrfach kippen — man hätte das Prellen durch ein neues Prellen ersetzt.
Ein Schmitt-Trigger-Eingang hat deshalb zwei Schwellen statt einer:
- Von Low nach High kippt er erst bei etwa 70 % der Versorgung.
- Von High nach Low erst bei etwa 30 %.
Der Abstand dazwischen heisst Hysterese. Ist der Eingang einmal gekippt, muss das Signal erst den ganzen Weg zurück, bevor er wieder umschaltet — an einer langsamen Rampe schaltet er deshalb genau einmal.
Die GPIO-Eingänge des ESP32 haben diese Hysterese bereits eingebaut. Bei anderen Bausteinen steht sie im Datenblatt als V(T+) und V(T−); fehlt sie, gehört ein Schmitt-Trigger-Baustein dazwischen.
Der Software-Weg
In Software ist Entprellen eine Sperrzeit: Nach einer erkannten Flanke wird der Eingang für eine feste Zeit — üblich sind 20 ms — nicht mehr beachtet. Alle weiteren Wechsel in dieser Zeit fallen unter den Tisch.
Das kostet ein Bauteil weniger und ändert die Grenze der Schaltung:
1 / 20 ms = 50 Drücke je Sekunde sind damit noch unterscheidbar
Für einen Taster ist das reichlich; ein Mensch schafft keine fünfzig Drücke pro Sekunde. Für einen Drehgeber wäre es das Ende.
| Hardware (RC + Hysterese) | Software (Sperrzeit) | |
|---|---|---|
| Kosten | drei Bauteile | keine |
| wirkt bei | Interrupts, langen Leitungen, allem | nur dort, wo der Code hinschaut |
| Zeit ändern | umlöten | eine Zahl ändern |
| Schutz gegen Störungen von aussen | ja, der Kondensator filtert mit | nein |
Die Entscheidung: Software genügt, wenn du den Pin ohnehin in einer Schleife abfragst. Hardware braucht es, sobald der Taster auf einem Interrupt liegt — denn dann feuert jeder einzelne Prellimpuls die Unterbrechungsroutine, bevor irgendein Code entscheiden kann. Und Hardware braucht es, wenn der Taster über ein längeres Kabel angeschlossen ist: Dann fängt die Leitung Störungen ein, und dagegen hilft nur der Kondensator.
Dieselbe Schaltung, die du schon kennst
Der Entpreller ist das Widerstand-Kondensator-Paar (RC-Glied) aus Modul 3, als Tiefpass gelesen und sonst unverändert. Dieselben zwei Formeln, dieselbe Kurve — nur heisst das Störsignal hier «prellender Kontakt» statt «Nadelimpuls».
Das ist der Grund, warum τ = R · C so oft vorkommt: Es ist nicht ein Werkzeug unter vielen, sondern das Werkzeug, sobald etwas langsamer werden soll, als es von selbst wäre. In Modul 9 taucht es ein drittes Mal auf, beim Glätten von PWM.
Kurze Selbstkontrolle
Zählt nicht — nur zum Prüfen, ob es angekommen ist.
1.Ein Taster prellt 5 ms lang. Deine Abfrageschleife läuft alle 1 µs. Wie oft schaut sie während des Prellens auf den Pin?
2.Warum lädt und entlädt sich der Kondensator im Hardware-Entpreller unterschiedlich schnell?
3.Wozu braucht der Eingang hinter dem Widerstand-Kondensator-Paar eine Hysterese?
4.Wann reicht Entprellen in Software nicht aus?