ATMega32 erkennt nicht alle Tastendrücke

Gast #2996365
Lesenswert?

Hallo zusammen,

ich habe eine Funktion geschrieben, die mir den momentanen Zustand 
(deaktiviert, positive Flanke, aktiviert, negative Flanke) der 
angeschlossenen Taster ausgibt. (.c-Datei mit der 
flankenerkennungs-Funktion und der entprell-Funktion, sowie die 
dazugehörige .h-Datei sind im Anhang)
Die Grundidee funktioniert anscheinend auch, nur werden manchmal die 
Zustände nicht erkannt, wie z.B. eine positive Flanke, obwohl aktiviert 
wieder erkannt wird.

Die Taster sind alle entprellt (mit einer von mir geschriebenen 
Funktion, die sich an Peter Dannnegers entprellen orientiert. Siehe: 
http://www.mikrocontroller.net/articles/Entprellung#Komfortroutine_.28C_f.C3.BCr_AVR.29) 
und ich habe bereits alle möglichen Strukturen, Zeiger und Variablen die 
diesen Fehler eventuell hervorrufen könnten als volatile deklariert.
Nur jetzt bin ich mit meinem Latein am Ende und im Forum habe ich 
ebenfalls keine Hinweise dazu gefunden (vielleicht war ich aber auch 
einfach nur zu Blind).

Ignoiert bitte die Rechtschreibung im Quellcode, wenn ich mich vertippt 
habe, habe ich den Fehler einfach übernommen ;) .

Danke schon mal im Vorraus.

Christian
Angehängte Dateien:
Gast #2996452
Lesenswert?

Danke für die schnelle Antwort.

Die eigentlichen Tastendrücke speichere ich mit:
1
(*key).pressed = (input & (~((*key).save)) ) | ((*key).pressed & (*key).save);    //entprellte Tastenzustände speichern
(vierte Codezeile aus debounceKeys)

Der entprell-Funktion übergebe ich einen Zeiger auf die Struktur 
lbar_btn, die dann wieder in calculateInputStatus abgefragt wird.
Um die Änderung zu erkennen, speichere ich in den Strukturen sBtnStatus 
und sLbarStatus den letzten, von der Funktion calculateInputStatus 
aufgerufenen, Wert von (*key).pressed .
Damit sollte ich eigentlich alle Flanken mitbekommen, vorausgesetzt der 
Taster ist mindestens eine main-loop lang gedrückt. (Dachte ich 
zumindestens)

Christian
Gast #2996467
Lesenswert?

Peter Dannegger schrieb:
> Autor: Peter Dannegger

Vielen Dank an dieser Stelle, dass die lange als "unverständlich" 
geltende "Komfortroutine" im Tutorial nun etwas ausführlicher 
beschrieben wird. Hab da lange nicht mehr reingeschaut, daher ist mir 
das jetzt aufgefallen.

Danke :-)

http://www.mikrocontroller.net/wikisoftware/index.php?title=Entprellung&section=14#Funktionsweise

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