www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Drehgeber auslesen


Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe den EC11B von ALPS 
(http://www3.alps.com/WebObjects/catalog.woa/E/PDF/...)

Ich habe nun sämtlice Codeschnipsel ausprobiert, die hier in dem Artikel 
und in Beiträgen angegeben sind; ich kriege ihn einfach nicht 
zuverlässig ausgelesen. Entweder inkrementiert der Code die 
Zählervariable dauernd, ohne dass man den Drehgeber überhaupt anfasst 
(bei Peter Danneggers Code mit der Graycode-Tabelle), oder er reagiert 
auf keine Drehung.

Der Code, der funktionierte, produzierte immer Sprünge von 2 Zahlen auf 
einmal (da er wohl davon ausging, dass es zwei Graycode-Zustände pro 
Rasterung gibt).

Meine selbst geschriebene Statemachine läuft relativ gut, allerdings 
inkrementiert sie ab und zu nicht wenn ich drehe.


Das kann doch nicht so schwer sein, diese beiden Spuren richtig 
auszulesen...

Stelle ich mich nur blöd an, oder ist der EC11B irgendwie anders?
Wie kann man den denn zuverlässig auslesen?

Danke und mfg
Jan

Autor: Winfried (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Teste doch erstmal mit 2 Tastern, mit denen du den Encoder lt. Diagramm 
simulierst, ob dein Code korrekt arbeitet. Und dann schaust du dir 
umgedreht an, ob dein Encoder dass rausgibt, was im Diagramm ablesbar 
ist.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jan wrote:
> Hallo,
> ich habe den EC11B von ALPS
> (http://www3.alps.com/WebObjects/catalog.woa/E/PDF/...)

> Der Code, der funktionierte, produzierte immer Sprünge von 2 Zahlen auf
> einmal (da er wohl davon ausging, dass es zwei Graycode-Zustände pro
> Rasterung gibt).

Was ja auch völlig normal und richtig bei dem Drehgeber ist. Der hat 30 
Zustände aber nur 15 Rastungen. Einfach das Ergebnis durch 2 teilen und 
alles ist perfekt.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jan wrote:
...
> Der Code, der funktionierte, produzierte immer Sprünge von 2 Zahlen auf
> einmal (da er wohl davon ausging, dass es zwei Graycode-Zustände pro
> Rasterung gibt).

Dasselbe Verhalten zeigt der Drehgeber von Pollin. Ich habe es damals so 
gelöst: Beitrag "Re: Drehimpulsgeber (wiedereinmal.)"
Besser wäre es allerdings, Du arbeitest mit der funktionierenden Methode 
und passt die Lookup-Tabelle an den Drehgeber an. Ich nutze allerdings 
weiter meine Methode, da sie die relativ laberigen Pollin-Drehgeber 
nebenher noch entprellt, was die Zuverlässigkeit erhöht.

> Das kann doch nicht so schwer sein, diese beiden Spuren richtig
> auszulesen...

Beitrag "Re: Drehimpulsgeber (wiedereinmal.)"

>
> Stelle ich mich nur blöd an, oder ist der EC11B irgendwie anders?
> Wie kann man den denn zuverlässig auslesen?

Beitrag "Re: Drehimpulsgeber von Pollin"

>
> Danke und mfg
> Jan

...

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Jan (Gast)

>Der Code, der funktionierte, produzierte immer Sprünge von 2 Zahlen auf
>einmal (da er wohl davon ausging, dass es zwei Graycode-Zustände pro
>Rasterung gibt).

Das ist auch so und steht auch im Artikel Drehgeber.

MFG
Falk

Autor: Mario G. (rodenberger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

für den Pollin Drehgeber benutze ich folgenden Code:

; TEST DES ENCODERS AUF VERDREHUNG ****************************

READ_ENCODER
         MOVF   PORTC,0   ;PORT C NACH W
         ANDLW  B'00000011'
         XORWF  ALT,0  ;VERGLEICHE
         ADDWF  PCL,1   ;PROGRAMMZEIGER ÄNDERN 0 BIS 4
            RETURN    ;keine Änderung
            GOTO LINKS
            GOTO RECHTS
            GOTO WEITER

RECHTS
         INCF    COUNTER, F ; RECHTS:  INCREMENT COUNTER
         GOTO    WEITER
LINKS
         DECF    COUNTER, F ; LINKS:  DECREMENT COUNTER
WEITER   MOVF   PORTC,0     ;PORT C NACH W
         ANDLW   B'00000011'
         ADDWF  PCL,1       ;PROGRAMMZEIGER ÄNDERN 0 BIS 4
            GOTO ENDE
            GOTO WEITER ;Drehgeber steht im Zwischenbereich
            GOTO WEITER ;Drehgeber steht im Zwischenbereich
           ;GOTO ENDE  ;geht gleich mit ENDE weiter

ENDE    MOVWF   ALT             ; FÜR NÄCHSTEN VERGLEICH ALS ALT 
SPEICHERN


Mit Sicherheit auch nicht die beste Lösung, da das Programm in der 
Mittelstellung des Drehgebers nicht weiter läuft.
Mein Programm ist aber nicht Zeitkritisch, beziehungsweise hat die 
serielle Schnittstelle mehr priorität.
Bisher funktioniert das ganze sehr zuverlässig.
Wichtig ist das der Portpin 0 und 1 verwendet wird, sonnst funktioniert 
das mit dem Programmzeiger nicht.

Kritik ist natürlich erlaubt!

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hannes: Hast du den Code auch in C?


Oder wie passe ich denn die Tabelle, die den Graycode enthält, an den 
Drehgeber an?

Viele Grüße
Jan

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jan wrote:
> Hannes: Hast du den Code auch in C?

Nein, der AVR kann kein C. Deshalb habe ich mich entschlossen die 
Sprache des AVRs (Maschinencode, einszueins in ASM notierbar) zu 
benutzen. Das spart Missverständnisse mit dem Dolmetscher... ;-)

>
>
> Oder wie passe ich denn die Tabelle, die den Graycode enthält, an den
> Drehgeber an?

Indem Du die Hälfte der Werte rausnimmst (auf 0 setzt). Du lässt also 
die Werte nur an den Flanken drin, die Du auswerten willst. Dazu 
solltest Du aber schon versuchen, bitweise zu denken...

>
> Viele Grüße
> Jan

...

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.