Entprellung und Dekodierung von Tasten und Schaltern

Die Datei 'avr_tast.c' zeigt, wie man Taster und Schalter entprellen und dekodieren kann. Das Programm kann auf nahezu jeden Prozessor portiert werden. Hier wird es auf einem AT90S8515 mit 4MHz dargestellt, wobei 8 Bits von PortA ausgewertet werden; eine gedrückte Taste invertiert das betreffende Bit an PortC, welches eine LED ein/ausschaltet. Zum schnellen Test: 'avr_tast.hex'.

Das Zeitraster für die Entprellung und Dekodierung der Tasten gibt eine Interruptroutine vor, die über Timer0 alle 10ms aufgerufen wird. Die ENTPRELL_ZEIT gibt die Anzahl der Zyklen an, die der Taster unverändert erkannt werden muß. Hier sind es 5 Zyklen entsprechend 50ms. Zu den Bits 0->7 an PortA werden Tastencodes 'A' -> 'H' erzeugt - definiert in tast_tab[] - und in der Variable 'taste' abgelegt. Bei weiter gedrückter Taste wird nach Ablauf von FIRST_REPEAT (50 Zyklen entsprechend 0,5 Sek.) der Tastencode für die Repeat-Funktion 'a' -> 'h' erzeugt: rep_tast_tab[]. Der Tastencode wird dann jeweils nach Ablauf von NEXT_REPEAT (10 Zyklen entsprechend 0,1 Sek.) wiederholt erzeugt.

Die Tabellen 'tast_tab' und 'rep_tast_tab' können beliebige Codes erzeugen; Ausnahme ist das Leerzeichen ' ', welches die Erzeugung des Tastencodes oder der Repeat-Funktion unterdrückt. Werden Schalter angeschlossen, kann der Tastencode ganz unterdrückt werden; die entprellte Schalterstellung wird dann der Variable 'entprellte_tasten' an entsprechender Bitposition entnommen.

Für mehr als 8 Taster müssen TASTENWERT auf 'unsigned short' oder 'unsigned long', MAX_BITS auf 16 oder 32, die Bits der Taster in die Variable 'tasten_schalter' eingelesen und die Tabellen für die Tastencodes entsprechend erweitert werden.

Die Interruptroutine einschließlich der Dekodierung benötigt bei AT90S8515 / 4MHz / 8 Taster ca. 10-40µs. Das sind nur 0,1-0,4% Prozessorleistung. Die ENTPRELL_ZEIT mit 5 Zyklen sollte nicht verkürzt werden, damit auch Taster geringerer Qualität zuverlässig entprellt werden.

 

Kontakt:

zurück zur Übersicht