Servus, ich will ja keine Frequenzen messen, ich baue damit eine Zündung.
Das gibt es selbstverständlich alles von der Stange, aber wo bleibt da der drang Wissen zu erwerben ![]()
in LunaAvr (www.myluna.de) habe ich den Timer so konfiguriert. und möchte das in die Arduino IDE übertragen. Da ich sowas nur sporadisch mache ist mir Arduino lieber, da findet man eher Lösungen bei Fragen, ausser halt bei den Timern, da bin ich bis jetzt gescheitert, und versuche mir halt jetzt den Code zusammen zu suchen ![]()
' Timer einstellen
'-------------------------------------------------------
timer1.isr = SIG_OVERFLOW ' Serviceroutine zuweisen
timer1.clock = Prescaler ' Prescaler einstellen
timer1.enable ' Timer1 einschalten
timer1.capt.clock = rising ' Timer1 triggern einschalten,auf steigende Flanke
timer1.capt.isr = SIG_Hallgeber ' Capture-Serviceroutine zuweisen, Signal vom Hallgeber
timer1.capt.denoise.enable ' Capture-Rauschunterdrückung einschalten
timer1.capt.enable ' Capture aktivieren
timer1.cmpa.isr = Zuendspule_EIN ' Service-Routine für Endstufe EIN
timer1.cmpb.isr = Zuenden_Spule_AUS ' Service-Routine für Endstufe AUS (Zünden)
'----------------------------------------------------------
'---------------------------------------------------------
'##############################################################################
' Timer Overflow
'##############################################################################
isr SIG_OVERFLOW fastauto
Zaeler_standabschaltung = Zaeler_standabschaltung + 1
ticks = 0
rpm = 0
rpm_old_0 = 0
rpm_old_1 = 0
rpm_old_2 = 0
Unterdruckdose = 0
' Timer-Compares abschalten
timer1.cmpa.disable
timer1.cmpb.disable
If Zaeler_standabschaltung > standabschaltung Then
Zuendspule = 0 ' Zündspule AUS (Zünden)
Zuendspule1 = 0 ' Zündspule AUS (Zünden)
end if
endisr
Signal vom Hallgeber auswerten
'##############################################################################
' Signal Hallgeber / Timer auswerten
'##############################################################################
isr SIG_Hallgeber fastauto
Zaeler_standabschaltung = 0
Zuendspule = 0 ' Zündspule AUS (Zünden)
Zuendspule1 = 0 ' Zündspule AUS (Zünden)
ticks = Timer1.capt.Value 'Capture-Zählerwert des Timers auslesen
Timer1.Value=0 'Zählerwert des Timers auf 0 setzen
toggle LedSignal ' Signal-LED togglen
tick_Grad = FIX (ticks/360) ' In Abhängigkeit der Drehzahl die Ticks je Grad
if rpm > minrpm_zzp then
call schnelle_Mittelwertbildung() ' schnelle Berechnung ;-)
else
call genauere_Mittelwertbildung() ' bei niedrigerer Drehzah bessere Mittelwertbildung, das wirkt sich beim ankicken und bei niedriger Leerlaufdrehzahl positiv aus
endif
call Zyndzeitpunkt_errechnen() ' Anspringen der Subroutine
timer1.cmpa.value = ticks_zsw ' ersten Vergleichswert laden Zündstufe EIN
timer1.cmpb.value = ticks_zzp ' zweiten Vergleichswert laden Zündstufe AUS (Zünden)
' Timer-Compares aktiviren falls deaktiviert
timer1.cmpa.enable
timer1.cmpb.enable
endif
endisr
Zündspule ein oder aus
'##############################################################################
'Laden der Zündspule
'##############################################################################
isr Zuendspule_EIN fastauto
' Prüfen ob plausibler Compare-Vergleich, beim Setzen von verschiedenen Werten
' können Zwischeninterrupts ausgelöst werden. Wir prüfen daher ob der Zählerstand
' Zündungsrelevant plausibel ist.
if Timer1.Value>100 then
Zuendspule = 1 ' Zündspule EIN
Zuendspule1 = 1 ' Zündspule EIN
'LedZZP = 0 ' Kontrollanzeige
end if
endisr
'##############################################################################
' Zündfunke Zündendstufe
'##############################################################################
isr Zuenden_Spule_AUS fastauto
' Prüfen ob plausibler Compare-Vergleich, beim Setzen von verschiedenen Werten
' können Zwischeninterrupts ausgelöst werden. Wir prüfen daher ob der Zählerstand
' Zündungsrelevant plausibel ist.
if Timer1.Value>100 then
Zuendspule = 0 ' Zündspule AUS (Zünden)
Zuendspule1 = 0 ' Zündspule AUS (Zünden)
'LedZZP = 1 ' Kontrollanzeige
end if
endisr