10 ms Interrupt mit 8bit Timer

Gast #2718971
Hallo Leute,

ich möchte mit dem 8bit Timer jeweils einen Interrupt nach 10 ms 
erzeugen.
Als µC verwende ich den AtMega644p mit 14.745600 MHz Quarz.

Ich muss den TCNT0 mit einem bestimmten Wert vorladen.

Folgende Rechnung habe ich gemacht : 14745600 / (1024 * 144) = 100
Das heißt, dass ich einen 1024 Prescaller und eine Zähldauer von 144 
Takten brauche.

Somit muss ich doch das TCNT0 Register auf ( 256-144)-1 = 111 vorladen, 
oder?


Wenn ich mir aber im Entprell-Artikel 
(http://www.mikrocontroller.net/articles/Entprellung) die Formel TCNT0 = 
(uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5);  // preload for 10ms

anschaue, dann erhalte ich für TCNT0 = 112 und nicht 111, wie ich es bei 
meiner Rechnung erhalten habe.
Gast
Ich habe jetzt versucht den CTC Modus zum Laufen zu bekommen.

Laut der Formel im atmega644p Datenblatt müsste ich OCR0A = 71 stellen.
Leider geht meine Uhrzeit, die mit dem 10 ms Interrupt gesteuert wird, 
viel zu schnell ( doppelt so schnell wie nötig).

Woran kann das liegen?

Jetzt habe ich die Formel :  f =  Xtal / (2*1024 *(1+OCR0A )) abgeändert 
auf

f =  Xtal / (1024 *(1+OCR0A ))

und erhalte OCR0A = 143 ;

Damit geht die Uhrzeit jetzt sehr genau.

Stimmt die Formel aus dem Datenblatt nicht?



ISR(TIMER0_COMPA_vect)             // Timer0 Compare Interrupt, 8bit, 
10ms
{
  Zeit++;

}

  TCCR0A = (1<<WGM01);          //CTC Mode
  TCCR0B = (1<<CS02)|(1<<CS00);         // divide by 1024
    OCR0A = 143 ;            // preload for 10ms
    TIMSK0 |= (1<<OCIE0A);                // enable timer interrupt

Antwort schreiben

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