Forum: Mikrocontroller und Digitale Elektronik Timer Berechnung "nur der Form halber"


von Sven W. (sickone4)


Lesenswert?

Hallo Leute,

ich hab mich gerade damit beschäftigt mir mit meinem Atmega 8 (clk 
3,6864MHz)
den Timer0 auf 1ms einzurichten.

Alsom habe ich mich ein bisschen im Internet belesen und habe auch die 
Ergebnisse mehrerer Programme verglichen.

Folgende Lösung habe ich nun gefunden:

Gewünschte Zeit: 0.001 s = 1ms
Rechnerich am nächsten gelegen: 0.0010069444444444444 s
Verwendeter prescaler: 64
Verwendeter preload: 198


ok schön und gut. nun weiß ich wie ich ihn einstellen muss. Aber mich 
stört schon ein wenig einfach alles "vorgekaut" zu bekommen.

Also hab ich die Formel aus dem gcc die ich gefunden habe genommen und 
mal nachgerechnet.

(2^8bit * 64) / ( 3,6864MHz * 1000) = 4,444444ms

aber nicht 1 ms!
Und den Wert von 198 für TCNT0 habe ich nicht wirklich begriffen.
Ok ich "kürze" den Timer etwas ab, sodass der Zählwert wohl anders ist, 
aber gibts dafür auch eine Formel, dass ich das auch mal verstehe, 
anstatt es abzukäsen? Gefunden habe ich diese nämlich nicht.

Danke für eure Hilfe!
Sven

von Rumpel & Stilz (Gast)


Lesenswert?

Naja. Der Zaehler zaehlt von 198 bis 256, und wird dann neu mit 198 
geladen...

von Joe S. (bubblejoe)


Lesenswert?

Lies dich in den CTC Modus ein, mit Preload ist eigtl immer Gemurkse.

von Sven W. (sickone4)


Lesenswert?

schon klar, aber woher weiß das programm, was mit den wert gab, dass 
dieser 198 sein muss. ich möchts einfach verstehen.

schließlicht sind 4,44ms nicht 1ms!

ich hab gerade mal nachgerechnet. wnen mit einem prescaler und einer 
auflösung von 8bit 4,44ms rauskommt bei 256 zählschritten dann kann ich 
das durch 4,44 teilen und erhalte so 1ms!

dann muss ich wohl dem zähler einen wert von 3,44ms vorgeben, 
umgerechnet in zählschritte -> 198

von Sven W. (sickone4)


Lesenswert?

beim Timer0 gibts kein CTC.
beim Timer1 wäre das dann äquivalent 3686 am OCR1A ohne Vorteiler.

Aber den Timer brauche ich noch woanders :D

von Ralf G. (ralg)


Lesenswert?

Nochmal ganz einfach:
3686400 / 64 = 57600
Jetzt zählt der Timer nicht mit 3,6864Mhz sondern mit 57,6kHz um eine 
Stelle weiter. 1kHz willst du erreichen. Also musst du 57,6 Schritte 
zählen. Deshalb fängt man bei 0 - 58 = 198 an zu zählen.

von Sven W. (sickone4)


Lesenswert?

Danke Ralf! Das wollte ich wissen!

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.