Hi,
ich arbeite mich gerade in die Mikrocontroller ein. Zur Zeit versuche
ich mich gerade an einer Uhr, welche sich mittels DCF77 selbst
syncronisiert. Dabei habe ich jetzt festgestellt, dass der interne Quarz
wohl ziemlich ungenau sein muss.
Ich arbeite mit einem ATmega88 (mit gesetztem CKDIV8 Fuse), d.h.
effektiv arbeitet mein Controller mit 1 MHz. Nun würde ich gerne im
Sekundentakt eine Variable hochzählen (und abhängig davon dann die
Minuten und Stunden).
Mein Code hierfür sieht wie folgt aus:
Mir ist klar, dass sprintf() recht anspruchsvoll ist (Anzahl der Zyklen
und Programmspeicher). Das soll aber zunächst keine Rolle spielen.
Jedenfalls kann ich einen Drift von fast einer Sekunde pro Minute
feststellen. Das erscheint mir in Anbetracht der Tatsache, dass ich im
CTC Modus arbeite, fast ein wenig viel.
Mache ich hier irgendetwas falsch, oder kann der interne Oszillator
wirklich so ungenau sein?
Vielen Dank im Voraus!
Hi
>Dabei habe ich jetzt festgestellt, dass der interne Quarz>wohl ziemlich ungenau sein muss.
Gibt es nicht. Das ist ein RC-Oszillator.
>Mache ich hier irgendetwas falsch, oder kann der interne Oszillator>wirklich so ungenau sein?
Ja.
MfG Spess
Unlucky2012 schrieb:> Dabei habe ich jetzt festgestellt, dass der interne Quarz> wohl ziemlich ungenau sein muss.
Kein Wunder. Es gibt nämlich keinen internen Quarz.
Unlucky2012 schrieb:> Mache ich hier irgendetwas falsch, oder kann der interne Oszillator> wirklich so ungenau sein?
Im Datenblatt steht was zur Genauigkeit des internen Oszillators. Nimm
den Worst-Case Fall und RECHNE NACH.
Kommt mir allerdings auch etwas sehr viel vor.
gruß cyblord
Unlucky2012 schrieb:> Dabei habe ich jetzt festgestellt, dass der interne Quarz> wohl ziemlich ungenau sein muss.
Kein Wunder, der existiert ja nichtmal.
Quarze lassen sich nicht integrieren.
Ansonsten sagt Dir:
Table 28-1. Calibration Accuracy of Internal RC Oscillator
etwas von 10%
1/60 = 1,7% liegt also voll im Rahmen.
Peter
Peter Dannegger schrieb:> 1/60 = 1,7% liegt also voll im Rahmen.
Meist sind sie sogar etwas besser, aber er schreibt ja auch "fast
eine Sekunde", also wohl eher ein Fehler von 1 %, und das ist
voll im grünen Bereich. Für eine RS-232 reicht es noch (die
toleriert 2 % Fehler), für viel mehr halt nicht.
Martin Wende schrieb:> Nana, für RS232 reichts eben NICHT.
Es reicht nicht garantiert, aber in der Praxis (zumindest unter
Bürobedingungen, also T = 25 °C ±5 K, Vcc = Vcc[nenn] ± 10 %)
trotzdem. Also sich für ein Produkt drauf verlassen kann man
nicht, sich aber per RS-232 schnell eine Debugausgabe zimmern,
ohne sich weiter Gedanken drum machen zu müssen, klappt hingegen.
Martin Wende schrieb:
> Nana, für RS232 reichts eben NICHT.
Das kommt immer drauf an. Bei mir geht es sowohl im Keller als auch im
25° Zimmer nur bis 9800 baud. Alles drüber ist nur Müll.
Christian F. schrieb:> nur bis 9800 baud
Die Baudrate selbst ist eigentlich egal, entscheidend ist ja nur
der relative Fehler. Allerdings ergeben sich für bestimmte
Baudraten bei den üblichen "glatten" Megahertz-Taktfrequenzen
mehr oder minder große systematische Fehler (durch die endliche
Granularität des Teilerfaktors), die sich natürlich zu den
zufälligen Fehlern (initialer Offset + Schwankung der Taktfrequenz)
addieren. Sofern die UART der Gegenseite es kann, würden daher
(bei 8 MHz Takt) bspw. 1 Mbit/s sicherer funktionieren als 9600 bit/s.
Abhilfe wäre es, den RC-Oszillator auf eine "baudratenfreundliche"
Frequenz zu ziehen. 7,37 MHz werden daher auch als Ziehbereich nach
unten (für den 8-MHz-Oszillator) per Datenblatt garantiert.
Jörg Wunsch schrieb:> Abhilfe wäre es, den RC-Oszillator auf eine "baudratenfreundliche"> Frequenz zu ziehen. 7,37 MHz werden daher auch als Ziehbereich nach> unten (für den 8-MHz-Oszillator) per Datenblatt garantiert.
Und wenn's noch genauer sein soll, kann man auch nachkalibrieren.
Dazu guckst Du Dir über den Portpin ein paar RS-232-Telegramme an und
bestimmt die kürzeste Low-Phase. Das ist dann ein bit. Die Soll-Länge
ist bekannt, die Ist-Länge hast Du gerade gemessen. Entprechend der
Abweichung wird dann das OSCCAL-Register angepasst. Das Ganze erfolgt am
besten als Regelung, d.h. nur wenig verstellen und dafür regelmässig.
Christian F. schrieb:> Martin Wende schrieb:> Nana, für RS232 reichts eben NICHT.Das kommt immer drauf
an. Bei mir geht es sowohl im Keller als auch im25° Zimmer nur bis 9800 baud.
Alles drüber ist nur Müll.
Wenn das von der Schnittstellengeschwindigkeit abhängt, hast du noch ein
Problem mit schlechter Signalform. Ob du versuchst ein 300 Bd Signal 60%
vor Bitmitte abzutasten oder ein 115kBd Signal ist egal.
tt2t schrieb:>> Quarze lassen sich nicht integrieren.>> Doch, siehe DS3231
Hi,
"integrieren" läßt sich unterschiedlich interpretieren.
Integriert im Gehäuse gibt es schon seit Ewigkeiten, auch und besonders
von Dallas/Maxim.
Integriert auf dem Chip, also monolithisch, ist dagegen, meines Wissens,
kommerziell noch nicht realisiert worden.
Beim DS3231 ist es die erste Variante!
om pf schrieb:> Wobei der Chip ja aus Silizium ist. Man muss also nur den Wafer in> BT-Richung sägen ;-)
<Erbsenzählmodus>
Nicht ganz. Ein Quarz ist aus SiO2, der Chip (undotiert) aus
einkristallinem Silizium.
</Erbsenzählmodus>
Jörg Wunsch schrieb:> Übrigens auch aus einkristallinem, also zumindest beim Schwingquarz.
Richtig, das war jetzt aber auch Erbsenzählmodus.
ich habe ja nicht Quarzsand geschrieben :-)