ATTiny13 Interrupt Compare Match

OP #2208135
Lesenswert?

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
#2208160
Lesenswert?

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.

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