mikrocontroller.net

Forum: Compiler & IDEs Drehgeber Codevergleich


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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#...

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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sandra (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dimi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.