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
Ich sehe keine Funktion, wo die Tastendrücke abgeholt und gelöscht werden. Meine Funktion speichert ja die Tastendrücke, bis sie abgeholt werden. Es wäre Zufall, wenn man sie genau auf der Flanke aufrufen würde. Peter
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
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§ion=14#Funktionsweise
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.