Forum: Mikrocontroller und Digitale Elektronik Eine Taste in mehreren Menüebenen benutzen Geht das


von Thomas S. (suschi)


Angehängte Dateien:

Lesenswert?

Hallo alle zusammen...

...seit etwa zwei Wochen beschäftige ich mich nun mit der AVR 
Programmierung mit dem AVR Studio Assembler. Zum testen und probieren 
habe ich mir das Pollin Board 2.0 und einige Attiny 2313 gekauft und das 
Forum in die Lesezeichen gezogen. Als LCD muß ein 4x27 herhalten. 
Hintergrund ist, eine Relaisplatine eines Röhrenverstärkers 
(Eingangskanäle) abzufragen und den jeweiligen Schaltzustand (Kanal) 
anzuzeigen. Alles in allem funktioniert das soweit auch ganz gut. Nun 
wollte ich noch mit einem Taster ein Menü aufrufen. Der Taster sitzt 
rechts neben der letzten LCD Zeile. Mit druck auf den Taster (PB7) wird 
das Menü auch angezeigt. Jetzt das Problem.: Der Taster soll nun in 
diesem zweiten Menü als Exit Taste dienen. Also frage ich in wieder mit 
sbis ab und verweise bei gedrückten Taster in die loop1, also mein 
Hauptprogramm. Leider funktioniert das nicht. Nehme ich den freien PB6 
läuft es. Grundlegen könnte man sagen ich möchte mit demselben Taster im 
Hauptprogramm das Menü aufrufen, und im Menu Exit zum Hauptprogramm 
zurück. Kann mir da jemand weiterhelfen? Bin wie gesagt Anfänger und für 
Verbesserungen/Optimierungen immer zu haben. Sieht vielleicht alles 
komisch aus, aber zumindest zeigt es mir auf dem LCD schonmal an was ich 
möchte. Danke an alle..

Gruß Suschi

von Stefan W. (wswbln)


Lesenswert?

...Du solltest zwischen der "sbis PINB,7" Abfrage in Loop1 und der im 
Menue mal darauf warten, dass die Taste mindestens auch mal wieder 
losgelassen wird. Ausserdem könnte eine Entprellung nichts schaden 
(siehe Tutorial und viele viele bunte Threads hier)...

von M. V. (-_-)


Lesenswert?

Dein Problem ist offensichtlich, dass du nur den Tastenzustand, nicht 
aber die Zustandsänderung abfragst.
Was passiert ist klar: In der Mainloop wird der Taster erkannt, das Menu 
aufgerufen. Da der Taster aber noch nicht wieder losgelassen wurde(man 
beachte die Geschwindigkeit, mit der so ein uC arbeitet), wird nun 
wieder in die Mainloop zurückgekehrt. Das passiert dann mehrmals, ob man 
letztendlich in der Mainloop oder im Menu landet, ist somit mehr oder 
weniger zufällig.
Um die Änderung des Tastenzustands zu erkennen, muss man eine 
Flankenerkennung realisieren. Konkret heisst das: Tastenzustand abfragen 
und speichern, wenn gespeicherter Wert 1 war, und dann 0 ist, wurde die 
Taste gedrückt, wenn 0 war und 1 ist, losgelassen.
Nun prellt der Taster auch noch, dh. mehrere Tastendrücke werden 
erkannt, obwohl lediglich einmal gedrückt wurde. Auch dieses Problem 
gilt es noch zu beachten, ist aber alles in den entsprechenden 
Wikiartikeln hier nachzulesen.
Wobei es auch ansonsten mal zu empfehlen ist, sich das Wiki hier 
anzusehen, da finden sich allerlei nützliche Informationen.

AVR-Tutorial: Tasten
Entprellung

von gast (Gast)


Lesenswert?

die ineinander geschachtelten rcalls könnten auch noch nette effekte 
geben, oder ?
an einigen stellen währen rjmps angebracht ;)

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
Noch kein Account? Hier anmelden.