Forum: Mikrocontroller und Digitale Elektronik Uhr mit RTC und DCF


von Clock (Gast)


Lesenswert?

Hi,

ich habe hier einen ATmega88, ein RTC (DS1307), ein Conrad DCF Modul 
sowie ein HD44780 2x16 Zeilen Display. Nun würde ich die Komponenten 
gerne zu einer Uhr mit automatischer Zeitsynchronisation "zusammenbauen" 
und das Ganze als Einstieg in die Welt der Mikrocontroller nehmen.

Allerdings stellt sich mir die Frage was hier der richtige Ansatz wäre. 
Sollte ich im Mikrocontroller die Zeit "mitlaufen" lassen und nur zu 
bestimmten Zeiten mit dem RTC bzw. dem DCF Modul synchronisieren, oder 
sollte ich mein Zeitsignal komplett aus dem RTC beziehen?

Mein bisheriger Ansatz sieht so aus: Ich lasse im Mikrocontroller über 
einen Timer im CTC Modus eine Uhr mitlaufen. Sofern ich ein gültiges DCF 
Signal empfange, stelle ich die Uhr danach und schiebe das Ganze in die 
RTC. Sofern ich über eine Minute kein gültiges DCF Signal empfange, 
synchronisiere ich die Zeit jede Minute mit dem RTC.

Was haltet ihr davon? Das Problem mit der "internen" Uhr ist einfach, 
dass der interne RC Oszillator, welchen ich verwenden möchte, recht 
ungenau ist. Im Datenblatt wird hier eine Abweichung von bis zu 10% 
angegeben.

Im Datenblatt des DS1307 wird auch darauf verwiesen, dass es ein SQW/OUT 
Pin gibt, den man "programmieren" kann und der ein Signal mit halbwegs 
akkurater Frequenz ausgibt. Macht es Sinn diesen zu verwenden?

Wie handhabt ihr das?

Vielen Dank!

von Eumel (Gast)


Lesenswert?

Es macht keinen Sinn den Avr als Zeitgeber zu benutzen. Nimm die Zeit 
immer aus der RTC und gleiche gelegentlich mit dem Funksignal ab.

von Clock (Gast)


Lesenswert?

Eumel schrieb:
> Es macht keinen Sinn den Avr als Zeitgeber zu benutzen. Nimm die Zeit
> immer aus der RTC und gleiche gelegentlich mit dem Funksignal ab.
Was heißt hier "immer"? Ich muss ja die RTC per I2C abfragen. Wie oft 
(pro Sekunde) sollte ich das idealerweise tun? Soll ich hierfür einen 
eigenen Timer-Interrupt benutzen, oder das in der "Hauptschleife" tun?

von Eumel (Gast)


Lesenswert?

Was soll deine Uhr denn maximal Anzeigen?

von Michael (Gast)


Lesenswert?

Clock schrieb:
> Soll ich hierfür einen eigenen Timer-Interrupt benutzen, oder das in
> der "Hauptschleife" tun?
Dafür bietet sich ein HW-Interrupt durch den SQW/OUT der RTC an, wenn du 
den auf 1Hz konfigurierst.

von Clock (Gast)


Lesenswert?

Eumel schrieb:
> Was soll deine Uhr denn maximal Anzeigen?
Sekunden sind ausreichend.

Michael schrieb:
> Dafür bietet sich ein HW-Interrupt durch den SQW/OUT der RTC an, wenn du
> den auf 1Hz konfigurierst.

Braucht man bei solchen HW-Interrupts irgendeine besondere Beschaltung 
(Pull-Ups, oder ähnliches) oder kann das Signal als "stabil" genug 
angesehen werden?

von Michael (Gast)


Lesenswert?

Clock schrieb:
> Braucht man bei solchen HW-Interrupts irgendeine besondere Beschaltung
> (Pull-Ups, oder ähnliches)
Im Datenblatt des DS1307 Fig.1 siehst du, dass der SQW/OUT ein 
Open-Drain-Ausgang ist. Ohne Pull-Up kann dort also kein High-Pegel 
entstehen.

von Michael (Gast)


Lesenswert?

p.s.
Auf S.6 unter "Pin Description" steht es auch nochmal explizit:
"The SQW/OUT pin is open drain and requires an external pullup 
resistor."

von Floh (Gast)


Lesenswert?

Clock schrieb:
> Was haltet ihr davon? Das Problem mit der "internen" Uhr ist einfach,
> dass der interne RC Oszillator, welchen ich verwenden möchte, recht
> ungenau ist. Im Datenblatt wird hier eine Abweichung von bis zu 10%
> angegeben.

Beim mega88 kannst du auch einen Uhrenquarz für den Timer2 anschließen. 
Damit wird der Timer 2 in etwa so genau wie eine externe RTC, kann sogar 
weiterlaufen im Sleepmode.
Ich persönlich würde auf die externe RTC verzichten und die interne Uhr 
des mega88 mit der DCF abgleichen.Spart ne Menge Aufwand.

von Clock (Gast)


Lesenswert?

Floh schrieb:
> Beim mega88 kannst du auch einen Uhrenquarz für den Timer2 anschließen.
> Damit wird der Timer 2 in etwa so genau wie eine externe RTC, kann sogar
> weiterlaufen im Sleepmode.
> Ich persönlich würde auf die externe RTC verzichten und die interne Uhr
> des mega88 mit der DCF abgleichen.Spart ne Menge Aufwand.

Ja, dafür anfällig gegen Ausfall bei Problemen mit der Stromversorgung. 
Meine RTC läuft dann mit der Batterie jahrelang weiter. Außerdem 
verbraucht der ATmega88 auch im Sleepmodus mehr als meine RTC.

von Floh (Gast)


Lesenswert?

Clock schrieb:
> Ja, dafür anfällig gegen Ausfall bei Problemen mit der Stromversorgung.

Und?
Die Anzeige wird erst wieder funktionieren, wenn Strom vorhanden ist. 
Und ab da läuft auch die DCF wieder für die Uhrzeit. :-)

von Michael (Gast)


Lesenswert?

Floh schrieb:
> Und ab da läuft auch die DCF wieder für die Uhrzeit.

Das kommt auf den Standort des Empfängers an. Wenn die Feldstärke 7/24 
sicher ausreicht - ok. Sobald man auf den Tagesrhythmus der 
Funkwellenausbreitung angewiesen ist, geht das nicht mehr.

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.