Forum: Mikrocontroller und Digitale Elektronik TCNT1 bei Interrupt nicht zurücksetzen


von Dieter b.d. (Gast)


Lesenswert?

Hallo,

Ich nutze einen Atmega328p und habe am pin T1 (für Timer1) ein Signal 
anliegen.
Für OCR1A habe ich ein Wert hinterlegt. Wird dieser Wert erreicht, so 
wird ein Interrupt (TIMER1_COMPA_vect) ausgelöst. OCR1A wird darufhin 
ein neuer Wert zugewiesen. Also z.b. OCR1A = 25 --> Interrupt wird 
ausgelöst --> OCR1A = 50 --> Interrupt wird ausgelöst --> OCR1A = 102 
... usw
Mein Problem ist nun folgendes: Beim Interrupt wird auch gleichzeitig 
(automatisch) der Wert von TCNT1 auf 0 gesetzt. D.h. nach jedem 
Interrupt fängt mein Couter bei 0 an zu zählen. Er soll aber einfach 
weiter zählen und nicht auf 0 zurück gesetzt werden.

Gibt es in irgendeinem Register ein Flag, dass ich übersehen habe, dass 
mir oben genannte Funktion ermöglicht? Kurz gesagt: Bei Auslösen des 
Interrupts für das Erreichen des OCR1A Wertes soll TCNT1 nicht auf 0 
gesetzt werden.
Ich habe dies nicht gefunden (übersehen??), trotz mehrfachem durchlesen 
des entsprechenden Kapitels im Datenblatt zu o.g. Mikrocontroller.

Viele Grüße
Dieter B.D.

von Cyblord -. (cyblord)


Lesenswert?

Der Timer wird nur im CTC Modus automatisch zurückgesetzt. Du musst 
diese Modus aktiviert haben. Der Mode wird u.a. durch die WGM Register 
definiert.

von Peter D. (peda)


Lesenswert?

Table 15-4. Waveform Generation Mode Bit Description

CTC ist da, wo CTC drin steht (Mode 4 und 12).

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.