Forum: Compiler & IDEs Drehgeber Codevergleich


von Thomas (Gast)


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.

von Karl H. (kbuchegg)


Lesenswert?

Thomas schrieb:

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

Dieses Argument ist nicht wirklich relevant.
Mit dem Timer verbrauchst du weniger als 1% der Rechenzeit zum pollen.

von Sandra (Gast)


Lesenswert?

Welches Argument ist dann relevant?

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

von Karl H. (kbuchegg)


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

von Yalu X. (yalu) (Moderator)


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?

von Rolf Magnus (Gast)


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.

von Karl H. (kbuchegg)


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.

von Dimi (Gast)


Lesenswert?

Hallo,

ich habe in meinem Selbstbau-Netzteil auch Timer-Methode benutzt.
Läuft problemlos und kostet fast keine Rechenzeit.
Kann drehen so schnell wie ich will, klappt immer.

MfG aus Westerwald

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.