sachse
26.05.2005, 15:33
Hallo liebe Profis O:)
Ich habe hier ein Prog für eine Zündung. Will bemerken es ist mein erstes Prog.
Wer Lust hat und vor allem Zeit könnte sich das mal durchlesen um einen Neuling kräftig die Meinung zu sagen oder auch nicht :-)
Folgendes sollte jetzt laufen.
Int0 und Int1 werden per Interrupt erfasst und an die Asugänge Portb.0 und Portb.1 ausgegeben.
Der Pegel fällt auf Low.
Eine Zeit von 1ms soll der Pegel so gehalten werden.
Danach soll der Pegel vieder auf High
Wenn die Anzahl der Takte vom INT0 über einen sollwert ansteigt , soll Portb.2 angehen.
$regfile = "m8def.dat"
$crystal = 10000000
$baud = 9600
Config Portb = Output
Portb = &B00000000
Config Portc = Output
Portc = &B00000000
Config Portd = Input
Portd.2 = 1
Portd.3 = 1
Portd.5 = 1
Dim A As Integer
Dim B As Long
Dim Testzeit As Integer
Dim Testanzahl As Integer
Enable Interrupts
On Int0 Links
On Int1 Rechts
On Timer1 Ontimer1
Config Timer1 = Timer , Prescale = 1024
Enable Timer1
'Testrotine der Ausg�ge
Testzeit = 30
Portb.2. = 1
While A <= 4
A = A + 1
Print 0;
Waitms Testzeit
Portb.0 = 1
Portb.1 = 1
Waitms Testzeit
Portb.0 = 0
Portb.1 = 0
Wend
Print "Testrotine abgelaufen,"
'Spulen auf an
Print ",Spulen an,"
Portb.0. = 1
Portb.1. = 1
Waitms 300
Portb.2. = 0
A = 0
B = 0
Do
Enable Int0
Enable Int1
Portb.0. = 1
Portb.1. = 1
Loop
Ontimer1:
Portb.2 = 0
Print A;
B = A /3600
Print B
Timer1 = 5687
If A > 1000 Then
Portb.2 = 1
Print "DB"
End If
A = 0
Return
Links:
A = A + 1
Disable Int0
Portb.0. = 0
Print "L"
Waitms 1
Return
Rechts:
Disable Int1
Portb.1. = 0
Print "R"
Waitms 1
Return
Wenn mir noch mal einer erklären könnte wie ich den besten Prescale-Faktor ermittle und auf was ich Timer1 = XXXX setzte und warum wäre ich ihm auserordentlich dankbar :-)
Das ganze funzt auf meinem myAVR-Board. Nun müsste ich noch meine Kurve einbasteln (anderer Beitrag ,was aber funktionieren sollte)
Danke erst mal vorweg =D>
Ich habe hier ein Prog für eine Zündung. Will bemerken es ist mein erstes Prog.
Wer Lust hat und vor allem Zeit könnte sich das mal durchlesen um einen Neuling kräftig die Meinung zu sagen oder auch nicht :-)
Folgendes sollte jetzt laufen.
Int0 und Int1 werden per Interrupt erfasst und an die Asugänge Portb.0 und Portb.1 ausgegeben.
Der Pegel fällt auf Low.
Eine Zeit von 1ms soll der Pegel so gehalten werden.
Danach soll der Pegel vieder auf High
Wenn die Anzahl der Takte vom INT0 über einen sollwert ansteigt , soll Portb.2 angehen.
$regfile = "m8def.dat"
$crystal = 10000000
$baud = 9600
Config Portb = Output
Portb = &B00000000
Config Portc = Output
Portc = &B00000000
Config Portd = Input
Portd.2 = 1
Portd.3 = 1
Portd.5 = 1
Dim A As Integer
Dim B As Long
Dim Testzeit As Integer
Dim Testanzahl As Integer
Enable Interrupts
On Int0 Links
On Int1 Rechts
On Timer1 Ontimer1
Config Timer1 = Timer , Prescale = 1024
Enable Timer1
'Testrotine der Ausg�ge
Testzeit = 30
Portb.2. = 1
While A <= 4
A = A + 1
Print 0;
Waitms Testzeit
Portb.0 = 1
Portb.1 = 1
Waitms Testzeit
Portb.0 = 0
Portb.1 = 0
Wend
Print "Testrotine abgelaufen,"
'Spulen auf an
Print ",Spulen an,"
Portb.0. = 1
Portb.1. = 1
Waitms 300
Portb.2. = 0
A = 0
B = 0
Do
Enable Int0
Enable Int1
Portb.0. = 1
Portb.1. = 1
Loop
Ontimer1:
Portb.2 = 0
Print A;
B = A /3600
Print B
Timer1 = 5687
If A > 1000 Then
Portb.2 = 1
Print "DB"
End If
A = 0
Return
Links:
A = A + 1
Disable Int0
Portb.0. = 0
Print "L"
Waitms 1
Return
Rechts:
Disable Int1
Portb.1. = 0
Print "R"
Waitms 1
Return
Wenn mir noch mal einer erklären könnte wie ich den besten Prescale-Faktor ermittle und auf was ich Timer1 = XXXX setzte und warum wäre ich ihm auserordentlich dankbar :-)
Das ganze funzt auf meinem myAVR-Board. Nun müsste ich noch meine Kurve einbasteln (anderer Beitrag ,was aber funktionieren sollte)
Danke erst mal vorweg =D>