www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Uhr nur in der Simulation genau


Autor: Seb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag ich bin momentan mit der programmierung
einer Uhr beschäftigt und bin etwas aufm holzweg im moment


Ich verwende einen ATmega325 und einen 10Mhz Quarz

Ich benutze den Timer1(16bit).
Dafür habe ich ausgerechnet

10Mhz  Prescaler  OCR1AH:OCR1AL = 10Hz = 100ms
10MHz  64  15624 = 10Hz =100ms

Das OCR register ist mit 15624 geladen denn der fängt ja mit 0 anzu 
zählen.

wenn ich nun in der Simulation einen Breakpunkt in der ISR von Timer 1 
Setze genau bei dem Punkt wo auch das Sekundenregister erhöht wird alle 
1.000.000,00 µs das Sekunden Register um 1 erhöht.

Aber wenn ich das Programm auf dem µC laufen lasse dann habe ich das 
Problem das die Uhr nach ca 5Tagen bereits 2min und 45s langsamer läuft 
als meine Funk uhr die ich zum vergleich nehme.

wie korrigiert man so einen zeit versatz nun am besten?

Autor: Frank Bär (f-baer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst die Quarz-Frequenz leicht verstimmen. Der Quarz hat einen 
gewissen Fehler, der sich hier eben durchsetzt. Eine Verstimmung 
erreichst du durch Änderung der Kondensatoren, die vom Quarz gegen Masse 
gehen.

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/articles/AVR_-_Die_...

kurz gesagt dein Quarz hat keine 10Mhz...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Seb schrieb:

> Aber wenn ich das Programm auf dem µC laufen lasse dann habe ich das
> Problem das die Uhr nach ca 5Tagen bereits 2min und 45s langsamer läuft
> als meine Funk uhr die ich zum vergleich nehme.

Gratuliere. Du hast soeben rausgefunden, dass dein 10Mhz Quarz nicht mit 
exakt 10000000 Schwingungen in der Sekunde arbeitet, sondern mit ein 
bischen weniger (ist normal. kein Grund zur Beunruhigung)

Mach eine genau Zeitmessung über mehrere Tage und rechne zurück, wie 
groß die Quarzfrequenz wirklich ist, und berechne dann mit Vorteiler den 
OCR Wert noch einmal. Dann sollte es passen.

Autor: Ernestus Pastell (malzeit) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich würd an deiner Stellen nen Teiler von 15625 nehmen.

Autor: Seb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meinst du mit einer Zeit Messung das ich Morgen um 09:00:00 auf meinen 
Funkwecker gucke und auf meine Uhr und dann nächste woche nochmal beide 
zeiten vergleiche und diese Differenz dann einfach versuche 
zurückzurechnen ?


Oder wie meintest du das ?


Danke schonmal fuer die brauchbaren antworten - an eine Toleranz vom 
quarz hab ich garnicht gedacht, weil doch alle immer davon sprechen das 
die so genau sind

Autor: Quarz-Lover (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Seb schrieb:
> Danke schonmal fuer die brauchbaren antworten - an eine Toleranz vom
> quarz hab ich garnicht gedacht, weil doch alle immer davon sprechen das
> die so genau sind
Im Vergleich zu anderen Taktgebern sind sie verdammt genau :)
Es gibt halt Toleranzen bezogen auf Temperatur und Genauigkeit. ( meist 
ca. 20 ppm )

Autor: Ernestus Pastell (malzeit) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://de.wikipedia.org/wiki/Zaunpfahlproblem

Wenn ich mich nicht täusche springt der AVR unmittelbar bei erreichen 
von 0 auf den OCR Wert und nicht erst im nächsten Takt

0 = 15625

Jedenfalls weit logischer als die Toleranzen von nem Quarz, die durchaus 
mal ne Minute im Monat ausmachen (Meine Erfahrung)

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wald-und Wiesenquarze haben eine Abweichung von +/- 30 ppm.

In 5 Tagen sind das rund +/- 13 s. Die Abweichung von 2 m 45 s ist da 
doch ein wenig hoch.

Autor: David .. (david1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt doch auch die Möglichkeit an den AVR nen Uhrenquarz 
unzuschließen, mach doch das, google einfach mal danach, das dürfte 
schon wesentlich genauer sein.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn er 15625 Zählvorgänge in einem bestimmten Zeitintervall benötigt, 
dann muss er OCR auf 15624 setzen. Denn auch der Übergang von 15624 nach 
0 ist ein Zählvorgang.

Anders ausgedrückt: Mit einem OCR von 15624 dauert es 15625 Timer Ticks 
bis der Timer einmal rundum wieder bei 0 angelangt ist.

So gesehen passt das schon.

PS: Wenn überhaupt, dann müsste er einen kleineren Wert als 16524 ins 
OCR Register eintragen. Seine Uhr geht zu langsam! Mit einem größeren 
OCR Wert würde sie noch langsamer gehen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin schrieb:
> Wald-und Wiesenquarze haben eine Abweichung von +/- 30 ppm.
>
> In 5 Tagen sind das rund +/- 13 s. Die Abweichung von 2 m 45 s ist da
> doch ein wenig hoch.

Du hast den Vorteiler von 64 übersehen.
Der spielt da noch mit rein und vergrößert den Fehler.

Aber das wird er schon noch merken, dass er da einen Vorteiler von 1 
haben möchte, wenn er dann ausrechnet, wie sich das alles bei seiner 
'kummen' Quarzfrequenz ausgeht.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... Du hast den Vorteiler von 64 übersehen. Der spielt da noch mit rein. 
...

Hoppla, wieso ändert sich dann die Abweichung von 30 ppm? Die sollte 
doch gleich bleiben.

Autor: Marc S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nö, tut sie nicht, du hast ne Abweichung von 30 auf eine Million Takte 
und durch das schnelle Quarz mehr Takte pro Sekunde, das macht also auch 
die Abweichung pro Sekunde größer!

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marc, wo ist mein Fehler? Bitte vorrechnen!
5 * 24 * 3600 s / 10^6 * 30 = 12,96 s (1 MHz Quarz)

5 * 24 * 3600 s / (10 x 10^6) * 300 = 12,96 s (10 MHz Quarz)

Autor: Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich selbst, baute vor etwa 15 Jahren eine DCF77-Uhr auf einem SAB80C515A 
mit Quarz 18MHz. Das ist ein altes 8051-Derivat von Siemens/Infineon. 
Wenn das Funksignal ausfällt, geht die Uhr auch 1 Minute am Tag falsch. 
Obwohl die Timer-Simulation exakt war.

Aus den verschiedenen Literaturen habe ich gelesen, daß der Quarz umso 
genauer wird, je mehr man die Kapazitäten erhöht. Das steht jedoch im 
Gegensatz zum schnellen und sicheren Anschwingverhalten des µC.

Meine beiden Kapazitäten haben 22pF. Für höhere Präzision, sind 100pF 
empfohlen. Entweder, braucht man da eine Trimmerschaltung, oder z.B. ein 
EEPROM, in dem man Timer-Korrekturwerte mittels Tasten während des 
Betriebes ablegen kann. Ein Hex-Kodierschalter an freien Pins oder ein 
Poti am ADC könnte es auch noch tun.

Andererseits, ist ein Ausfall des Funksignals höchst selten bis gar 
nicht. Deswegen schenke ich dieser Erscheinung auch keine Beachtung.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Wilhelm (Gast)

>Wenn das Funksignal ausfällt, geht die Uhr auch 1 Minute am Tag falsch.
>Obwohl die Timer-Simulation exakt war.

Welch Wunder . . .

>Aus den verschiedenen Literaturen habe ich gelesen, daß der Quarz umso
>genauer wird, je mehr man die Kapazitäten erhöht.

Das ist Unsinn. Die Kapazitäten müssen auf den Quarz abgestimmt sein, 
nicht mehr, nicht weniger. Wenn man dann einen erwischt, der mit den 
meist verwendeten 22pF nicht zufrieden ist, muss man halt einen Trimmer 
nutzen.

>Meine beiden Kapazitäten haben 22pF. Für höhere Präzision, sind 100pF
>empfohlen.

Viel zu viel. Über 33pF kommt man selten hinaus.

MfG
Falk

Autor: Ernestus Pastell (malzeit) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Seb:

Nutzt du den CTC-Modus oder setzt du den Timer manuell auf 0 zurück?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es wurde bereits darauf hingewiesen, aber nochmal:
> 10MHz / 64 / 15624 = 10Hz =100ms

> Das OCR register ist mit 15624 geladen [..]
Das ist falsch.  Um durch n zu teilen, muss OCR mit n-1 geladen werden.

Das dürfte den größten Teil der Abweichung erklären.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hc Zimmerer schrieb:
> Es wurde bereits darauf hingewiesen, aber nochmal:
>
>> 10MHz / 64 / 15624 = 10Hz =100ms
> 
>> Das OCR register ist mit 15624 geladen [..]
> 
> Das ist falsch.  Um durch n zu teilen, muss OCR mit n-1 geladen werden.

Hat er.
Seine formale Division ist falsch angeschrieben.

Es muss lauten
10MHz / 64 / 15625 = 10Hz =100ms

OCR auf 15624 ist korrekt.
(Ich habs 3 mal nachgerechnet)

Autor: Ralli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
5 d = 5  24  3600 = 432000 s

Nachgehen um 2 m : 45 s = 165 s bedeutet

Fehler = 165/432000 = 382 : 1000000 = 382 ppm (zu langsam)

(ppm = auf eine Million bezogen)

Ich habe bisher nur mit ATMega8 und einigen ATTiny gearbeitet,
aber da war der Fehler bei 4...16 MHz-Quarz und 2 x 22 pF meist
so, dass er um  30-50 ppm  zu schnell war. Mit 27...33 pF kam
ich dann auf Fehler < 10 ppm.

Wenn's genauer sein soll, klappt es oft mit 27 pF und
22 pF parallel zu einem 6...30 pF Trimm-C.

- Stimmt die Schaltung?

- Kann man beim ATmega325, interne Cs ein- / auszuschalten?
  Schalte sie aus! (Fuse-Bits)

- Stimmen die C-Werte?
Bei schwingfreudigen Quarzen könnte man vielleicht mit 2 x 220 pF,
statt 2 x 22 pF, auch zu dieser ungewöhnlichen Frequenzabweichung
kommen...

Autor: Klaus De lisson (kolisson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Seb,

schreib dir doch eine kleine Software für den Atmel.. so als 
Frequenzzähler.

dann misst der Atmel mit dem evt. falschen Quarz seine eigene Frequenz.
unabhängig von allen Quarzfehlern sollte das aber konsistent sein.

mit dieser Methode lassen sich Softwarefehler aufspüren.

gruss k.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.