Forum: Mikrocontroller und Digitale Elektronik 16-BitTimer1,3,4 (ATmega 2561) zu einem bestimmten Moment starten und stoppen


von Sky (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Sky (Gast)


Lesenswert?

@Peter:
Also hier habe ich es genau beschrieben.
Beitrag "Hilfe bei der Programmierung vom ATmega 2561"
MFG

von Sky (Gast)


Lesenswert?

Andere Frage:
Wie kann ich im CTC_Modus das Auslösen der ISR zählen??
MFG

von Karl H. (kbuchegg)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Sky (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.