Drehencoder - Richtungsweisender Schalter
Materialbedarf
Anz. | Bezeichnung | Datenblatt |
1 | Batterie/Spannungsquelle 9V | |
1 | Spannungsregler 7805 | |
1 | ATMega8 AVR-Prozessor | |
1 | Drehencoder | |
3 | Widerstand 220 Ohm | |
1 | Widerstand 10 kOhm | |
1 | Elektrolytkondensator 100 µF/16V | |
1 | Kondensator 100nF | |
3 | Standard-Leuchtdiode 3mm oder 5mm | 3mm, 5mm |
Drehencoder, die modernen Bedienelemente
Für die Bedienung von Geräten in denen µC ihren Dienst tun, gibt es diverse Möglichkeiten. Taster, Schalter, Potentiometer, Kodierschalter um nur einige zu nennen. In den letzten Jahren hat sich noch ein weiteres Bedienelement durchgesetzt. Es ist der Drehencoder.
Der Erfolg dieses Elements kommt auch nicht von ungefähr. Mit dem Drehencoder, welcher unter anderem auch Inkrementalgeber oder Drehimpulsgeber genannt wird, lassen sich viele herkömmliche Bedienelemente ersetzen. Die Abfrage dieses Elementes ist aber leider nicht mit einem einfachen Befehl getan. Aber dafür gibt es jetzt diesen Lehrgang.
Funktionsweise des Drehencoders
Drehencoder haben in der Regel 3 Anschlüsse. Diese werden im Allgemeinen A, B und C genannt. An C wird ein Spannungspotential angeschlossen während an A und B beim drehen entsprechend dieses Potential in einem bestimmten Muster durchgeschaltet wird. Einige Drehencoder besitzen auch noch einen Taster, welcher geschlossen wird, wenn man die Bedienachse vertikal betätigt.
Der
Typ, welcher hier verwendet wird, besitzt die 3 Hauptkontakte auf der
einen Seite. Auf der gegenüberliegenden Seite befinden sich, bei diesem
Typ, noch zwei weitere Pins, welche für den eingebauten Taster zuständig
sind. Die Pins sind hier im 2,54mm Raster angeordnet, so dass wir diesen Drehencoder problemlos auf dem Steckboard verwenden können. |
Um einen Drehencoder von einem Mikrokontroller auswerten zu lassen, muss man natürlich erst einmal verstehen, wie diese funktionieren. Hierzu wird eine kleine Prüfschaltung aufgebaut.
Den
C-Kontakt schließen wir hier an - an während A und B über LEDs an Plus
liegen. Der Tastkontakt wird über eine extra-LED geführt. So kann man auch die Tasterfunktion testen. Wird nun die Schaltung in Betrieb genommen und am Drehencoder gedreht, blitzen die Leuchtdioden schnell unterschiedlich auf. Um jetzt heraus zu finden, wie die LEDs aufleuchten, muss man sehr langsam drehen. Hierbei spürt man einen 'Hügel'. Kurz darauf leuchtet eines der beiden LEDs auf. Wird die Achse sehr feinfühlig weiter gedreht, geht auch die zweite Leuchtdiode an. Kurz darauf verlischt die erste Leuchtdiode wieder und dann auch die zweite. |
Wenn man sich das Verhalten der beiden LEDs aufzeichnet, erhält man den nebenstehenden Signalverlauf. Durch die Reihenfolge, in welcher die LEDs aufleuchten, kann man die Drehrichtung erkennen. Jetzt müssen wir es nur noch unserem AVR beibringen. |
Heirat von AVR und Drehencoder
Der
Anschluss des Drehencoders an den AVR ist nicht allzu kompliziert. Der
C-Kontakt des Bedienelements bleibt auf der Masse. A und B werden an
Port D Pin 2 und 3 angeschlossen. Mit den LEDs D2 und D3 soll der AVR die aktuelle Drehrichtung des Drehencoders ausgeben. |
$regfile "m8def.dat" |
Neben den Konfigurationen, welche bereits bekannt sein dürften, tritt hier das Programm in eine Endlosschleife ein. Als Erstes in dieser Schleife sorgen wir dafür, dass sich der Drehencoder in Ruheposition befindet. Es müssen also, da die internen Pullups der Ports D.2 und D.3 aktiviert worden, diese Ports auf Anliegen eines 1-Signal abgefragt werden. Dies geschieht mit dieser Schleife:
Do : Loop Until Pind.2 = 1 And Pind.3 = 1 |
Sind beide Eingänge 1, wird nun mit den beiden IF-Befehlen abgefragt, ob eines der Eingänge durch einen Kontakt des Drehencoders auf 0 gezogen wird. Nach der bereits oben gezeigten Grafik, wird damit auch gleich die Drehrichtung ermittelt. Nun muss nur noch abgwartet werden, dass der andere Kontakt ebenso geschlossen und auch wieder geöffnet wird. Ist der Zyklus vorbei, schalten wir die dazu gehörige LED ein und warten einen kurzen Augenblick.
Die beiden Leuchtdioden zeigen somit an, in welche Richtung der Drehencoder gedreht wird.
Aber dieses Programm ist bei weitem nicht perfekt. Wird zu schnell gedreht, reagiert der AVR nicht richtig. Bei zu langsamem drehen, wird unter Umständen die falsche Richtung angezeigt. Für die Auswertung des Drehencoders gibt es erheblich bessere Verfahren.
Wird fortgesetzt ...