Drehgeber Codevergleich

Gast #1742338
Lesenswert?

Hallo,

ich weiß, dass hier schon jede Menge über Drehgeber geschrieben wurde.
Ich habe einen PEC11 mit 18 Rasterungen, wobei Kanal A und Kanal B je 
einen Interrupteingang meines Atmega's bekommen haben.

Welcher Code ist dafür nun sinnvoller? Ich programmiere in C

-Hier ein Beispiel bei dem die beiden Interruptleitungen genutzt werden:
Beitrag "AVR: Dreh-Encoder mit Interrupts"

-Hier das Standartbeispiel aus der Artikelsammlung:
http://www.mikrocontroller.net/articles/Drehgeber#Solide_L.C3.B6sung:_Beispielcode_in_C

Der Drehgeber wird selten genutzt, vielleicht 2-4 mal pro Tag um eine 
Variable einzustellen. Wäre da nicht die Variante sinnvoller, bei der 
nicht ständig der Timper pollen muss??

Wäre über eure Tipps sehr dankbar, da ich noch Anfänger bin.
#1742377
Lesenswert?

Sandra schrieb:
> Welches Argument ist dann relevant?

Es ging um das Argument, dass ständiges Pollen Rechenzeit verbraucht.
Tatsächlich ist der Rechenzeitverbrauch so minimal, dass er nicht ins 
Gewicht fällt.

>
> Sie die beiden Beispiele gleichwertig? Was würdet ihr machen, wenn ihr
> die Interruptleitungen zur Verfügung hättet?

Nur für mich gesprochen: Pollen
Moderator #1742437
Lesenswert?

Ich habe den Assemblercode für die Interruptlösung nur grob überflogen.
Immerhin scheint der Autor — im Gegensatz zu vielen anderen, die sich
ebenfalls mit Interruptlösungen versuchten — das Kontaktprellen zu
berücksichtigen. Es ist aber nicht sofort ersichtlich, dass er dabei
wirklich alle Fälle berücksichtigt hat. So sicher scheint er sich dessen
selbst nicht zu sein, denn er schreibt:

> noch mal zu Peter; die Geschichte, daß man testen sollte ob während
> des Umschaltens eine Flanke auftritt habe ich ehrlich gesagt nicht
> bedacht... ich denke aber mal, daß das so selten auftritt, daß man es
> hier vernachlässigen kann...

Das hört sich nicht vertrauenserweckend an.

Aber selbst wenn der Algorithmus wirklich keine Impulse verschlucken
oder zuviel zählen würde (was ich aber bezweifle): Wird der Encoder
exakt an der Flanke eines der beiden Signale festgehalten, kann dies zu
länger anhaltendem Prellen führen. Während dieser Zeit ist dann der
Controller fast ausschließlich mit der Interruptbearbeitung beschäftigt,
wodurch seine restlichen Aktivitäten stark ausgebremst werden, was je
nach Anwendung zur Fehlfunktion führen kann. Dieser Fall wird zwar in
der Praxis kaum eintreten, stellt aber trotzdem einen klaren Nachteil
des Verfahrens dar.

Das Timer-Verfahren hat dieses Problem nicht: Es braucht zwar ständig
ein wenig Rechenzeit, die CPU-Auslastung ist aber immer gleichmäßig
gering, egal wie böswillig jemand an dem Encoder herumfummelt.

PS: Heißt du jetzt eigentlich Thomas oder Sandra?
Gast #1742743
Lesenswert?

Wie schnell muß man so einen Drehgeber eigentlich pollen, damit's 
vernünftig funktioniert? Bei einem Taster ist das ja weniger kritisch, 
weil da normalerweise nicht wie blöd drauf rumgehämmert wird, aber ein 
Drehgeber kann ja bei schnellem Drehen deutlich mehr Impulse erzeugen. 
Ich frage auch, weil mir bei ziemlich vielen Geräten mit Drehgeber 
aufgefallen ist, daß sie schon bei mäßig schnellem Drehen nicht mehr 
vernünftig hinterherkommen. Ganz schlechte springen bei zu schnellem 
Drehen sogar manchmal in die andere Richtung.
Wenn man bei solchen Geräten den Knopf schnell in eine Richtung dreht, 
dann langsam wieder zurück in die Ausgangsposition, kommt man nicht mal 
annähernd bei dem Wert an, wo man gestartet ist. Bei manchen Geräten 
finde ich das recht ärgerlich.
#1742857
Lesenswert?

Rolf Magnus schrieb:

> Ich frage auch, weil mir bei ziemlich vielen Geräten mit Drehgeber
> aufgefallen ist, daß sie schon bei mäßig schnellem Drehen nicht mehr
> vernünftig hinterherkommen. Ganz schlechte springen bei zu schnellem
> Drehen sogar manchmal in die andere Richtung.

Das ist dann oft ein Zeichen dafür, dass da genau diese 'Interrupt und 
das B-Signal ansehen' Methode benutzt wird.

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