Hallo,
danke erstmal für die schnelle erste Antwort!
Mal noch zur näheren Erläuterung meiner Studienarbeit (an der FH Zwickau, wen´s interessiert):
Wie schon geschrieben möchte ich eine einfache Einspritzanlage konzipieren. Das ganze soll dann mal in einem Trabant auf Funktion getestet werden.
Das ganze System ist insoweit recht einfach, da man als Minimum für die Anlage nur die Luftmasse, die der Motor gerade ansaugt, und die Drehzahl (Zündimpulsabstand) braucht.
Das Signal von einem Luftmassenmesser hole ich mir über ADC(0) rein und führe dann meine nötigen Berechnungen zur Ermittlung der Einspritzzeitdauer im Hauptprogramm durch.
Die vielen Fließkommazahlen ergeben sich durch die Kennlinie meines Luftmassenmessers. Diesen habe ich am Prüftsand mit einem Labormessgerät abgeglichen und die Werte im Excel mit einem Regressionpolynom 6. Grades zusammengefasst (der Genauigkeit wegen).
In meiner Berechnung wird dann ein aktueller Comparewert ermittelt, der dann bei einem Zündimpuls eingesetzt wird (Compare1a = C).
Bei 8 MHz Takt würde ich für die Berechnungen laut Simulator nicht mal eine ms benötigen.
Zeit spielt bis jetzt auch noch keine Rolle, da ich zwischen 2 Zündimpulsen >6ms habe (bei 4500 1/min, 2 Zündimpulse je Umdrehung)
jetzt zu meinen Fragen:
zu 1)
verstehe ich nicht ganz; habe doch Timer1 so konfiguriert:
Config Timer1 = Timer , Prescale = 8 , Compare A = Clear
ich dachte compare = clear bedeutet, dass bei Erreichen des Comparewertes der Port OC1A ausgeschaltet wird, oder?
2) bis 5) geht klar
zu 6)
habe folgenden Code einfach mal probiert:
Code:
$regfile = "m88def.dat"
$crystal = 8000000
Config Timer1 = Timer , Prescale = 1
Enable Interrupts
Enable Timer1
On Timer1 Zeit
Hauptprogramm:
Do
Print Timer1
Loop
End
Zeit:
Ddrb.1 = 1
Portb.1 = 1
Print "test"
Return
Simulator springt in die Interruptschleife und bringt mir "test", LED bleibt aber aus, andere Ports gehn auch nicht...?
Nochmal zu Prescale: wenn ich 8 MHz und Prescale 8 habe zählt er alle 1 µs einen hoch, genau; ich hatte mir notiert, dass aller 8 Takte eins hochgezählt wird, sind dann ja auch 1 µs
Wegen der Zündung:
Beim Trabant 2 Takter wird die Zündung über einen Hall-Sensor gesteuert. Eine halbe Umdrehung 0V, andere halbe Umdrehung +10....11V am Signalkabel gegen Masse; bei jedem Wechsel gibts dann einen Zündfunken.
Diese Sprünge möchte ich nun für meine Einspritzung abgreifen, so dass mir "change" am einfachsten erschien.
Hoffe ich konnte euch meine Idee ein wenig näher bringen und meinen Code verständlich machen, in der Hoffnung, dass wir ihn zum laufen bekommen.
Also, alle Meinungen bitte posten
Danke!
Robert :-)
Lesezeichen