Hallo Leute, ich habe da ein kleines Problem. Ich verwende den ATmega 2561. Nun möchte ich mit den drei 16-Bit Timern 1,3 und 4 drei verschiedene Zählvorgänge abarbeiten. Timer 1 soll bei einem externen Interrupt immer bis zu einem bestimmten Wert z.B. 3000 Takte zählen dann auf null gehen und anhalten und dann so lange warten bis wieder ein externer Interrupt kommt. Timer3 soll immer 1000 Takte zählen dann auf null gehen und anhalten bis ich ihn mittels einer anderen ISR wieder starte. Timer4 soll immer 13000 Takte zählen dann wieder auf null gehen und anhalten bis ich ihn in einer anderen ISR wieder starte. Könnt Ihr mir vielleicht sagen wie die Befehle für "starte jetzt" und "dann halt an"?? Kann ich das mit dem CTC-Modus irgendwie regeln?? MFG
Hi
>Kann ich das mit dem CTC-Modus irgendwie regeln??
Ja, geht aber auch ohne. OC-Register mit dem passenden Wert laden. Timer
durch setzen CSx2:0 starten und im OC-Interrupt wieder stoppen.
MfG Spess
Sky schrieb: > Timer 1 soll bei einem externen Interrupt immer bis zu einem bestimmten > Wert z.B. 3000 Takte zählen dann auf null gehen und anhalten und dann so > lange warten bis wieder ein externer Interrupt kommt. > Timer3 soll immer 1000 Takte zählen dann auf null gehen und anhalten bis > ich ihn mittels einer anderen ISR wieder starte. > Timer4 soll immer 13000 Takte zählen dann wieder auf null gehen und > anhalten bis ich ihn in einer anderen ISR wieder starte. Erzähl mal, was Du damit machen willst, dann geht das bestimmt deutlich einfacher. Z.B. einen Timer durchlaufen lassen und in den 3 externen Interrupts die 3 Compareregister laden. Peter
@Peter: Also hier habe ich es genau beschrieben. Beitrag "Hilfe bei der Programmierung vom ATmega 2561" MFG
Andere Frage: Wie kann ich im CTC_Modus das Auslösen der ISR zählen?? MFG
Vorweg: Dir fehlt schon ein bischen viel Wissen darüber, wie das alles so funktioniert. Dafür das das eine Studienarbeit sein soll http://www.mikrocontroller.net/articles/FAQ#Timer
Pseudocode: Init: Timer1 starten Delay für xyz Zyklen starten: Compare_Register1A = Timer1 + xyz Compare_Interrupt_Flag1A löschen Compare_Interrupt_1A freigeben Compare_Interrupt_1A: Compare_Interrupt_1A sperren mache Aktion usw. Peter
Danke für die Tipps. Eigentlich bezog sich meine Studienarbeit auch nur auf ein paar Hardwaretechnische Dinge und nicht das programmieren ;)
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.