Interrupt nachbasteln

Gast #4857361
Lesenswert?

Hallo,

ich möchte mehrere Taster abfragen.
Dazu habe ich für aufwendige HW-Entprellung via Flipflop keinen Platz 
und keinen Nerv.
Da die Taster in einer Schleife abgefragt werden, die recht flott läuft 
(10-20x pro Sekunde), kann es passieren, dass ein Taster gedrückt 
bleibt. Leider habe ich nur wenige Interrupts zur Verfügung (die ich 
noch dazu anderweitig brauche).

Als Idee habe ich mir eine Fangschleife ausgedacht:
(Pseudocode)

Wenn Taster = 1
warte 20 ms
   Do
   Wenn Taster = 0
   warte 20 ms
   Exit do
   Ende wenn
   loop
Irgendeine Handlung
Ende wenn

Funktioniert das so?
(Firma: Schweigstill IT) Persönliche Seite #4857401
Lesenswert?

knilch schrieb:
> ein Interrupt für 4 Taster

Willst Du etwa mit den Tastern Interrupts auslösen? Das wäre in den 
meisten Fällen eine ganz, ganz schlechte Lösung...

Richtig ist es jedoch, die Taster in einem Timer-Interrupt periodisch 
abzufragen und dort die Entprellung durchzuführen. Wenn man jedoch 
Energie sparen muss, indem man den Microcontroller in einen 
Tiefschlafmodus versetzt, kann man den Microcontroller per Interrupt 
aufwecken, dann den Timer-Interrupt anwerfen, die Tastendrücke auswerten 
und ggf. nach einiger Zeit den Prozessor wieder schlafenlegen.
#4857505
Lesenswert?

Du brauchst einen Zähler der mitzählt wieviele Abfragen lang die Taste 
ununterbrochen nicht gedrückt war.

Damit stellst du sicher dass die Taste sicher losgelassen wurde, wenn du 
nichts tust solange dieser Zähler zB. kleiner als 50 ist.


Auch ein Zähler für Anzahl gedrückt erkannter Abfragen hintereinander 
bräuchtest du. Wenn dieser zB. 5 ist dann lässt du die Taste als 
gedrückt durchgehen. Sollte zwischendurch ein "nicht gedrückt" mit 
reingeraten setzt du den Zähler wieder zurück (in dieser Zeit prellt der 
Taster noch).


Die beiden Zähler setzen sich gegenseitig zurück in ihren Ablaufzweigen 
- ist ziemlich heftig und hat mich wochenlang zu Tode gebuggt :-)
Gast #4857634
Lesenswert?

Gute Nachricht:
Du musst keinen Interrupt nachbasteln!

Schlechte Nachricht:
EIN passender Interrupt, der deinem Programm ein Zeitgerüst
vorgibt ist erforderlich!
Der schlägt am Besten alle 1...12 ms zu!

- Tastatur-Abfrage  -Entprellung  -Auswertung wäre nur
  EINE Aufgabe dafür.
- Dem gesamten Ablauf kann man damit eine überschaubare
  Ordnung vorgeben!
- Eine Abfrage / ein Unterprogramm kommt nicht zurück?
  Verwirf den Versuch nach x * 1...12 ms....

Macht alles viel einfacher!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren