Ein Rotary-Encoder kann oft eine Tastatur ersetzen.
Er gibt beim Drehen Impulse ab, die sich nach Drehrichtung unterscheiden, außerdem ist auch noch eine Druck-Taster-Funktion enthalten. Bisher hatte mich der hohe Preis von Rotary-Encodern abgeschreckt, doch nun gibt es bei Pollin nebenstehenden Encoder für unter 2€. (inzwischen leider ausverkauft) |
Funktion eines Rotary-Encoders
Der Rotary Encoder enthält 2
Lichtschranken, die
beim Drehen abwechseln unterbrochen oder frei gegeben werden. Die
Ausgänge
der Lichtschranken sind herausgeführt. Der Drehknopf hat pro
Umdrehung
32 leichte Rastpositionen, um ein päzises Drehgefühl zu
vermitteln.
Pro Umdrehung liefern beide Ausgänge je 8 symmetrische
Rechteck-Pulse.
Die Pulse beider Ausgänge sind um 1/4 Rechteckpuls verschoben.
Dadurch
lässt sich die Drehrichtung feststellen. Einige Encoder rasten nur in jeder zweiten Position. Sie machen also immer zwei Schritte auf ein Mal. Wer einen solchen Encoder einsetzt, muss das in der Software berücksichtigen. Mein Encoder rastet aber in jeder Position. Eine abgewandelte Schaltung, die auch mit solchen "doppelschrittigen" Encoder zurecht kommt findet man hier. |
Schaltung
Der Rotary Encoder hat zwei digitale
Impulsausgänge
(Pin5 & 4), für die Drehfunktion. Diese beiden Pins
müssen
mit 2,2kOhm Widerständen nach Vdd verbunden werden, um
TTL-gerechte
Pegel zu garantieren. Beide Pins werden dann an je ein Pin des PIC
geführt.
Der Rotary-Encoder benötigt eine 5V-Betriebsspannung, deshalb wird ihm Vss und Vdd (Pin 1 & 6) zugeführt. Außerdem hat der Encoder einen mechanischen Drucktaster, für dessen Nutzung ein PIC-Pin und ein weiterer Hochziehwiderstan nötig sind. Da ich in diesem Beispel diesen Kontakt (Pin 2 & 3) nicht benutze, fehlt die entsprechende Beschaltung im nebenstehenden Stromlaufplan. Für den Aufbau eignet sich eine 16F84/62x-Testplatine oder eine 16F84/62x-Minitestplatine mit angesteckter LED-Platine. |
Programmablauf
Programmlisting
list
p=16f628 ;************************************************************** ;* Pinbelegung ;* ---------------------------------- ;* PORTA: 0 < rotary encoder - B Pin4 ;* 1 < rotary encoder - A Pin5 ;* 2 - ;* 3 - ;* 4 - ;* 5 - ;* 6 - ;* 7 - ;* ;* PORTB: 0 > LED ;* 1 > LED ;* 2 > LED ;* 3 > LED ;* 4 > LED ;* 5 > LED ;* 6 > LED ;* 7 > LED ;* ;************************************************************** ; ;sprut (zero) Bredendiek 01/2003 ; ; Rotary-Encoder mit LED Zeile ; ; Prozessor 16F628 ; ; Prozessor-Takt 10 MHz ; ; Rotary Encoder am PortA 0 & 1 ; LED-Zeile am PortB ; ;************************************************************** ; Includedatei für den 16F628 einbinden #include <P16f628.INC>
ERRORLEVEL
-302
;
SUPPRESS BANK SELECTION MESSAGES ; Configuration festlegen:
; Constanten festlegen ; Variable festlegen ;**************************************************************
org 0 ;**************************************************************
init ; 16F628 alle
Comparatoreingänge auf
Digital umschalten
clrf
counter ;Hauptprogrammschleife ;**************************************************************
read_encoder end |