Hallo,
ich habe den EC11B von ALPS
(http://www3.alps.com/WebObjects/catalog.woa/E/PDF/Switch/Encoder/EC11/EC11.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
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.
Jan wrote:
> Hallo,> ich habe den EC11B von ALPS> (http://www3.alps.com/WebObjects/catalog.woa/E/PDF/Switch/Encoder/EC11/EC11.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.
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
...
@ 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
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!
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
...