Forum: Mikrocontroller und Digitale Elektronik Tasten Entprellen


von Sascha (Gast)


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

von Florian Pfanner (Gast)


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

von Sascha (Gast)


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

von Dirk (Gast)


Lesenswert?

Hi,

und was ist mit dem Timer0?

Mfg

Dirk

von Gottfried Bremer (Gast)


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.).

von Peter D. (peda)


Lesenswert?

Es ist völlig egal, ob Timer 0, 1 oder 2. Hauptsache das Intervall ist
in etwa 2ms ... 50ms.

Ich nehme immer den Timer, der als Uhr dient, mit zum Entprellen.


Peter

von Gottfried Bremer (Gast)


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.).

von Johannes Richter (Gast)


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

von Florian Pfanner (Gast)


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

von Johannes Richter (Gast)


Lesenswert?

Aha! War meine wage Ahnung, was das sein koennte, also doch recht
falsch. Dank Dir fuer die Aufklaerung, jetzt ist's mir klarer! :)

Gruesse,
johannes

von Peter D. (peda)


Lesenswert?

@Gottfried,

"ein Timer, der noch als Uhr dient, ist unpraktisch"


Du kannst bequem in einem Interrupthandler mehrere Sachen machen.

Also warum dann nicht Zeit zählen und entprellen ?

Hier mal ein Beispiel:

http://www.mikrocontroller.net/forum/read-4-57760.html

An die Stelle "Insert Key Debouncing Here" kannst Du dann die
Entprellroutine einfügen.


Peter

von Sascha (Gast)


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

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.