Preload Wert richtig berechnet?

Gast #1560909
Lesenswert?

Hallo,

könnte mir jemand nur kurz bestätigen, ob ich richtig mit meiner Annahme 
liege? Ich möchte 5 Sekunden messen.
Prozessor ist ein Atmega 8 auf 8Mhz
Verwendung 8-bit Timer
Prescaler: 8 --> 1000000 Ticks für 1 Sekunde, 1000 Ticks für 1ms

Der 8-bit Timer zählt von 0...255 (also 256 Schritte).
Für 1ms brauche ich also 4 overflows (1000/256=3,90625). Um den genauen 
Wert zu bestimmen rechne ich also mit 4 overflows --> 1024 Ticks. Sind 
24 Ticks zu viel bei 4 Overflows.
Also verteile ich die 24 Ticks auf 4 Overflow und müsste demnach den 
Timer mit 24/4=6 vorladen.
Ist das so richtig?
Dann hätte ich 1ms
über eine if-Anweisung kann ich ja dann mir die Sekunden zählen lassen:

ISR()
ms_counter++
if (ms_counter >= 1000)
sekunde++

//Hauptprogramm
main()
if (sekunde==5)
//do sth

Funktioniert das so?

Danke&Gruß
Christian
#1562270
Lesenswert?

Marc Donner schrieb:

> Warum nicht gleich den Timer1? CTC Mode und Interrupt bei OCR1A. OCR1A
> auf 1000.

Wenns eine länger laufende Uhr werden soll, dann ist das sowieso die 
bessere Lösung.
Allerdings dann gleich den Vorteiler auf 1 und OCR1A auf 8000.

Grund: Der Quarz läuft nicht mit exakt 8000000Hz sonder ein bischen 
daneben. Läuft eine Uhr länger, dann summiert sich das.
Mit dem CTC Modus kannst du das aber im Extremfall bis aufs Hz genau 
ausgleichen.
http://www.mikrocontroller.net/articles/AVR_-_Die_genaue_Sekunde_/_RTC

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