Ich habe auch bei einem Bastelprojekt mal einen (Billig-)Encoder von Pollin eingesetzt. Mittlerweile benutze ich wieder Tasten.
Zur Erklärung:
Die Encoder haben zwei Signalausgänge, namentlich A und B. Durch drehen ergibt sich folgender Signalwechsel (siehe auch Datenblatt zu deinem Encoder)
Rechtsrum: (A,B)= (1,1)-(0,1)-(0,0)-(1,0) usw.
Linksrum: (A,B)= (1,1)-(1,0)-(0,0)-(0,1) usw.
Dein Modell durchläuft auch alle diese Signalzustände, rastet jedoch nur in den Zuständen A=B, also (0,0) und (1,1) ein.
Es gibt aber auch Encodermodelle, die bei allen vier möglichen Zuständen einrasten, und dafür wurde die Encoder-Funktion von Bascom auch geschrieben.
Ich habe auch mit der Encoderfunktion ein bischen rumgespielt bin aber dann bei einer selbstgeschriebenen Funktion gelandet. Obwohl die auf der Benutzung von externen Interrupts basiert (was zwar von den Profis zu Recht verpöhnt wird) fahre ich damit eigentlich ganz gut. Ich mußte jedoch die Kontakte durch RC-Glieder entprellen.
Das ganze sieht dann etwa so aus:
Code:Config Int2 = Falling 'Ph_a an ext. Int2 On Int2 Isr_int2 Enable Int2 Enable interrupts Dim Rotary as byte 'Bit0= Ph_a, Bit1= Ph_b Dim Enc_down as bit 'Flag Runterzählen Dim Enc_up as bit 'Flag Hochzählen Dim Encoderstand as byte 'Hauptprogramm Do If Enc_down=1 then reset Enc_down if Encoderstand>0 then decr Encoderstand Elseif Enc_up=1 then reset Enc_up if Encoderstand<255 then incr Encoderstand Endif Loop End. Isr_int2: 'Externer Interrupt von Ph_a Rotary.0 = Ph_a 'Signal A lesen Rotary.1 = Ph_b 'Signal B lesen Rotary = Rotary And &B00000011 If Rotary = 0 Or Rotary = 3 Then 'Ph_a = Ph_b Set Enc_down Else Set Enc_up End If Toggle Mcucsr.isc2 'Umschaltung steigende/fallende Flanke Int2 Return







Zitieren

Lesezeichen