jojo3
12.05.2006, 12:19
Hallo!
Ich bastle an einem Programm um DCC-Daten an meine Modellbahn
zu schicken. Klappt auch soweit, nur ist mir etwas mit dem Timer-Interrupt nicht klar. Wenn ich in meinem Programm die for-next-Schleife
auf z.b 64 ändere, stimmt das Timing für das DCC nicht mehr,
sollte doch aber wegen des Interupts unabhängig sein oder ?
In den DO_Loop-Schleifen warte ich jeweils auf den Nächsten Interrupt.
Vielleicht weis jemand was ..
For Adresse = 1 To 128
T = Dcc_h
If Fkt(adresse) <> 0 Then
For X = 1 To 12 'PREAMBLE
Hw = 0
T = Dcc_h
Do : Nop : Loop Until Hw = 2
Next X
Hw = 0 'PACKET
T = Dcc_l
Do : Nop : Loop Until Hw = 2
For X = 7 To 0 Step -1 'ADRESSE
Hw = 0
If Adresse.x = 1 Then T = Dcc_h Else T = Dcc_l
Do : Nop : Loop Until Hw = 2
Next X
Hw = 0 'PACKET
T = Dcc_l
Do : Nop : Loop Until Hw = 2
For X = 7 To 0 Step -1 'DATEN
Hw = 0
If Fkt(adresse).x = 1 Then T = Dcc_h Else T = Dcc_l
Do : Nop : Loop Until Hw = 2
Next X
Hw = 0 'PACKET
T = Dcc_l
Do : Nop : Loop Until Hw = 2
Check = Adresse Xor Fkt(adresse)
For X = 7 To 0 Step -1 'ERR_CHECK
Hw = 0
If Check.x = 1 Then T = Dcc_h Else T = Dcc_l
Do : Nop : Loop Until Hw = 2
Next X
Hw = 0 'PACKET END
T = Dcc_h
Do : Nop : Loop Until Hw = 2
End If
Next Adresse
Loop
Tim0_isr:
Tcnt0 = T
Incr Hw
Toggle Dcc_a : Toggle Dcc_b
Return
Ich bastle an einem Programm um DCC-Daten an meine Modellbahn
zu schicken. Klappt auch soweit, nur ist mir etwas mit dem Timer-Interrupt nicht klar. Wenn ich in meinem Programm die for-next-Schleife
auf z.b 64 ändere, stimmt das Timing für das DCC nicht mehr,
sollte doch aber wegen des Interupts unabhängig sein oder ?
In den DO_Loop-Schleifen warte ich jeweils auf den Nächsten Interrupt.
Vielleicht weis jemand was ..
For Adresse = 1 To 128
T = Dcc_h
If Fkt(adresse) <> 0 Then
For X = 1 To 12 'PREAMBLE
Hw = 0
T = Dcc_h
Do : Nop : Loop Until Hw = 2
Next X
Hw = 0 'PACKET
T = Dcc_l
Do : Nop : Loop Until Hw = 2
For X = 7 To 0 Step -1 'ADRESSE
Hw = 0
If Adresse.x = 1 Then T = Dcc_h Else T = Dcc_l
Do : Nop : Loop Until Hw = 2
Next X
Hw = 0 'PACKET
T = Dcc_l
Do : Nop : Loop Until Hw = 2
For X = 7 To 0 Step -1 'DATEN
Hw = 0
If Fkt(adresse).x = 1 Then T = Dcc_h Else T = Dcc_l
Do : Nop : Loop Until Hw = 2
Next X
Hw = 0 'PACKET
T = Dcc_l
Do : Nop : Loop Until Hw = 2
Check = Adresse Xor Fkt(adresse)
For X = 7 To 0 Step -1 'ERR_CHECK
Hw = 0
If Check.x = 1 Then T = Dcc_h Else T = Dcc_l
Do : Nop : Loop Until Hw = 2
Next X
Hw = 0 'PACKET END
T = Dcc_h
Do : Nop : Loop Until Hw = 2
End If
Next Adresse
Loop
Tim0_isr:
Tcnt0 = T
Incr Hw
Toggle Dcc_a : Toggle Dcc_b
Return