AVR: Drehencoder & Impulse verlieren

OP #2298350
Lesenswert?

Hi,

habe hier ein Grundsatzproblem:
Ich frage über einen schnellen Timer einen Drehencoder ab und merke mir 
das Delta zur letzten Abfrage die in einer langsameren Haupschleife 
läuft.

Soweit so gut. Drehe ich den Encoder nun sehr sehr schnell, dann 
verliere ich soviele Impluse, daß die CPU meint, ich drehe den Encoder 
in die andere Richtung.

Also: wie schnell muß ich die CPU Takten? Ist eine höhere Taktfrequenz 
überhaupt die Lösung? Gibt es andere "loss less" Ansätze?


LG
Günter
#2298382
Lesenswert?

Günter W. schrieb:
> Ich frage über einen schnellen Timer einen Drehencoder ab und merke mir
> das Delta zur letzten Abfrage die in einer langsameren Haupschleife
> läuft.

mach das Delta doch gleich im Timer und integriere in einer statischen 
Variable die aufgelaufenen Impulse auf. Diese statische Variable sollte 
mit einer anderen Funktion ausgelesen und auf 0 gesetzt werden.
So finden auch zwei aufintegrierte Impulse ihren Weg in die 
Hauptschleife, selbst wenn der Prozessor viel zu tun hat. Die 
Timer-Interruptroutine stellt an sich ja schon sicher, dass sie 
regelmäßig ausgeführt wird(Beispiel: Durchlauf der Mainloop in ~50ms, 
Timerinterrupt alle 5ms, es könnten bis zu 10 Impulse auflaufen, die 
aber alle "durchkommen").

mfg mf

PS: An dem "Rückwärtsdrehen" sind Shannon und Nyquist wegen des 
Abtasttheorems schuld. Das Abtasten stellt aber hier gleich auch die 
Dekodierung in einzelne Impulse dar.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren