www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik die genaue Sekunde will nicht genau sein


Autor: Daniel K. (danielk91)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo User,

ich brauche dringend eure Hilfe. Ich bekomme einfach keine genaue Zeit 
hin. Ich benutze die bekannte "genaue sekunde" Routine von Peter und es 
klappt auch alles einwandfrei, nur bin ich innerhalb einer Minute schon 
um ein paar Sekunden hinterher. Ich moechte mir eine Zeitschaltuhr 
bauen. Sie brauch nicht sehr genau sein, aber es waere wunderbar falls 
ich aehnlichen Resultate bekomme wie Peter.
Vielleicht kann jemand mal drueber schauen und mir weiter helfen. Ich 
verzweilfel naemlich......denn es klappt ja alles...

Danke, Gruss
Daniel

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benutzt du u.U. den internen RC-Oszillator?
Der ist so genau, wie eine Sanduhr...
Ich habe auch schon eine Uhr programmiert und als Taktquelle einen 
Quarzoszillator benutzt. Da war die Abweichung wesentlich geringer als 
beio dir.

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt der Quarz? Der kann eigentlich nicht so weit daneben liegen, mehr 
als 1 Promille ist nicht möglich. Das Vorteiler-Fusebit würde einen 
Faktor 8 daneben liegen, das kann es auch nicht sein. Stimmen die 
Fusebits für den Oszillatortyp, oder stehen sie noch auf interner 
RC-Oszillator?

Autor: Daniel K. (danielk91)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe die Fuses auf externe clock gesetzt und benutze einen 4.032MHz low 
profile Schwingquarz auf meinem STK500. Wenn ich den Quarz heraus nehme, 
bleibt die Uhr auch stehen, also wird der wohl auch genutzt.

Habe auch schon ein Uhrenquarz ausprobiert-mit dem gleichen Ergebniss. 
Irgendwo scheint diese Verzoegerung zu kommen.

DANKE fuer die schnelle Hilfe bis jetzt!!!!

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  update_clock();               // exact one second over
>#if XTAL % DEBOUNCE         // handle remainder
>   OCR1A = XTAL / DEBOUNCE + XTAL % DEBOUNCE - 1; // compare once per second
>#endif

Wenn du das update_clock() mal ans Ende der ISR schiebst
könnte es besser werden.

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für solche Sachen empfiehlt es sich, einen Uhrenquarz (32.768kHz) zu 
nehmen und damit periodisch einen Interrupt auszulösen. Es ist noch zu 
beachten, dass der Code im IRQ für die Ausführung nicht länger braucht 
als der Timerinterval, sonst geht einer oder mehrere verloren.

Autor: Daniel K. (danielk91)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Holger,

das hat leider auch nicht geholfen. Bleibt der gleiche Effekt. Kann ein 
so grosser Unterschied aus der Ungenauigkeit des Quarzes entstehen. Nur 
so empfindlich koennen diese Quarze doch nicht sein, denn halbwegs 
genaue Uhren gibt es doch wie Sand am Meer. Oder muss ich mir was 
anderes als einen Quarz kaufen, der das Zeitsignal liefert.

Gruss
Daniel

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger wrote:
>>  update_clock();               // exact one second over
>>#if XTAL % DEBOUNCE         // handle remainder
>>   OCR1A = XTAL / DEBOUNCE + XTAL % DEBOUNCE - 1; // compare once per second
>>#endif
>
> Wenn du das update_clock() mal ans Ende der ISR schiebst
> könnte es besser werden.

Nein!

Das update_clock() enthält schnarchlahme LCD-Ausgaben und damit gehört 
es aus dem Interrupt verbannt und ins Main gepackt.
Völlig klar, daß Dir Interrupts verloren gehen und die Uhr nachgeht.

Ich hab im Interrupt immer nur ein 1s-Flag gesetzt und damit im Main die 
Zeit gezählt.
Damit hat man dann ne ganze Sekunde Zeit für LCD-Ausgaben.


Peter

Autor: Klaus R. (klaus2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...da hat einer den Grundlagenartikel zu ISRs wohl doch nicht so genau 
gelesen - zudem kann das Quarz sehr wohl recht ungenau sein, wobei sich 
die Fehler im Programm potenzieren können. Daher MUSS man ja nicht nur 
rechnen, sondern die Uhr auch messtechnisch eichen.

Klaus.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus R. wrote:
> Daher MUSS man ja nicht nur
> rechnen, sondern die Uhr auch messtechnisch eichen.

Nein! Du darfst die Uhr nicht eichen, das darf nur die Eichbehörde.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Johnny (Gast)

>Für solche Sachen empfiehlt es sich, einen Uhrenquarz (32.768kHz) zu
>nehmen und damit periodisch einen Interrupt auszulösen.

Vollkommen unnötig, siehe Artikel AVR - Die genaue Sekunde / RTC

> Es ist noch zu
>beachten, dass der Code im IRQ für die Ausführung nicht länger braucht
>als der Timerinterval, sonst geht einer oder mehrere verloren

In der Tat, siehe Interrupt.

MFG
Falk

Autor: Daniel K. (danielk91)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke fuer die klasse Hilfe!!!

@Peter Es hat daran gelegen, jetzt laeuft die Uhr genau, zumindest die 
letzten 12 Stunden;-)

Danke auch an alle anderen. Auf euch ist Verlaß!!

Gruss
Daniel

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.