mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tasten ohne Interrupt


Autor: Guido (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tach,

ich habe bisher immer die Entprellroutine von Peter benutzt und war 
damit sehr zufrieden. Leider hab ich sie nie so hunderprozentig 
verstanden, sondern einfach nur an meine Bedürfnisse angepasst.

Nun brauch ich eine Tastenentsprellung ohne Interrupt, also nicht so wie 
bei Peter. Zur Zeit benutze ich dafür eine Warteschleife, die nach jedem 
Tastendruck ausgeführt wird. Doch irgendwie ist das nicht das wahre.

Hat jemand ein paar Tips für die Vorgehensweise zu einer vernünftigen 
Tastenentprellung?

Autor: Zip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, man geht alle paar milisekunden schauen, ob sich was geaendert hat. 
Und dann wartet man bis der zustand ein paar mal gleich ist.

Z

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Guido

>ich habe bisher immer die Entprellroutine von Peter benutzt und war
>damit sehr zufrieden. Leider hab ich sie nie so hunderprozentig
>verstanden, sondern einfach nur an meine Bedürfnisse angepasst.

Nicht optimal, aber es läuft. Warum wills du nun was anderes?

>Nun brauch ich eine Tastenentsprellung ohne Interrupt, also nicht so wie
>bei Peter.

Warum?

>Zur Zeit benutze ich dafür eine Warteschleife, die nach jedem
>Tastendruck ausgeführt wird. Doch irgendwie ist das nicht das wahre.
>Hat jemand ein paar Tips für die Vorgehensweise zu einer vernünftigen
>Tastenentprellung?

Es läuft am Ende immer auf en zyklische Abfrage hinaus. Ob du das nun 
mit nem 10ms Interrupt oder ne Warteschleife machst ist erstmal egal, 
nur dass deine Warteschelife sinnlos Rechenzeit verheizt.

MfG
Falk

Autor: Guido (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Nicht optimal, aber es läuft. Warum wills du nun was anderes?

Weil ich keinen Timer_Interrupt mehr zur Verfügung habe.

>Es läuft am Ende immer auf en zyklische Abfrage hinaus. Ob du das nun
>mit nem 10ms Interrupt oder ne Warteschleife machst ist erstmal egal,
>nur dass deine Warteschelife sinnlos Rechenzeit verheizt.

Das ist mein Problem. Ich kann die Taster nicht direkt abfragen, z.B. 
auf loslassen oder ähnliches. Die Taster lese ich über eine Matrix mit 
dem AD-Wandler ein. Ein bestimmter Wert entspricht einem Tasterdruck. Um 
zu überprüfen ob sich was geändert hat, muss erst der AD-Wandler noch 
mal ne Runde drehen.....

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Guido

>>Nicht optimal, aber es läuft. Warum wills du nun was anderes?

>Weil ich keinen Timer_Interrupt mehr zur Verfügung habe.

Wer sagt denn, dass du einen Timer exclusiv für die Tastenabfrage 
brauchst, das kannst du in fast jeden beliebigen Timerinterrupt (der 
eigentlich was anderes macht) machen. Es sei denn du hast wirklich alle 
mit PWM und Zählern verbraten. Dann wirds kniffelig (aber auch da gibts 
gute und elegante Lösungen).

>Das ist mein Problem. Ich kann die Taster nicht direkt abfragen, z.B.
>auf loslassen oder ähnliches. Die Taster lese ich über eine Matrix mit
>dem AD-Wandler ein. Ein bestimmter Wert entspricht einem Tasterdruck. Um
>zu überprüfen ob sich was geändert hat, muss erst der AD-Wandler noch
>mal ne Runde drehen.....

Und? In einen Interrupt wird die Messung angestossen, im nächsten 
ausgewertet. Man muss parallel denken!

MfG
Falk

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guido wrote:

> Das ist mein Problem. Ich kann die Taster nicht direkt abfragen, z.B.
> auf loslassen oder ähnliches. Die Taster lese ich über eine Matrix mit
> dem AD-Wandler ein. Ein bestimmter Wert entspricht einem Tasterdruck. Um
> zu überprüfen ob sich was geändert hat, muss erst der AD-Wandler noch
> mal ne Runde drehen.....


Dann nimm doch einfach die Wandlungsrate des ADC als Entprellzeit.
Und wenn das zu schnell ist (Fehlerkennungen), dann nimm nur jede 
100-ste Wandlung oder so.


Peter

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.