Ein Zähler soll jeden Tastendruck genau einmal zählen. Du drückst einmal, und er springt um vier weiter. Der Grund steckt im Taster selbst: Seine Kontakte federn beim Aufeinandertreffen mehrmals zurück, bevor sie fest aufliegen, und beim Loslassen reißen sie nicht sauber ab. Für ein paar Millisekunden sieht die Logik dahinter statt einer Flanke ein schnelles Ein-Aus-Ein-Aus. Eine Lampe merkt davon nichts, ein Zähler, ein Flipflop oder ein Interrupt-Eingang am Mikrocontroller schon.
Entprellen brauchst du überall, wo Flanken gezählt oder ausgewertet werden: Zähler und Frequenzteiler, die Ein/Aus-Schaltung mit einem Taster, Drehgeber, Endschalter und Interrupts. Was beim Prellen im Kontakt passiert, beschreibt der Artikel Schalter und Taster. Hier baust du eine Hardware-Entprellung, die mit den ungünstigsten Datenblattwerten noch funktioniert.
Schaltplan
- S1: Taster, Schließer. Er zieht den Knoten A auf Masse.
- R1, 10 kΩ: Pull-up. Er hält A bei offenem Taster auf 5 V und begrenzt den Strom durch den gedrückten Taster auf 0,5 mA.
- R2, 18 kΩ: Über ihn entlädt sich C1 beim Drücken. Er bestimmt die Verzögerung beim Drücken und schützt den Kontakt vor dem Entladestrom des Kondensators.
- C1, 1 μF: Er glättet das Prellen. Seine Spannung UC läuft langsam statt sprunghaft.
- IC1, 74HC14: sechs invertierende Schmitt-Trigger in einem Gehäuse. Ein Gatter macht aus der langsam laufenden Kondensatorspannung eine saubere Flanke. Weil er invertiert, ist der Ausgang bei gedrücktem Taster High.
- C2, 100 nF: Abblockkondensator direkt an Pin 14 und Pin 7.
So funktioniert die Schaltung
Taster offen: C1 ist über R1 und R2 auf 5 V geladen. Der Eingang des 74HC14 sieht High, sein Ausgang ist Low.
Taster gedrückt: Beim ersten Kontakt fällt A auf 0 V, und C1 beginnt, sich über R2 zu entladen. Öffnet der prellende Kontakt kurz wieder, lädt sich C1 ein wenig nach, aber viel zu wenig, um zurück auf 5 V zu kommen. Die kurzen Unterbrechungen sind in der Kondensatorspannung nur als kleine Dellen zu sehen. Erst wenn UC die untere Schaltschwelle UT- unterschreitet, kippt der Ausgang auf High, genau einmal.
Taster losgelassen: Nun lädt sich C1 über R1 und R2 auf. Kurze Kontakte während des Abrisses ziehen die Spannung wieder etwas herunter, und sie steigt erst nach dem Prellen über die obere Schwelle UT+. Der Ausgang kippt zurück auf Low.
Entscheidend ist die Hysterese: Zwischen 1,8 V und 2,8 V (typische Werte bei 5 V) ändert der Schmitt-Trigger nichts. Ein gewöhnlicher Logikeingang hätte nur eine Schwelle. Kriecht die Spannung langsam hindurch, reicht schon etwas Rauschen, damit er mehrmals hin und her schaltet, und das Prellen wäre zurück. Wie Logikeingänge ihre Pegel auswerten, steht unter Logikfamilien.
Dimensionierung
Ziel: Der Ausgang darf frühestens 10 ms nach dem ersten Kontakt umschalten. Die meisten kleinen Kurzhubtaster prellen kürzer als 5 ms, ältere oder größere Schalter auch länger. Mit 10 ms bist du auf der sicheren Seite und merkst die Verzögerung beim Bedienen nicht.
1. Schwellen aus dem Datenblatt. Für den 74HC14 bei 4,5 V garantiert das Datenblatt:
| Schwelle | min | typ | max |
|---|---|---|---|
| UT+ | 1,55 V | 2,5 V | 3,13 V |
| UT- | 0,9 V | 1,6 V | 2,45 V |
Die Schwellen wachsen etwa proportional mit der Versorgung. Bei 5 V rechnest du deshalb mit dem 5/4,5-fachen: UT+,min ≈ 1,72 V und UT-,max ≈ 2,72 V. Das sind die ungünstigen Werte, denn mit ihnen kippt der Ausgang am frühesten.
2. Entladen beim Drücken. C1 fällt über R2 von 5 V auf UT-. Die Zeit bis dahin folgt aus der Entladekurve des Kondensators (Kondensator an Gleichspannung):
Mit C1 = 1 μF und dem ungünstigen UT- = 2,72 V ist ln(5 / 2,72) = 0,609. Für 10 ms brauchst du:
Der nächstgrößere Wert der E12-Reihe ist 18 kΩ. Damit wird tab = 18 ms · 0,609 = 11,0 ms.
3. Laden beim Loslassen. C1 steigt über R1 + R2 von 0 V auf UT+:
Mit dem ungünstigen UT+ = 1,72 V ist ln(5 / 3,28) = 0,422. Für 10 ms muss R1 + R2 ≥ 23,7 kΩ sein, also R1 ≥ 5,7 kΩ. Du nimmst 10 kΩ, dann gilt:
Die Zeitkonstanten kannst du mit dem Rechner nachprüfen:
Kondensator laden und entladen
- Zeitkonstante τ
- 1 s
- 5 τ
- 5 s
- Spannung nach t
- 3,16 V
- Strom nach t
- 184 µA
- Zeit bis Zielspannung
- 1,61 s
uC(t) = U₀ · (1 − e−t/τ), Laden ab 0 V. τ = R · C. Ideale Bauteile: Innenwiderstand der Quelle, Leckstrom und Toleranz von C sind nicht berücksichtigt. Nach 5 τ ist der Vorgang zu über 99 % abgeschlossen. Blauer Punkt: Spannung nach der Zeit t, grüner Ring: Zielspannung.
4. Typischer Fall. Mit den typischen Schwellen (2,78 V und 1,78 V bei 5 V) kippt der Ausgang nach 18 ms · ln(5 / 1,78) = 18,6 ms beziehungsweise nach 28 ms · ln(5 / 2,22) = 22,7 ms. Die Kurve oben zeigt genau diesen Fall.
Bauteilliste
| Bezeichner | Wert/Typ | Hinweis |
|---|---|---|
| S1 | Kurzhubtaster, Schließer | z. B. 6 × 6 mm, beliebiger Typ |
| R1 | 10 kΩ, 0,25 W | Pull-up |
| R2 | 18 kΩ, 0,25 W | bestimmt die Verzögerung beim Drücken |
| C1 | 1 μF, X7R ≥ 25 V oder Folie | kein Elko nötig |
| C2 | 100 nF, keramisch | direkt an Pin 14 und 7 |
| IC1 | 74HC14 | DIP-14 oder SO-14; freie Eingänge (3, 5, 9, 11, 13) an GND |
Varianten
Ohne Inverter-Wirkung. Brauchst du bei gedrücktem Taster Low, schaltest du ein zweites Gatter des 74HC14 dahinter. Oder du nimmst einen nicht invertierenden Schmitt-Trigger wie den 74HC7014 oder den Einzelbaustein 74LVC1G17.
Am Mikrocontroller. Die digitalen Eingänge von ATmega328P, RP2040 oder ESP32 haben schon eine kleine Hysterese eingebaut. Dort genügen R2 und C1 direkt am Pin, der 74HC14 entfällt. Der interne Pull-up des ATmega328P ist mit 20 bis 50 kΩ allerdings ungenau; für eine berechenbare Zeit setzt du R1 als echten Widerstand ein. Wie du den Taster anschließt, zeigt Taster am GPIO.
In Software. Hängt der Taster ohnehin an einem Mikrocontroller und muss keinen Interrupt auslösen, ist Software die billigste Lösung: Der Zustand gilt erst, wenn er eine Weile stabil war.
const int TASTER = 2; // Taster nach GND, interner Pull-up
const unsigned long PRELLZEIT = 20; // ms
int stabil = HIGH, zuletzt = HIGH;
unsigned long seit = 0;
unsigned int zaehler = 0;
void setup() {
pinMode(TASTER, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int jetzt = digitalRead(TASTER);
if (jetzt != zuletzt) { // Pegel hat sich geändert: Uhr neu starten
seit = millis();
zuletzt = jetzt;
}
if (millis() - seit > PRELLZEIT && jetzt != stabil) {
stabil = jetzt; // 20 ms lang gleich: Zustand übernehmen
if (stabil == LOW) Serial.println(++zaehler);
}
}
Mit Wechsler und Flipflop. Hat der Schalter einen Umschaltkontakt, setzt der eine Kontakt ein RS-Flipflop aus NAND-Gattern, der andere setzt es zurück. Der erste Kontakt schaltet sofort um, alles Weitere wird ignoriert. Diese Lösung verzögert gar nicht, braucht aber einen Wechsler.
Fertiger Baustein. Der MAX6816 entprellt einen Kontakt mit fester Wartezeit von 40 ms und bringt ESD-Schutz für Taster an langen Leitungen mit.
Typische Fehler
- Kondensator direkt über dem Taster, ohne R2: Jeder Kontakt schließt den geladenen Kondensator kurz. Der Stromstoß verschleißt den Kontakt, und beim Loslassen fehlt die Verzögerung, weil C1 jetzt nur über R1 lädt.
- Gewöhnliches Gatter statt Schmitt-Trigger: Ein 74HC04 oder 74HC00 schwingt, während die Spannung langsam durch seine Schwelle läuft. Am Oszilloskop siehst du dann statt einer Flanke ein Büschel kurzer Impulse (Oszilloskop bedienen). Der Baustein wird dabei warm.
- Verzögerung nur für eine Richtung berechnet: Beim Drücken zählt R2 allein, beim Loslassen R1 + R2. Ist R2 zu klein, prellt die Schaltung beim Drücken weiter, obwohl das Loslassen sauber ist.
- Offene Eingänge am 74HC14: Die fünf freien Gatter schwingen sonst wild und stören das benutzte. Lege ihre Eingänge an GND.
- Zu große Zeitkonstante: Mit 100 ms und mehr bemerkst du die Verzögerung, und schnelle Doppelklicks gehen verloren.
Selbsttest
Warum reicht ein RC-Glied allein nicht, um einen Zählereingang sicher anzusteuern?
Die Kondensatorspannung läuft langsam durch die Schaltschwelle. Ein gewöhnlicher Eingang schaltet dabei mehrmals hin und her; erst die Hysterese eines Schmitt-Triggers macht daraus eine einzige Flanke.
Welcher Widerstand bestimmt die Verzögerung beim Drücken, welcher beim Loslassen?
Beim Drücken entlädt sich C1 nur über R2. Beim Loslassen lädt er über R1 und R2 in Reihe.
Warum rechnest du beim Drücken mit dem größten UT- und nicht mit dem typischen?
Mit dem größten Wert ist die Spannung am schnellsten unter die Schwelle gefallen. Wer damit mindestens 10 ms erreicht, hat bei jedem Exemplar mindestens 10 ms.
Wie lange dauert es beim Loslassen, wenn du R1 auf 4,7 kΩ verkleinerst (ungünstige Schwelle)?
t = 22,7 kΩ · 1 μF · 0,422 ≈ 9,6 ms – knapp unter dem Ziel von 10 ms.
Welchen Vorteil hat die Lösung mit Wechsler und RS-Flipflop?
Sie schaltet beim ersten Kontakt ohne Verzögerung und ignoriert jedes weitere Prellen, braucht aber einen Umschaltkontakt statt eines einfachen Tasters.