Danke nochmal für eure Mühe !
Hier das Programm, das mit meinem optischen Encoder einwandfrei funktioniert:
Code:
$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
Den Divider hab ich nur drin um die über 500 Impulse pro Umdrehung auf ein Maß zu bringen, dasss man auch von Hand drehen kann 
So und hier der Versuch mit dem Bascom Befehl :
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
Das ist praktisch genau der Code aus der Hilfe.
Gruß Markus
Lesezeichen