Forum: Compiler & IDEs Timerparameter bei 7,3728MHz


von Marian (Gast)


Lesenswert?

Hallo Leute,

ich habe mal wieder ein Problem mit den Timern meines Atmegas32. Ich
möchte gerne damit eine Genauigkeit von 1ms erreichen. Als erstes hatte
ich einen 4 MHz Quarz, mit welchem es sehr gut funktioniert hat. Da ich
einfach durch 8 geteilt habe und dann im CTC Modus bis 250 gezählt habe
und somit waren 0,0005s vergangen. Das fand ich sehr gut:). Nun habe ich
einen anderen Quarz (7,3728MHz) und damit das Problem, dass ich nicht
weiß, wie ich jetzt meine Timerparameter einstellen muss, damit ich
wieder eine Auflösung von einer Millisekunde komme. Hat das schonmal
jemand gemacht? Ich habe jetzt schon ne ganze Weile im Forum rumgelesen
aber da finde ich immer nur Timer mit geraden Frequenzen oder einer
Auflösung von einer Sekunde.
Kann mir da jemand mal einen Denkanstoss geben, wie ich mir meinen
Timer konfiguriere um halt die 0,001 Sekunden zu erhalten.

Gruß Marian

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Da 7372800 nicht ganzzahlig ohne Rest durch 1000 teilbar ist,
wirst du mit dieser Quarzfrequenz keinen exakten Takt mit 1 ms
Auflösung generieren können.

von Marian (Gast)


Lesenswert?

Na gut dann werde ich wohl doch ein wenig schummeln müssen. Danke für
deine Antwort Jörg, das hatte ich mir auch fast schon gedacht.

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Die Feinauflösung muß man eben mit "NOP" erreichen. Wenn der Timer
einen Interrupt auslöst, einfach noch passend NOPs einfügen bis zum
Neustart des Timers, das geht dann halt nicht im free-run-Modus.

von peter dannegger (Gast)


Lesenswert?

Wie genau müssen denn die 1ms sein, wozu brauchst Du sie ?

Nimm doch einfach 1,1ms, dann kannst Du durch 8192 teilen und nach 900
Interrupts hast Du ne Sekunde.


Peter

von Marian (Gast)


Lesenswert?

Also ich brauche die 1ms fast exakt genau. Möchte halt eine sehr genaue
Zeitmessung machen. Da mein µC eigentlich sehr oft resetet wird, reicht
mir meine Lösung auch schon. Der Überlauf (also die Zeitverschiebung)
ist so gering, dass ich damit weiterarbeiten kann. Es sind ja nur
einige µs die mir verloren gehen aber das kann ich locker verkraften.

Danke für eure Mühe.

Gruß,
Marian

von Detlef _. (detlef_a)


Lesenswert?

"fast exakt genau" merk ich mir, ist mindestens so gut wie "immer nie
nich".

Es war stärker.
Cheers
Detlef

von Marian (Gast)


Lesenswert?

Was war stärker?

Gruß,
Marian

PS: diese 3 Worte habe ich mit Absicht gewählt!

von Detlef _. (detlef_a)


Lesenswert?

Hi,

>Was war stärker?
Die Versuchung, dazu was zu sagen anstatt dazu nichts zu sagen.

Angenommen der Quarz ist genau: Wie im thread gesagt: 2^3*5^3=1000 paßt
nicht in 2^15*3^2*5^2=7372800 rein, da fehlt ne 5. Krücke vielleicht so:
5ms sind 5*7372.8=36864ticks=4*7373ticks+1*7372ticks, i.e viermal ist
Dein Vergleichswert für den Zähler 7373, beim fünften Mal änderst Du
den (in der ISR?) auf 7372. Auf die Dauer geht die Uhr richtig, der
Jitter beträgt allerdings einen tick.

Der Quarz ist aber nicht genau. Der Quarz hat bestimmt ne Ungenauigkeit
(Mittenfrequenz, Temperaturdrift, aging) von 50ppm, macht gute 368Hz.
Der Fehler, 5*7373=36865 anstatt 4*7373+7372=36864 zu nehmen, beträgt
hingegen nur ca 27ppm. Wenn Du's genau exakt willst, muß Du das Ding
temperieren und mit nem Trimmkondensator ziehen. Dazu brauchst Du nen
besseres Normal: 10^-7 Ofenquarz, 10^-8 DCF77 Frequenz, 10^-10 dieser
englische Sender Droitwitch !?

Wie genau willst/mußte denn (das is ne Zahl!).

>PS: diese 3 Worte habe ich mit Absicht gewählt!
Die Absicht sich mir nicht erschlossen.

Sorry
Cheers
Detlef

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.