Timer nicht konstant

Gast #1077136
Lesenswert?

Hallo,

ich habe hier ein vermutlich ganz einfaches Problem aber ich weiß 
einfach nicht wie ich es lösen soll:

Timer 1 löst alle 100us aus, in der ISR ist dann ein switch der 
Abwechselnd unterschiedliche Ding macht. Das Problem ist jetzt dass der 
Timer immer erst wieder weiter läuft wenn die ISR verlassen wird, obwohl 
ich die neuen Zählerwerte gleich zu beginn wieder schreibe:

ISR(TIMER1_OVF_vect)
{
  cli();
  TCNT1H = 0xff;
  TCNT1L = 0x12;
....
  sei();
}

Das Problem ist dadurch natürlich dass die Interrupts nicht konstant 
alle 100us ausgelöst werden sondern je nachdem wie viel es in dem 
speziellen Fall zu tun gibt dauert es immer etwas bis viel länger.

Wie kann man das denn beheben?

Vielen Dank schon mal
Lloyd
Gast #1077146
Lesenswert?

Hi

Für solche Zwecke gibt es den CTC-Modus. Der Vergleichswert wird in ein 
Comparerregister geladen. Beim Erreichen des Wertes wird ein Interrupt 
ausgelöst und der Timer wird automatisch wieder auf Null gesetzt. Du 
brauchst dich nur um deine eigentliche ISR kümmern.

MfG Spess

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