Hallo zusammen, versuche (mittlerweile etwas verzweifelt) zwei Interrupts in meinem ATTiny13 einzustellen. Das klappt auch. Allerdings wäre mein Verständnis, dass ich mit OCR0A und OCR0B völlig unabhängige Interrupt Timings einstellen kann. Offensichtlich ist das nicht so, irgendwie beeinflussen sich die Werte, letzendlich werden beide Interrups immer massgeblich durch OCR0A beeinflusst- während OCR0B sekundär einwirkt. Hier mein Code: --------------------------------------- int main (void) // in ATTiny13 { TCCR0A|= (1<<WGM01); TCNT0 = 0; // evtl. unnötig ? TIMSK0 |= (1 << TOIE0) ; TIMSK0 |= (1 << OCIE0A); TIMSK0 |= (1 << OCIE0B); OCR0A = 8; OCR0B = 254; sei(); for(;;) { .... } } ISR( TIM0_COMPA_vect ) { ... } ISR( TIM0_COMPB_vect ) { ... } ------------------------------ Wie gesagt,die Interrupts funktionieren, allerdings nicht unabhängig voneinander. Wo ist mein Verständnisproblem ? Danke im voraus
Die Register OCR0A und OCR0B gehören bei zu Timer0. Beide liegen also dem gleichen "Takt" zugrunde. OCR0A wird jedoch eher erreicht als OCR0B und da du den Timer im CTC mode (Clear Timer on Compare Match) betreibst (da WGM01=1) setzt OCR0A beim erreichen von "8" den Timer wieder auf 0 zurück sodass und OCR0B=254 nie eintritt. Vermutlich wäre ein anderer Mode passender Fast PWM oder so.
Danke, alles klar- also brauche ich zwei Timer, um unabhängig zu werden ...! Geht also mit einem ATTiny13 nicht.
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.