Ich habe viele Encoder-Programme ausprobiert, bei mir läuft dieses zuverlässig:
Das LCD ist nur zur Demo. Der Ausgang "Wert" kann für beliebige Zwecke angepaßt werden.Code:$regfile = "m8adef.dat" $crystal = 2000000 $hwstack = 40 $swstack = 16 $framesize = 32 Portc = &B11 ' PIN 0,1 Pullup Enc_a Alias Pinc.1 Enc_b Alias Pinc.0 Dim Wert As Byte , Tick As Byte Wert = 30 'Vorgabewert Config Portd = Output Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2 Config Lcd = 16 * 2 Cls Cursor Off Noblink Config Timer0 = Timer , Prescale = 1024 '= ~10MHz= ~0,1µs * 1024= 0,1ms On Timer0 Enc_int 'Interrupt Timer0 = 246 'Timerstartwert:10; ~0,1ms * 10= 1ms Enable Timer0 Enable Interrupts Do Locate 1 , 1 : Lcd "Drehencoder EC11" Locate 2 , 1 : Lcd "Wert : " ; Wert ; " " Waitms 1 Loop Enc_int: Timer0 = 246 'Timerstartwert Tick.0 = Enc_a 'Zustandswechsel Tick.1 = Enc_b Select Case Tick Case &H0_2 : Incr Wert Case &H0_1 : Decr Wert End Select Tick.4 = Tick.0 Tick.5 = Tick.1 Return End
Joachim







Zitieren

Lesezeichen