Forum: Mikrocontroller und Digitale Elektronik Timer0 und OCR0B mit Atmega324


von Matthias (Gast)


Lesenswert?

Hallo,

Habe folgendes Problem mit dem Timer0. Ich möchte 2 Interruptroutinen 
mit Timer0 aufrufen. Die eine schneller mit 50µs die andere mit 100µs. 
Dazu lade ich unterschiedliche Werte für OCR0A und OCR0B. Init:
TCCR0A = (1<<WGM01); // kein Output, keine Waveform, clear TCNT0 bei 
compare match
TCCR0B = (1<<CS01);  // 12Mhz/8=1,5MHz  -> 0,666667µs
TCNT0 = 0;    // Zähler zurücksetzen
OCR0A = 150;  // Wert für Output Compare A Interrupt. Auslösen des 
Interrupts alle 150*0,66667µs=100µs
OCR0B = 75;    // Wert für Output Compare B Interrupt 
75*6,66667µs=50µs
TIMSK0 = (1<<OCIE0A) | (1<<OCIE0B);   // Output Compare Match A/B 
Interrupt Enable

Das Problem ist, dass beide Iterrupte zur gleichen Zeit aufgrufen 
werden. Und zwar für OCROA alle 100µs. Aber wieso????

vielleicht wisst ihr ja was
Gruß Matthias

von Oliver (Gast)


Lesenswert?

Matthias schrieb:
> Das Problem ist, dass beide Iterrupte zur gleichen Zeit aufgrufen
> werden. Und zwar für OCROA alle 100µs. Aber wieso????

Woran siehst du das?

Oliver

von Hc Z. (mizch)


Lesenswert?

IM CTC-Modus wird der Timer bei OCR0A rückgesetzt.  Das bestimmt Deine 
Periode.  (Es kann ja nicht klappen, dass der Timer gleichzeitig mit 2 
verschiedenen Perioden läuft.)

Du bekommst also zwei Interrupts mit derselben Periode, der eine (OCR0B) 
kommt um den Count 50 versetzt gegenüber dem anderen.

von Matthias (Gast)


Lesenswert?

Hi Hc Zimmerer

Ach so ja klar, danke Dir.

Gruß Matthias

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.