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.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.