Forum: Mikrocontroller und Digitale Elektronik 16 Bit Timer (beide Kanäle) - Interrupt


von Christian Z. (Gast)


Lesenswert?

Hallo Zusammen,

mit Hilfe der 2 Kanäle des 16 Bit Timers des ATMEGA644 möchte ich in 
bestimmten Zeitintervallen Interrupts auslösen. Dazu habe ich in beide 
OCR Register A und B jeweils einen anderen Vergleichswert geladen.
Der Interrupt des jeweiligen Kanals wird jeweils über OCIE1A/B 
aktiviert. Interrupts sind global natürlich aktiv.
Nun zu dem Problem: Interrupt für Kanal A fünktioniert aber wenn ich für 
den Kanal A die Interrupts deaktiviere und Kanal B aktiviere wird zwar 
ein Interrupt ausgelöst aber für den Vergleichswert der in OCR1A steht.

Hat irgendjemand eine Idee wo mein Fehler liegt? Danke im Voraus.

MfG Christian

von Johannes M. (johnny-m)


Lesenswert?

Wie stellst Du Dir das vor? Ich vermute mal, Du hast den Timer im 
CTC-Modus laufen. Dann wird er zurückgesetzt, wenn OCR1A erreicht ist. 
OCR1B wird dann nie erreicht. Auch wenn OCR1B kleiner ist als OCR1A, 
sind die Abstände zwischen den Interrupt-Ereignissen vermutlich nicht 
so, wie Du Dir das vorstellst, weil jeder Interrupt nur einmal pro 
Timerdurchlauf auftritt.

von Peter D. (peda)


Lesenswert?

Wenn Du 2 verschiedene Intervalle erreichen willst, mußt Du den Zähler 
frei durchlaufen lassen und in dem jeweiligen Interrupt die 
Intervalldauer zu OCR1A bzw. OCR1B addieren.


Peter

von Christian Z. (Gast)


Lesenswert?

@Johannes

CTC Mode ist richtig. Also wenn ich jetzt noch mal im Datenblatt 
nachschaue und dich richtig verstanden habe wird der Timer stets bei 
erreichen von OCR1A zurückgesetzt. Dann ist es mir klar. Mein OCR1B Wert 
war nämlich größer und ich Esel habe gedacht OCIE1A aktiv & OCIE1B 
inaktiv -> reset bei OCR1A und OCIE1B aktiv & OCIE1A inaktiv -> reset 
bei OCR1B.

@Peter

So werde ich das machen.



Besten Dank

von Johannes M. (johnny-m)


Lesenswert?

Aber denk dran: Der Timer muss dazu im Normal-Modus laufen (kein CTC und 
keine PWM)...

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.