Drehgeber -> Up/Down

Drehgeber oder auch Inkrementaldrehgeber sind, obwohl sie etwas schwer (leider) beschaffbar sind, für Bastler recht attraktiv.
Gerade die Bedienung für den Benutzer, aber auch der Implementierungsaufwand für Mikrocontroller sind ziemlich angenehm.
Dumm nur, wenn man bereits ein Gerätchen hat, das nur über Up/Down-Taster verfügt und auch noch für jeden Schritt einzeln drücken muss.
Im DSE-FAQ wird das Thema angesprochen, der Aufbau mit Logikbausteinen sieht ehrlich gesagt geisteskrank aus und ich denke, niemand wird sich so etwas freiwillig antun wollen.
Ein kleiner Mikrocontroller kann das doch auch erledigen!
Ein PIC12F629 liegt herum - 8 Beinchen, 5 davon kann man ohne Probleme als I/Os verwenden: perfekt!
Die äußere Beschaltung hält sich dank interner Pull-Ups relativ gering. Mit entsprechendem Programmer ist nicht einmal R1 für MCLR notwendig.
Das Bild zeigt die Version mit der Low-aktiven Ausgängen, nützlich um LEDs nutzlos blinken zu lassen oder Taster, die gegen GND geschaltet wurden, zu ersetzten.

Die Software ist recht einfach gestrickt, ein bisschen Hintergrundwissen über die Drehgeber schadet in dem Zusammenhang wahrscheinlich nicht ;)

Eigentlich alle Drehgeber haben eine Maske, die dem Gray-Code entspricht:

Das schöne gegenüber dem Binär-Code ist, dass sich beim hoch zählen immer nur eine Datenleitung ändert. Ein undefiniertes Signal wie beim Binärcode ist also viel schwieriger zu erreichen. Der Nachteil darin liegt, dass eigentlich alle Computer auf dem Binärsystem basieren und man erst herumrechnen muss, bis mal etwas brauchbares hat.

Beim Drehgeber sieht das nun folgendermaßen aus: Jeder Schritt am Drehgeber stellt eine Flanke am Diagramm dar.
Das Umrechnen vom Gray- auf das Binärsystem ergibt sich eine kleine Besonderheit: wenn man die zwei Leitungen vertauscht, kommt statt 0, 1, 2, 3 nicht 0, 2, 1, 3 heraus, sondern statt 0, 1, 2, 3 "nur" 3, 2, 1, 0. Deshalb ist es auch relativ egal, wie herum man den Drehgeber an den IC anschließt. Je nach Anschluss ist entweder GP5 oder GP4 der Ausgang von Up bzw. Down.

In der Software wird der Wert eines Eingangs direkt in eine Variable geschoben; wenn der zweite Eingang high ist, wird auf die Variable ein XOR mit 3 angewendet - schon hat man einen dezimalen Wert. Im Folgenden wird die Differenz zwischen dem aktuellen Wert der Variable mit dem letzten geprüft.
Wenn eine Positionsänderung festgestellt wird, wird der Ausgang der entsprechenden Richtung aktiviert und nach etwa 20ms wieder abgeschaltet.
Im ganzen ergibt dies schlanke 81 Words auf dem Controller, was in der kostenpflichtigen Version auf 75 Words reduziert werden könnte. Die Performance des ICs reicht bei internem Takt (ca. 4MHz) auch für etwas beherztere Drehungen, wobei der größte Performancefresser die Pausen darstellen. Je nach Endgerät können die Pausen noch etwas reduziert werden.

Da die Downloadseite etwas buggy ist, gibt es die Dateien direkt auf dieser Seite.

Download:
drehgeb.zip 2KB

letzte Änderung 27.08.2006