Das sehr leidliche Thema unter allen Bastlern: Wie entprelle ich am Besten meine Taster? Wer kennt diese Frage nicht…

Ich stelle euch hier mal drei Lösungen vor: zwei in Hardware und eine in Software. Fangen wir mit der Hardware an.

Dies ist eine einfache Schaltung, um einen Taster mit einem RC-Glied und einem Schmitt-Trigger zu entprellen. Im Normalfall (Taster offen) ist der Kondensator über die beiden Widerstände geladen und der Inverter ist aktiv (Ausgang auf 0). Wird der Taster gedrückt, entlädt sich langsam das RC-Glied. Allein dieses sorgt schon für eine relative Glättung des Prellens. Allerdings wirkt hier jetzt der Schmitt-Trigger mit. Sobald die Spannung an C8 unter die Einschaltschwelle gefallen ist, schaltet der Inverter seinen Ausgang auf 1. Beim prellen ist es nahezu unmöglich, dass sich das RC-Glied wieder über die Ausschaltschwelle des Schmitt-Triggers auflädt. Somit ist der Taster entprellt.

Die Zweite Schaltung funktioniert etwas anders und braucht vor Allem einen Wechsler als Taster.

Hier wird mit zwei NOR-Gattern ein RS-Flipflop aufgebaut. Diese Kippstufe ist im Ruhezustand so beschalten, dass IC1a über den Taster eine 1 bekommt. Daraufhin ist der Ausgang auf 0. Bei IC1b sind beide Eingänge auf 0, weshalb der Ausgang auf 1 ist. Beide Eingänge von IC1a sind also auf 1.
Wird nun der Taster betätigt, so wird der Eingang von IC1b auf 1 und der Eingang von IC1a auf 0 gezogen. Daraufhin schaltet der Ausgang von IC1b auf 0, der zweite Eingang von IC1a wird dadurch auch 0 und IC1a schaltet den Ausgang auf 1, wodurch sich IC1b im angeschalteten Zustand hält. Wenn der Taster nun prellt, schaltet dieser nicht den oberen Eingang auf 1, sondern öffnet nur den Kontakt. Durch die beiden Widerstände werden die Eingänge auf 0 gezogen, wenn nichts anliegt. Der Taster ist dadurch also wunderbar entprellt.

Nun aber zur Software-Lösung.

Man kann natürlich auch Taster in Software entprellen. In C kann man beispielsweise einmal abfragen, ob der Taster gedrückt wurde (einfaches IF-Statement) und danach einen Delay von z.B. 10ms einfügen. Dadurch wird einfach die Zeit übersprungen, in der der Taster prellt.
Der Code sieht dann z.B. so aus:

Die Bedingung in der If fragt ab, ob der Taster gedrückt wurde und ob wir das schon gemerkt haben. Dadurch wird nicht jedes Mal ein 10ms Delay eingebaut. Da Taster nach 10ms in der Regel nicht mehr prellen, funktioniert diese Herangehensweise ganz gut. Aber Mikrocontroller haben ihre ganz anderen Probleme, darauf gehe ich allerdings später einmal ein.