Timer0 und OCR0B mit Atmega324

Gast #1772717
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
#1772760
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren