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"
$crystal = 1000000

Config Portc.0 = Output
Config Portc.1 = Output

Config Portd.2 = Input
Config Portd.3 = Input
Portd.2 = 1 : Portd.3 = 1

Do
  Do : Loop Until Pind.2 = 1 And Pind.3 = 1
  If Pind.2 = 0 Then
    Do : Loop Until Pind.3 = 0
    Do : Loop Until Pind.3 <> 0
    Portc.0 = 1 : Waitms 10 : Portc.0 = 0
  Elseif Pind.3 = 0 Then
    Do : Loop Until Pind.2 = 0
    Do : Loop Until Pind.2 <> 0
    Portc.1 = 1 : Waitms 10 : Portc.1 = 0
  End If
Loop

 

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 ...

 

 

Zurück zur Auswahlseite            Zur Hauptseite