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
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
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.
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.