Forum: Compiler & IDEs ATTiny13 Interrupt Compare Match


von Hendrik L. (lbd)


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

von Timmo H. (masterfx)


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.

von Hendrik L. (lbd)


Lesenswert?

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
Noch kein Account? Hier anmelden.