Hier eine Anleitung (Schaltplan und Demoprogramm), wie man einen ALPS STEC11B09 Encoder – auch Drehimpulsgeber, Drehencoder oder Drehgeber genannt- an einer PicAxe 14M2 betreibt.
'Demoprogramm für ALPS STEC11B09 Encoder (Drehimpulsgeber). µC = PicAxe14M2
'Singalformat für 1 Schritt/Rastung (CW und CCW):
'1 = OFF/5Volt, 0 = ON/0Volt
' A B A B
' --- ---
' 1 1 1 1
' 1 0 0 1
' 0 0 0 0
' 0 1 1 0
' 1 1 1 1
'Pins
symbol LED1 = B.5
symbol LED2 = B.4
'Variable für Encoder
symbol enc1Byte = b0
symbol enc1Bit_A = bit0
symbol enc1Bit_B = bit1
symbol enc1Bit_Action = bit2
'Variable für Drehrichtung
symbol Direction = b1
'Variable für Zähler
symbol Counter = b2
' Konstante
symbol CW = 1
symbol CCW = 2
low LED1
low LED2
Main:
do
gosub GetEncoder
select case Direction
case CW
Counter = Counter + 1
toggle LED1
sertxd("Total: ",#counter, 13, 10)
case CCW
Counter = Counter - 1
toggle LED2
sertxd("Total: ",#counter, 13, 10)
end select
loop
End
GetEncoder:
'Bisher kein Drehung erfasst, daher Direction = 0
Direction = 0
'Pin A und Pin B einlesen und die restlichen C-Pins unverändert lassen
enc1Byte = PinsC and %00000011
'Nur wenn beide Pins vom Encoder Off(=1) sind, ist enc1Bit_Action = 1
enc1Bit_Action = enc1Bit_A and enc1Bit_B
'Wenn enc1Bit_Action nicht gleich 1 ist (Ein oder beide Pins vom Encoder stehen
'nicht auf OFF) dann zurück
if enc1Bit_Action <> 1 then return : end if
'Warten bis Pin A oder Pin B auf ON geht
do
'Pin A und Pin B einlesen und die restlichen C-Pins unverändert lassen
enc1Byte = PinsC and %00000011
'Wenn Pin A oder Pin B auf ON geht, dann ist enc1Bit_Action = 1 und die
'Schleife wird verlassen
enc1Bit_Action = enc1Bit_A xor enc1Bit_B
loop while enc1Bit_Action = 0
' Prüfen welcher Pin zuerst auf ON ging
if enc1Bit_A = 0 then
'Zuerst ging Pin A auf ON, also wird gegen den Uhrzeigersinn gedreht (CCW)
Direction = CCW
else
'Zuerst ging Pin B auf ON, also wird im Uhrzeigersinn gedreht (CW)
Direction = CW
end if
'Warten bis Pin A und Pin B auf OFF gehen
do
'Pin A und Pin B einlesen und die restlichen C-Pins unverändert lassen
enc1Byte = PinsC and %00000011
'Nur wenn beide Pins vom Encoder Off(=1) sind, ist enc1Bit_Action = 1 und die
'Schleife wird verlassen
enc1Bit_Action = enc1Bit_A and enc1Bit_B
loop while enc1Bit_Action = 0
return