www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tasten Entprellen


Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian Pfanner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

und was ist mit dem Timer0?

Mfg

Dirk

Autor: Gottfried Bremer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.).

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gottfried Bremer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.).

Autor: Johannes Richter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian Pfanner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes Richter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.