Tasten Entprellen

Gast #98971
Lesenswert?

Hallo,

für mein Projekt (mit einem ATmega32) nutze ich Timer 1 für 10Bit PWM
und Timer 2 für eine Uhr. Wie sollte ich jetzt am besten eine
Tastenentprellung realisieren? Die Codesammlung von Peter Danegger hab
ich mir schon angeschaut, aber er nutzt ja den Timer 1, den ich nicht
mehr frei habe.

Mfg sascha
Gast #98972
Lesenswert?

Hallo,

am einfachsten ist, wenn eine Taste gedrückt wurde eine gewisse zeit
warten. z.B. 5ms. Danach nochmal die Taste prüfen und wenn sie immer
noch gedrückt ist, als aktiv weiterverarbeiten.

Gruß, Florian
Gast #98973
Lesenswert?

Tja,

an sowas habe ich auch schon gedacht, aber irgendwie finde ich die Zeit
irgendwie verschwendung. In 5ms kann der AVR ja ne Menge machen.
Möchte es am liebstem mit noch einem Timer machen.

Mfg Sascha
Gast #98975
Lesenswert?

Verzögerungen in der Größenordnung von 5ms lassen sich auch mit dem
Timer0 (den du offenbar noch frei hast) realisieren.
Wenn die Taste gedrückt ist, speicherst du in einer Maske, welche Taste
gedrückt war(nur nötig, wenn du mehrere Tasten entprellen willst). Dann
aktivierst du den Timer0-Interrupt und schreibst in Timer0 einen Wert,
von dem aus die gewünschte Zeit bis zum Überlauf vergeht. In der
Interrupt-Routine deaktivierst du den Überlauf-Interrupt wieder und
überprüfst, ob die Taste immernoch gedrückt ist.
Bei Verwendung von Hardware PWM (ich weis ja nicht, was dein AVR sonst
noch so macht) ist es aber oft auch egal, einen Warteschleife von ein
paar ms einzubauen(hängt halt davon ab, ob du für den letzten freien
Timer nochmal 'ne wichtigere Aufgabe hast.).
Gast #98977
Lesenswert?

@Peter dannegger: Natürlich ist es im Prinzip egal, welcher Timer die
Zeit misst. Bloß sollte er in angemessener Zeit überlaufen können. Da
nimmt man dann am besten einen, den man einfach auf einen bestimmten
Wert setzen kann(ein Timer, der noch als Uhr dient, ist unpraktisch,
wenn die Taste sehr kurz(eben weniger als deine 2..50 ms) vor dem
planmäßigen Überlauf(in der Funktion als Uhr) gedrückt wird.).
Gast #98978
Lesenswert?

Ich habe den Ausdruck "Tasten entprellen" hier jetzt schon oefters
gelesen und kann mir so ungefaehr vorstellen, was es sein koennte -
aber eben nicht wirklich. Koennt Ihr mir das wer bitte (nocheinmal)
erklaeren?

Danke! :)

Schoenen Nachmittag inzwischen,
johannes
Gast #98979
Lesenswert?

@ Johannes:

Wenn du einen mechanischen Schalter (egal welcher Art) drückst, so
schließt der elek. kontakt nicht sofort und dauerhaft sondern er
'springt' mehrmals zwischen Ein und Aus hin und her. Das wird als
Prellen bezeichnet. Bei einer Lampe sieht man das gar nicht, weil das
Auge so träge ist, aber ein Controller zählt jeden dieser Impulse mit.
So kann es passieren dass wenn du einen Zähler an diese Schaltung
hängst, dieser nicht nur einen sondern mehrere Impulse Zählt. Um das zu
verhindern muss der Schalter entprellt werden. Das kann per Hardware
(RC-Glied) oder eben per Software erledigt werden.

Gruß, Florian
Gast #98982
Lesenswert?

Hi,

habe jetzt mehrfach versucht die entprellung hinzubekommen. Sei es mit
dem Timer 0 oder per delay. Kriege es einfach nicht hin.

Hat jemand ein Beispiel für den Timer 0?

Mfg sascha


PS: bin blutiger Anfänger in C

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