Forum: Mikrocontroller und Digitale Elektronik Tasten ohne Interrupt


von Guido (Gast)


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?

von Zip (Gast)


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

von Falk (Gast)


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

von Guido (Gast)


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

von Falk (Gast)


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

von Peter D. (peda)


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

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.