Danke nochmal für eure Mühe !
Hier das Programm, das mit meinem optischen Encoder einwandfrei funktioniert:
Den Divider hab ich nur drin um die über 500 Impulse pro Umdrehung auf ein Maß zu bringen, dasss man auch von Hand drehen kannCode:$regfile = "m32def.dat" $crystal = 8000000 $baud = 9600 Ddrd.2 = 0 'Eingänge mit Pullup für Drehgeber Portd.2 = 1 Ddrd.4 = 0 Portd.4 = 1 On Int0 Onint0 Mcucr.isc00 = 1 'INT0 bei FALLING + RISING Mcucr.isc01 = 0 Gimsk.int0 = 1 Dim Drehgeber As Long 'wird von ISR (INT0) verändert Dim Drehgeber_alt As Long Drehimpuls1 Alias Pind.2 Drehimpuls2 Alias Pind.4 Onint0: If Drehimpuls2 <> Drehimpuls1 Then 'test phase B If Divider1 = 9 Then 'soll 9 sein Divider1 = 0 Incr Drehgeber Else Incr Divider1 Divider2 = 0 End If Else If Divider2 = 9 Then 'Soll 9 sein Divider2 = 0 Decr Drehgeber Else Incr Divider2 Divider1 = 0 End If End If Return![]()
So und hier der Versuch mit dem Bascom Befehl :
Das ist praktisch genau der Code aus der Hilfe.Code:$regfile = "m32def.dat" ' specify the used micro $crystal = 8000000 ' used crystal frequency $baud = 19200 ' use baud rate $hwstack = 32 ' default use 32 for the hardware stack $swstack = 10 ' default use 10 for the SW stack $framesize = 40 ' default use 40 for the frame space Config Lcd = 20 * 4a , Chipset = Ks077 '20*4 LCD DIP Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2 Cls Locate 1 , 1 Lcd "Encoder test" Dim B As Byte Dim Wert As Integer Dim Divider1 As Integer Dim Divider2 As Integer Wert = 100 'we have dimmed a byte because we need to maintain the state of the encoder Portb = &B11 ' activate pull up registers Do B = Encoder(pind.3 , Pind.2 , Links , Rechts , 0) ' ^--- 1 means wait for change which blocks programflow ' ^--------^---------- labels which are called ' ^-------^---------------------------- port PINs Lcd B Locate 4 , 1 Lcd "" ; Wert ; " " Waitms 10 Loop End 'so while you can choose PINB0 and PINB7,they must be both member of PINB 'this works on all PIN registers Links: Locate 2 , 1 Lcd "left rotation " Decr Wert Return Rechts: Locate 2 , 1 Lcd "right rotation " Incr Wert Return End
Gruß Markus







Zitieren

Lesezeichen