AVR-Timer, Timing falsch

OP #1649136
Lesenswert?
• ▲
▼
Grüezi,

ich habe mir kürzlich hier aus dem Forum folgenden Code "geklaut" und 
eine Testschaltung (Mega128, 16MHz) aufgebaut.
Der Timerinterrupt soll alle 1ms aufgerufen werden, und die LED im 
1s-Rhytmus blinken (also 1s an, 1s aus).

Tut sie aber nicht, erst wenn ich liveled bis 4000 laufen lasse, dann 
kommt das hin.

Wo liegt der Fehler ? Die Fuses stehen auf externem Takt..........





#include <avr/io.h>
#include <avr/interrupt.h>

volatile uint16_t liveled=0;


int main()
{

  DDRG = 0xff;

  // CTC-Mode einstellen
  TCCR0 =0;
  TCCR0 |= (1<<WGM21) | (0<<WGM20);

  // Prescaler einstellen 64
  TCCR0 |= (1<<CS20) | (1<<CS21) | (0<<CS22);

  // CTC-Vergleichswert
  OCR0 = 250-1;

  // Compare-Interrupt aktivieren
  TIMSK |= (1<<OCIE0);
  // Hilfszaehler loeschen
  liveled = 0;
  sei();

  while (1)
  {

    // LiveLED steuern
    if (liveled > 1000)
    {
      liveled = 0;
      PORTG ^= (1<<PG4);
    }
  }
  return 1;
}

/////////////////////////////////////////////////////////////////
//
//
/////////////////////////////////////////////////////////////////
ISR(TIMER0_COMP_vect)
{
  liveled++;
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.