Hallo zusammen Ich bin Anfänger und habe noch das eine oder andere Problem mit dem R8C13 von Renesas. Ich bin am Bau einer Zündung für einen 2-Takter Den TimerC lasse ich immer laufen und messe die Zeit für 1 Umdrehung. Die Drehzahl kann ich somit schon messen Mit Output Compare will die die Zündung auslösen. Leider wird die Procedure "OutputCompare" jedesmal ausgelöst wenn der Wert erreicht wird. Was leider nicht immer nögtig ist. Wie kann man die Interruptroutine "Output Compare" von TimerC deaktivieren? Gruss Speeder
Willst du einfach den Interrupt deaktivieren? Dann setze die Priorität der TimerC Interrupts auf 0.
Oder du wahrscheinlich eher die Priorität des Compare-Interrupts.
Der TimerC sollte aber weiterlaufen da ich die Umdrehungszeit ständig messen muss. Wenn ich aber die Interruptpriorität auf Null setzte dann wird der Timer ja nicht mehr laufen. Ich probiere es mal anders zu erklären: Für ein Umdrehung läuft der TimerC mehrfach über. Es wird also gezählt wieviele Takte für einen Umdrehung benötigt wird. Für den benötigten Zündzeitpunkt benötige ich aber pro Umdrehung nur einmal eine Suslösung vom "Output Compare". Wenn aber jedes mal wenn der Timer läuft ein "Output Compare" ausglöst wird dann zündet es Pro Umdrehung mehrfach. Ich weiss im Moment nicht wie ich dies möglichst "sauber" in den Griff bekommen? Gruss Speeder
Ok, also der Timer läuft mehrmals über. Du zählst ja sicherlich mit, wie oft er überläuft. Damit erweiterst du quasi die 16 Bit des Timers um ein paar zusätslich Bits. Die Comparefunktion kann aber nur den Timerwert selbst vergleichen. Muss das Timing wirklich so genau sein, oder kannst du den Timer langsammer laufen lassen, so dass er nicht mehr über läuft. Ansonsten : Im TCOUT Reg kannst du den Pin deaktivieren. Dann könntest du den Pin per Software im Compate-Interrupt setzten. Ich muss eins sagen, mit dem R8C/13 habe ich noch nicht viel gearbeitet.
Hallo Martin <Du zählst ja sicherlich mit, wie oft er überläuft. Damit erweiterst du quasi die 16 Bit des Timers um ein paar zusätslich Bits.> Ja genau ich zähle den Überlauf jedesmal plus 65535. <Muss das Timing wirklich so genau sein, oder kannst du den Timer langsammer laufen lassen, so dass er nicht mehr über läuft.> Soviel ich weiss kann man den TimerC nicht längsamer laufen lassen da er keinen Prescaler hat Die anderen Timer besitzen allerdings so einen.. Auch möchte ich dies nicht da ich so eine höhere Genauigkeit habe. <Im TCOUT Reg kannst du den Pin deaktivieren. Dann könntest du den Pin per Software im Compate-Interrupt setzten.> Den Pin für den "Output Compare" verwendet ich eigentlich gar nicht. Ich verwende lediglich die Interrupt-Prodedure davon. Gruss Speeder
> Den Pin für den "Output Compare" verwendet ich eigentlich gar > nicht. Ich verwende lediglich die Interrupt-Prodedure davon. Um so besser. Wo ist noch das Problem? Du hast einen Compare-Interrupt und einen Zählerwert der sich aus der Anzahl der Timer C überläufe ergibt. Da hast du doch alles was du brauchst.
Ich habe jetzt in der Interruptroutine für "Output Compare" eine If-Anweisung reingehängt damit ich den Code darin nur ausführe wenn ich will. Aber ist dies wirklich sauber programmiert oder wäre es nicht besser den Interrupt irgendwie zu deaktivieren? Gruss Speeder
Wennst funktioniert ist es OK und sauber (in diesem Fall). Das mit Interrupt deaktivieren das wird eine Krückerei (siehe oben).
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.