Hallo,
ich habe das Problem, dass ich die Kombination aus einer
Empfangsroutine für RC5-Code und einem Timer in Bascom nicht zum laufen
bekomme.
Der jetzige Code sieht so aus:
'##############################################################
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 57600
Ddrd = &B11111111
Ddrb = &B11111111
Config Timer2 = Timer , Prescale = 8
On Timer2 Timer_irq
Enable Timer2
Enable Interrupts
Config Rc5 = Pinc.5
Dim Zaehler As Byte
Dim Address As Byte , Command As Byte
Dim I As Byte
Dim Led1 As Byte
Dim Led2 As Byte
Dim Led3 As Byte
Dim D1 As Byte
Dim D2 As Byte
Dim D3 As Byte
Dim D4 As Byte
Dim D5 As Byte
Dim D6 As Byte
Dim D2_1 As Byte
Dim D4_1 As Byte
Dim D6_1 As Byte
Zaehler = 0
Do
'Incr Zaehler
Getrc5(address , Command)
If Command = 16 Then
Zaehler = Zaehler + 1
Elseif Command = 144 Then
Zaehler = Zaehler + 1
Elseif Command = 17 Then
Zaehler = Zaehler - 1
Elseif Command = 145 Then
Zaehler = Zaehler - 1
End If
'Print Zaehler ; " " ; Led1 ; " " ; Led2 ; " " ; Led3
D1 = Zaehler 'aktueller
Zählwert
D2_1 = Zaehler - 40 '40
subtrahieren, weil in 6er-Schritten bis 240
D2 = Not D2_1 'Wert
invertieren -> LED wird dunkler
D3 = Zaehler - 80
D4_1 = Zaehler - 120
D4 = Not D4_1
D5 = Zaehler - 160
D6_1 = Zaehler - 200
D6 = Not D6_1
If Zaehler <= 40 Then
Led1 = 240
Led2 = D1 * 6
Led3 = 0
Else
If Zaehler <= 80 Then
Led1 = D2 * 6
Led2 = 240
Led3 = 0
Else
If Zaehler <= 120 Then
Led1 = 0
Led2 = 240
Led3 = D3 * 6
Else
If Zaehler <= 160 Then
Led1 = 0
Led2 = D4 * 6
Led3 = 240
Else
If Zaehler <= 200 Then
Led1 = D5 * 6
Led2 = 0
Led3 = 240
Else
If Zaehler <= 240 Then
Led1 = 240
Led2 = 0
Led3 = D6 * 6
Else
If Zaehler > 240 Then 'Restwert
von 15 (255-240) "abschneiden"
Led1 = 240
Led2 = 0
Led3 = 0 'LED
bleibt dunkel
End If
End If
End If
End If
End If
End If
End If
Loop
Timer_irq:
'Timer-Interrupt
Timer2 = 237
I = I + 1
If I = 240 Then
I = 0
End If
If I >= Led1 Then
Portd.0 = 0
Portd.1 = 0
Portd.2 = 0
Portd.3 = 0
Portd.4 = 0
Portd.5 = 0
End If
If I < Led1 Then
Portd.0 = 1
Portd.1 = 1
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.5 = 1
End If
If I >= Led2 Then
Portd.6 = 0
Portd.7 = 0
Portb.0 = 0
Portb.1 = 0
Portb.2 = 0
Portb.3 = 0
End If
If I < Led2 Then
Portd.6 = 1
Portd.7 = 1
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
End If
If I >= Led3 Then
Portb.4 = 0
Portb.5 = 0
Portc.0 = 0
Portc.1 = 0
Portc.2 = 0
Portc.3 = 0
End If
If I < Led3 Then
Portb.4 = 1
Portb.5 = 1
Portc.0 = 1
Portc.1 = 1
Portc.2 = 1
Portc.3 = 1
End If
Return
End
'##############################################################
Leider macht der µC bei diesem Programm gar nichts, zumindest nichts
Offensichtliches. Ich habe schon rausgefunden, dass Timer0 nicht
funktionieren kann, weil dieser intern von "GetRC5" verwendet wird.
Deshalb Timer2, leider mit dem gleichen Effekt wie bei Timer0.
Wenn ich den Timer ganz entferne und mir den RC5-Code von der
Fernbedienung auf einem Terminalprogramm anschaue, dann funktioniert es
so wie es soll, aber sobald der Timer drin ist passiert gar nichts mehr.
Ich habe auch schon versucht die Geschwindigkeit für den Timer runter zu
setzen, leider auch erfolglos.
Wenn mir da jemand weiterhelfen kann, wäre ich sehr dankbar.
Grüße
Enrico
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.