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