Hallo zusammen,
ich habe einen Alps Dreh-Encoder mit Switch-Funktion an einen Atmega88 zusammen mit drei LED's gehängt, wovon jeweils eine kurz aufleuchten und dann ausfaden soll, wenn der Encoder nach links gedreht wird, eine bei einer Drehung nach rechts und eine bei Betätigung der Switch-Funktion.
Mein Bascom-Code dazu:
Das funktioniert auch ganz gut, solange ich nach rechts drehe. Wird der Encoder nach links gedreht, funktioniert das zwar auch, zwischendurch wird aber immer wieder die LED getriggert, die bei einer Rechtsdrehung aufleuchten soll.Code:Declare Function Checkvalue() As Byte Declare Function Setposition() As Byte $regfile = "m88def.dat" $crystal = 20000000 $baud = 9600 Dim Sled As Word ' LED für Switch Dim Lled As Word ' LED für links-Drehung Dim Rled As Word ' LED für rechts-Drehung Ddrb.3 = 1 Ddrd.5 = 1 Config Timer0 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Up , Prescale = 1 Config Timer1 = Pwm , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 1 Config Timer2 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Up , Prescale = 1 Config Pinc.0 = Input ' Right Portc.0 = 1 ' Pullup Config Pinc.1 = Input ' Left Portc.1 = 1 ' Pullup Config Pinc.2 = Input ' Switch Portc.2 = 0 ' Pullup Config Pind.5 = Output Config Pinb.1 = Output Config Pinb.3 = Output Cha Alias Pinc.0 Chb Alias Pinc.1 Swi Alias Pinc.2 Leftled Alias Portd.5 Switchled Alias Portb.1 Rightled Alias Portb.3 Lled = 0 Rled = 255 Sled = 0 Pwm0a = Rled Pwm1a = Sled Pwm2a = Lled 'Dim Encoderpos As Integer 'Encoderpos = 0 Dim Returnval As Byte Dim Preva As Byte Do If Swi = 1 Then Returnval = Checkvalue() Elseif Swi = 0 Then Returnval = Setposition() End If If Sled > 0 Then Sled = Sled - 1 Pwm1a = Sled End If If Lled = 1 Then Pwm2a = 0 If Lled > 1 Then Lled = Lled - 2 Pwm2a = Lled End If If Rled = 254 Then Pwm0a = 255 If Rled < 254 Then Rled = Rled + 2 Pwm0a = Rled End If Waitms 5 Loop Function Checkvalue If Preva = 1 And Cha = 0 And Chb = 0 Then 'Right Rled = 127 Elseif Preva = 1 And Cha = 0 And Chb = 1 Then 'Left Lled = 127 End If Preva = Cha End Function Function Setposition If Lled < 245 Then Lled = Lled + 10 End If If Rled > 10 Then Rled = Rled - 10 End If Sled = 255 'Encoderpos = 0 End Function
Leider verstehe ich nicht, wieso das passiert. Kann mir jemand einen Tipp geben?
Danke,
viele Grüsse
Tobi








Zitieren

Lesezeichen