Forum: Mikrocontroller und Digitale Elektronik Preload Wert richtig berechnet?


von Christian (Gast)


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

von Marc D. (cosinus)


Lesenswert?

Jupp das klingt korrekt. preload 6 heisst overflow bei 256 - 6 = 250 
ticks. 250 * 4 = 1000.
Warum nicht gleich den Timer1? CTC Mode und Interrupt bei OCR1A. OCR1A 
auf 1000.

Gruss
Marc

von Karl H. (kbuchegg)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.