Hallo, ich will mir einen Drehzahlmesser für mein Auto bauen. Also ich hab mir das so vorgestellt: Sobald eine Zündung erfolgt wird per Interrupt der Timer ausgelöst und beginnt zu zählen. Kommt wieder eine Zündung stopt der Timer und der µC kann dann die Drehzahl ausrechnen und auf einem Display ausgeben. Aber jetzt kommt der schwierigere Teil: Die Rechnung! Von Zündzeitpunkt zu Zündzeitpunkt bedeutet eine Umdrehung. Der Timer erfasst die Zeitzyklen die der Motor für eine Umdrehung braucht. Demnach komme ich auf diese Formel wenn ich das Ergebnis in 1/min haben will. 60/[Zyklen*(1/CPU Takt/1024)] Der Term in der () entspricht dem Prescaler der auf 1/1024 eingestellt ist. Wie führe ich diese Rechnung aus? Es handelt sich dabei um einen 16Bit Timer. Wie kann ich ein Registerpaar (16Bit) mit einer Zahl multiplizieren oder dividieren? Ich programmiere in Assembler!
Solange wie man durch 2,4,8,16,32,64,128...... teilen oder mul. will ist das einfach rotation des 16 bit wortes nach rechts oder links. und für den rest eine schleife mit einer addition (dauert ewig)also es gibt einige lösungen einfach mal ein bisschen rechnen :-) mfg uli
Zwei Anmerkungen:
(1/CPU Takt/1024) ist konstant und kann schon jetzt von dir
ausgerechnet werden - muß also nicht dauernd zur Laufzeit geschehen.
> einfach rotation des 16 bit wortes nach rechts oder links
muß heissen: schieben (und nicht Rotation)!
----, (QuadDash).
>Von Zündzeitpunkt zu Zündzeitpunkt bedeutet eine Umdrehung.
... Stimmt beim Otto-(4-Takt-)Motor nicht ganz: Von Zündung zu Zündung
sinds zwei Umdrehungen :)
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.