Timer nicht konstant

Gast #1077136
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
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
Gast #1077178
Ok cli und sei habe ich raus genommen, habe aber noch den selben Effekt.

Passiert im CTC Modus nicht genau das selbe und es wird erst 
weitergezählt wenn ich die ISR verlasse?
Gast #1077180
Kann es sein, das die Abarbeitung deiner Interruptroutine länger als 
100us dauert?

Kannst es ja in der Art prüfen:

if (TIFR & (1 << OCF1A))
{
  puts("TIMER OVERFLOW\n");
}

(Bit anpassen)
Gast #1077186
Hi

>Passiert im CTC Modus nicht genau das selbe und es wird erst
>weitergezählt wenn ich die ISR verlasse?

Nein. Der Zähler läuft sofort weiter.

MfG Spess

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.