Titelbild zum Artikel Alps Encoder

ALPS Encoder STEC11B09 an PicAxe 14M2

Hier eine Anleitung (Schaltplan und Demoprogramm), wie man einen ALPS STEC11B09 Encoder – auch Drehimpulsgeber, Drehencoder oder Drehgeber genannt- an einer PicAxe 14M2 betreibt.

Schaltplan ALPS Encoder STEC11B09 an PicAxe 14M2
Schaltplan ALPS Encoder STEC11B09 an PicAxe 14M2
'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