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
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
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
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.).
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
@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.).
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
@ 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
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
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.