Timer-Zyklus stimmt nicht

Gast #1681653
Hallo,

ich nutze das XPLAIN-Evalboard mit dem Atmega128A1 und beschäftige mich 
grade mit dem Timer/Counter.

Ich möchte die LEDs mit einer konstanten Frequenz von 0,5 Hz toggeln.

Wenn ich die Blinkfrequenz mit dem Sekundenzeiger meiner Uhr vergleiche, 
blinken die LEDs nur ein zweimal synchron mit der Uhr und laufen dann 
schneller, bis sie irgendwann wieder "aufsynchronisiert" sind. Ist das 
einfach eine Toleranz die man akzeptieren muss oder mache ich einen 
Fehler?

Ich nutze den Timer-Treiber aus der entsprechenden AppNote von Atmel:

  /* Set period/TOP value. */
  TC_SetPeriod( &TCC0, 31249 );
  /* Interrupt on */
  TC0_SetOverflowIntLevel( &TCC0, TC_OVFINTLVL_LO_gc);
  PMIC.CTRL = PMIC_LOLVLEN_bm;
  sei();
  /* Select clock source. */
  TC0_ConfigClockSource( &TCC0, TC_CLKSEL_DIV64_gc );

Es wird also eine Periode gesetzt, die Interrupts gestartet und ein 
Divider von 64 festgelegt. Die Systemclock ist der interne 
2MHz-Oszillator.

Den Wert von SetPeriod habe ich folgendermaßen berechnet:

Period = (CLKsys/(2*DIV*0,5)) - 1

ergibt

(2000000/(2*64*0,5)) -1 = 31249

Meine ISR für den Overflow sieht folgendermaßen aus:

ISR(TCC0_OVF_vect)
{
  PORTE.OUT ^= 0xFF;
}

Danke schonmal.
..."der interne 2MHz Oszillator" ist wohl ein RC-Oszillator?
Dann brauchst Du Dich über Ungenauigkeiten (die auch noch von 
Betriebsspannung und Temperatur abhängig sind) nicht zu wundern.

Schalte doch mal den Quarz an - beim Xmega geht das unter 
Programmkontrolle und nicht mehr über Fuses.

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.