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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.