Encoder rechts drehen:
v v v v v
Q1 ++++ ++++++ ++++++ ++++++ ++++++
+ + + + + + + + +
++++++ ++++++ ++++++ ++++++ +++
Q2 ++++++ ++++++ ++++++ ++++++ ++++++
+ + + + + + + + +
+ ++++++ ++++++ ++++++ ++++++
Encoder links drehen:
v v v v v
Q1 ++++ ++++++ ++++++ ++++++ ++++++
+ + + + + + + + +
++++++ ++++++ ++++++ ++++++ ++++
Q2 +++ ++++++ ++++++ ++++++ ++++++
+ + + + + + + + + +
++++++ ++++++ ++++++ ++++++ ++++++
Hallo,
die Diagramme oben dienen nur als Prinzipdarstellungen, das kann leicht
abweichen.
Im Prinzip ist der Algo, der sich hinter dem Quelltext verbirgt, ganz
einfach:
A) Bei jeder steigenden Clk-Flanke wird Q1 in ein zweistufiges
Schieberegister geschoben.
B) Wenn der Zustand der beiden Schieberegister unterschiedlich ist, sind
wir bei einem Zeitpunkt, wo Q1 gerade einen Flankenwechsel hinter sich
hat. Im Quelltext ist bei der if-Abfrage die negative Flanke gefordert.
C) Jetzt wird einfach nur der dann gerade aktuelle Wert von Q2
gespeichert, der (wie oben ersichtlich) anzeigt, ob der Encoder rechts
oder links dreht.
C1) Der else-Zweig behält bis zur nächsten negativen Flanke von Q2 den
Zustand bei.
Gruß,
Thomas