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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.