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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.