mikrocontroller.net

Forum: Projekte & Code [Bascom/AVR] Uhr und DCF


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Alex D. (allu)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

anbei einige Codeschnipsel in Bascom für eine Uhr mit  Einstellung per 
DCF-Signal. Es 3 zusammengebaute Schnipsel: CTC-Timer, Uhr und DCF.

Der Quarz kann in weiten Bereichen frei gewählt werden, der Compiler 
berechnet daraus die 20msec-Einstellung für den CTC-Timer. Die nächste 
Stufe generiert daraus 1sec-Schritte.

Da ein Quarz am AVR, bezogen auf Uhrengenauigkeit, unzureichend ist, 
lässt sich das DCF-Programm auf dauernd  "Dcf_mode = _uhr_nachstellen" 
konfigurieren.

Wenn die Uhr  an einem TCXO  läuft, genügt einmal einstellen "Dcf_mode = 
_dcf_abschalten".
Die Sommer und Winterzeit-Umstellung wird  auch ohne DCF berücksichtigt.

Ist der Schalter "Testumschaltung" geschlossen, wird anstelle des Datums 
die Lange der DCF-Pulse  bezogen auf den Schwellwert angezeigt. Eine 
Pause wird mit einem "P" signalisiert. Die 0/1-Anzeige liegt optimal 
symmetrisch zu"<>". Mit "Dcf_bit_schwelle " lässt sich das verändern.
Zwei Empfänger habe ich getestet, einen uralten Conrad-Empfänger 
(Dcf_bit_schwelle = 42) und einen Pollin-Empfänger  (Dcf_bit_schwelle = 
43).

Pro Sekunde werden alle Teilstrings für eine LCD-Anzeige neu berechnet. 
Mit diesen lassen sich verschiedene Anzeigenformate nach Wunsch 
zusammensetzen. Die Bereitstellung alle Strings dauert bei 7,3728 Mhz 
nur 33µsec.

Uhr und DCF-Empfang verbrauchen im Schnitt weniger als 5msec pro 
Sekunde. Da bleibt noch jede Menge Zeit für das LCD und sonstiges.

Das "Hauptprogramm" ist nur zum Testen gedacht und grob gestrickt.

Gruss  Alex

Autor: Paul B. (paul_baumann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex D. schrieb:
> Da ein Quarz am AVR, bezogen auf Uhrengenauigkeit, unzureichend ist...

Hm, ich habe 2 Uhren mit jeweils 4MHz-Quarzen und Atmega8 bzw. 
Attiny2313.
Die sind so genau, daß ich nur Sommer/Winterzeit umstellen muß.

Vielleicht liegt die Ungenauigkeit in der Methode des Berechnens:
Const _irq_teiler_max = Int((_xtal * _irq_abstand /(1000000000)) + 0.5)

Hier kommt doch durch das 0.5 am Ende immer irgendetwas "Wackeliges"
heraus, oder täusche ich mich?

MfG Paul

Autor: Alex D. (allu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul Baumann schrieb:
> Hier kommt doch durch das 0.5 am Ende immer irgendetwas "Wackeliges"
> heraus, oder täusche ich mich?

Nein und ja, nicht jede Quarzferquenz ergibt ganzzahlige Teiler. Die 
+0,5 dient in Verbindung mit dem INT() dient zur Annäherung an den 
gewünschten Wert. Bei ständigem DCF-Berieb sollte das nicht stören.

Ich verwende einen 12,8MHz TCXO (ergibt einen ganzzahligen Wert) mit 
einmaliger Einstellung beim Einschalten.

Paul Baumann schrieb:
> Hm, ich habe 2 Uhren mit jeweils 4MHz-Quarzen

Hast Du die Quarze auf die richtige Frequenz nachgezogen oder ging das 
ohne? Bei mir war das nicht der Fall, ohne nachziehen ging die Uhr 
mehrere Sekunden am Tag falsch.

Gruss  Alex

Autor: Paul B. (paul_baumann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex D. schrieb:
> Hast Du die Quarze auf die richtige Frequenz nachgezogen oder ging das
> ohne?

Ich habe mir die heruntergeteilte Frequenz zum Messen mit einem 
Frequenzmesser auf einen Portpin ausgegeben und mit dem Wert für den
CTC-Modus bzw. dem Vorladewert für den Timer "gespielt", bis es
exakt stimmte.

Die eine Uhr habe ich nicht hier, m.E. ist da noch ein At90S2313 drin,
da ging glaube ich der CTC-Modus noch nicht zu nutzen und ich mußte
den Timer vorladen.

MfG Paul

Autor: Alex D. (allu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul Baumann schrieb:
> Ich habe mir die heruntergeteilte Frequenz zum Messen mit einem
> Frequenzmesser auf einen Portpin ausgegeben und mit dem Wert für den
> CTC-Modus bzw. dem Vorladewert für den Timer "gespielt", bis es
> exakt stimmte.

Ok, also abgeglichen, dann stimmt meine Welt wieder.

Gruss  Alex

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.