ATmega2560 DCF77 softclock 32kHz Quarz

mat-sche

Neues Mitglied
22. Apr. 2008
12
0
1
Sprachen
liebes Forum,

ich lese und lese und lese... doch leider finde ich keine richtige Antwort und hoffe hier um Hilfe.

Also ich habe einen ATmega2560 Arduinoboard und habe mir ein Programm erstellt (state machine Roboternetz) mit dcf77. Leider läuft die Uhr nicht sehr genau und ich habe nicht immer den dcf77 Empfang für ein automatisches stellen der Uhr.
Nun habe ich mir an die PINs (29/28 - tosc 1/2) vom Mega einen 32kHz Quarz gelötet. Wird nun dieser in der dcf77 Routine von Bascom dieser Quarz unterstützt? Oder muss ich noch irgend etwas anderes unternehmen das meine Uhr richtig läuft?
Leider kann ich in der Hilfe nichts richtiges herauslesen....
Und wenn ich den Quarz nutze, muss ich noch 1/2 Kondis mit dem Quarz verbinden?

Danke für Eure Hilfe
 
Timer2 kann asynchron zum Systemtakt ... getaktet werden. Er besitzt einen eigenen low FrequenzyOszillator, scheinbar mit internen 6pF-Bürdekapazitäten, wobei der 32,xxxkHz-Quarz extern anzuschließen ist. Inwiefern eine von Dir verwendete DCF- und/oder softclock-Routine den Timer dann auch nutzt, kann ich Dir (zumindest ohne den Code zu kennen) nicht sagen. Wenn das geht, muß sicher 'ne entsprechende Konfiguration der Routine erfolgen. Was steht in der Hilfe zu Deinen verwendeten Routinen?

Grundsätzlich ist das eine Einstellungssache des Timers, natürlich könnte(!) auch eirgendeine Hochsprachenroutine den Timer konfigurieren.

P.S.: Willkommen im Forum.
 
Guten Morgen LotadaC,

"P.S.: Willkommen im Forum."

Dankeschön :) Aber ich lese und schreibe schon lange mit, schon bei dem alten Forum. Hatte nur schon lange nichts gemacht.
Also..... wo fange ich an:
Die dcf77 Funktion wird durch eine Lib von Bascom ins Programm mit eingebunden. Dann hat man noch die Möglichkeit eine Softclock per "user" zu konfigurieren, bei der dann ein Quarz anzuschließen sei. Wird in Bascom die eigene dcf77 Routine verwendet, wird durch den Compiler alle Einstellungen zum Timer etc. eingestellt.
Nun kenne ich die Lib nicht wirklich, möchte aber den Quarz zur genauen Takterzeugung nutzen, aber wie?
 
Hmmm....
Es wuerde sich eine kleine interrupt routine von timer2 anbieten, die im 1/2 sekunden takt aufgerufen wird und einen zähler bis 120 hochzählt (1 min) und dann mit der minutenangabe vom dcf77 vergleicht.
Hat man dcf77 empfang...dann gleicht man den internen minutenzähler mit der aktuellen dcf77 angabe ab.
Hat man keinen empfang mehr...dann benutzt man den internen zähler...bis wieder empfang da ist.

Dabei könnte man auch die drift des uhrenquartzes auch ermiiteln...über die zeit gesehen, sprich abweichung von der dcf77 zeit.
Addi
 
Hi Addi,

das wäre eine Möglichkeit aber nicht im Sinn des Erfinders. Ich schau mal, ob ich zu Fuß die Dekodierung mit dem benötigten Timer hinbekomme.
 
Dankeschön :) Aber ich lese und schreibe schon lange mit, schon bei dem alten Forum.
Ich auch, aber bei mir wurden die alten Beiträge mitgezählt... egal...
Es wuerde sich eine kleine interrupt routine von timer2 anbieten, die im 1/2 sekunden takt aufgerufen wird und einen zähler bis 120 hochzählt (1 min) und dann mit der minutenangabe vom dcf77 vergleicht.
eine Möglichkeit aber nicht im Sinn des Erfinders.
Warum nicht?
Wenn man einen 32,768kHz-Uhrenquarz einsetzt, und Timer2 (8Bit) mit diesem über Prescaler=128 laufen läßt, läuft der Timer jede Sekunde einmal über (->IRQ, und daran Uhrwerk koppeln).
via DCF kann man die Uhr dann stellen lassen - sollte ja nur selten (bzw nach einem Reset) nötig sein.
Dann hat man noch die Möglichkeit eine Softclock per "user" zu konfigurieren, bei der dann ein Quarz anzuschließen sei.
Hmm... das finde ich in der Online-Hilfe nur bei "Config Clock", und da konkret:
For the SOFT mode you need to connect a special low frequency crystal with a value of 32768 Hz to the ASYNC TIMER oscillator pins.
Config Clock generiert Dir also auf Basis des asynchronen Timers (Timer2, und eines 32,...kHz-Quarzes) die komplette Zeit in Form mehrerer Variablen, und aktualisiert diese im Sekundentakt.
Wie "Config DCF77" konkret arbeitet, kann ich der Hilfe auch nicht wirklich entnehmen - es müßte ja auf die Flankenwechsel (der eigentliche externe Empfänger filtert den 77kHz-Carrier?) am Pin reagiert werden, und dann zwischen 0,1 und 0,2s Pulslängen differenziert werden. (Und natürlich die ganzen Infos ausgewertet werden). Dazu wird also sicher auch ein Timer verwendet werden - ob das derselbe frei zu wählende Timer für die Updates und/oder eventuellen 1s-Interrupts ist, ist unklar.
Config DCF scheint auch irgendwelche Zeit-Variablen zu dimensionieren, und zu aktualisieren.

Wahrscheinlich kannst Du DCF77 mit Timer1 (und einem geeigneten Systemquarz) und die 32,768-Softclock mit Timer2 gleichzeitig nutzen, und dann eben die beiden Zeiten abgleichen können.
Kostet allerdings einen 16bit-Timer und den 8bit-asynchronen Timer.
Grundsätzlich sollte sich das DCF77-Signal auch mithilfe eines laufenden 32768Hz-Timers dekodieren lassen können - ob die fertige DCF-Routine das unterstützt, weiß ich nicht...

Ich favorisiere (nebenbei gesagt) inzwischen die Verwendung einer externen batteriegepufferten RTC, welche seriell ausgelesen werden kann und einen geeigneten Takt an den AVR für dessen Uhr weiterleitet.
Die im AVR laufende Uhr benötigt dann nur noch einen Pin (ggf. IRQ), und einmal nach dem PowerUp (ggf auch bei Rückkehr aus tiefen Sleep) den seriellen Zugriff auf die RTC.
Die RTC selbst muß einmal irgendwie gestellt werden, die drift hält sich bei Schweizer Uhren ja in Grenzen...
 
Ich auch, aber bei mir wurden die alten Beiträge mitgezählt... egal...

Wahrscheinlich kannst Du DCF77 mit Timer1 (und einem geeigneten Systemquarz) und die 32,768-Softclock mit Timer2 gleichzeitig nutzen, und dann eben die beiden Zeiten abgleichen können.
Kostet allerdings einen 16bit-Timer und den 8bit-asynchronen Timer.
Grundsätzlich sollte sich das DCF77-Signal auch mithilfe eines laufenden 32768Hz-Timers dekodieren lassen können - ob die fertige DCF-Routine das unterstützt, weiß ich nicht...

Ich favorisiere (nebenbei gesagt) inzwischen die Verwendung einer externen batteriegepufferten RTC, welche seriell ausgelesen werden kann und einen geeigneten Takt an den AVR für dessen Uhr weiterleitet.
Die im AVR laufende Uhr benötigt dann nur noch einen Pin (ggf. IRQ), und einmal nach dem PowerUp (ggf auch bei Rückkehr aus tiefen Sleep) den seriellen Zugriff auf die RTC.
Die RTC selbst muß einmal irgendwie gestellt werden, die drift hält sich bei Schweizer Uhren ja in Grenzen...

Leider geht das nicht, dcf77 und softclock gehen nicht nebenher. Und leider geht nur unter softclock der asynchrone Timerbetrieb.
Ich habe auch eine RTC am Kontroller nur schöner ist es durch dcf77 sich die Uhrzeitstellung (Sommer-Winter....) abnehmen zu lassen.

Entnehme ich der Hilfe richtig, dass die Softclock von Bascom immer den asynchronen Timer 2 nutzt und dementsprechend auch die Quarzanschlüsse vom jeweiligen Mega?

Mal schauen was mir noch so einfällt......
 
Hmmmm...bei meinen geräten und auswertungen benutze ich generell utc...erspart manches kopfzerbrechen :-
Addi
 
Leider geht das nicht, dcf77 und softclock gehen nicht nebenher.
Was ist da dann das konkrete Problem? Laut der Hilfe legen beide unterschiedliche Variablen an. Softclock halt ein laufendes Uhrwerk, der DCF Variablen, die in definierten Intervallen upgedatet werden (je nach einstellung)
...leider geht nur unter softclock der asynchrone Timerbetrieb.
Ob Bascom Dir das mit irgend'nem Config Timer2 abnehmen würde, weiß ich nicht ABER Du selbst kannst den Timer in den asynchronen Modus versetzen, indem Du selbst das Asynchronous Status Register (ASSR) beschreibst.
...Ich habe auch eine RTC am Kontroller nur schöner ist es durch dcf77 sich die Uhrzeitstellung (Sommer-Winter....) abnehmen zu lassen...
Normalerweise lese ich die Zeit nur wenn nötig aus der RTC, die RTC leitet einen 1Hz-Takt an einen Pin weiter, welcher das AVR-Uhrwerk antreibt. Beim auslesen kann man dann einfach prüfen, ob es Sommer ist (letzter Sonnag im März bis letzter Sonnabend im Oktober), und dann von der ausgelesenen Stunde eins abziehen.
Schaltjahrkorrektur haben die RTCs ja mit drinn.
...Entnehme ich der Hilfe richtig, dass die Softclock von Bascom immer den asynchronen Timer 2...
In der Hilfe steht nur was von "dem asynchronen Timer", es muß also nicht zwingend Timer2 sein. (mit den Großen Controllern kenne ich mich nicht so aus, bei den Tinies hab ich nicht drauf geachtet. Memo an mich selbst: Tiny-Datenbank auf asynchrone Timer kontrollieren)
...asynchronen Timer 2 nutzt und dementsprechend auch die Quarzanschlüsse vom jeweiligen Mega?
???
Es wird der asynchrone Oszillator des Timers benutzt, der zwei Beine als alternative Funktion (TOSC - Timer Oscillator) benutzt. Bei Deinem Mega2560 sind das G3 und G4. Die Beine des (Haupt-/System-/Controller-)Oszillators (XTAL) besitzen beim Mega2560 keine alternative Funktion.
Bei anderen Controllern mit weniger Beinen sieht das möglicherweise anders aus...
Du mußt Dich immer mit dem verwendeten Controller beschäftigen, bzw einen angemessenen Controller für eine Aufgabe raussuchen...

Ob die fertigen Bascom-Config-Instruktionen dann mit den konkreten Gegebenheiten klarkommen, ist 'ne andere Geschichte - im Zweifelsfall kannst Du Dir die Funtionen selbst schreiben.
(Config Timer kennt (zumindest laut Online-Dokumentation) zB keine 10- oder 16bit-Timer als Timer0, PWM-Ausgabe ist auch nur mit zwei Kanälen bei Timer1 und einem Kanal bei Timer2 vorgesehen - es gibt aber Controller mit drei oder mehr Timern, Controller mit mindestens zwei PWM-Kanälen pro Timer usw usf...)
So...
Wie willst Du jetzt konkret weiterverfahren?
Grundsätzlich kann die DCF-Routine selbst einen Sekundentakt für ein internes Uhrwerk generieren - die Genauigkeit entspricht der des verwendeten Systemquarzes, und hängt auch davon ab, ob sich aus diesem überhaupt ein Sekundentakt ableiten läßt.

Auf Basis von Timer2 mit asynchronem 32,768kHz-Takt sollte es für Dich selbst kein Thema sein, Dir 'ne eigene RTC-Softclock zu implementieren.
Etwas kniffeliger wird es, mit einem anderen Timer selbst das eventuelle DCF auszuwerten.
Zusatzpunkte bekommst Du, wenn Du auch die DCF mit Timer2 gewinnst (Hinweis: Der Timer muß dann schneller als mit Prescaler128 am 32768-Crystal hängen).
 
DCF77 ist logischerweise genau, sofern Du das Signal hinreichend gut empfängst. Ich hab hier stellenweise gar keinen Empfang, die Funkuhr wandert für jeden Sommer/Winterwechsel durch die Wohnung.
Die Softclock ist so genau, wie der dafür eingesetzte Taktgenerator - mit dem internen RC-Oszi wird das sicher ein Schätzeisen.
Welche Genauigkeit der verwendete Quarz bietet, sollte dem Datenblatt zu entnehmen sein. Bei einem Uhrenquarz erwartet man zumindest eine hohe Genauigkeit (und Stabilität).
P.S.: 15s Abweichung pro Tag entsprächen ... 173ppm, korrekt?
Bei den RTCs gibts welche mit garantierten max 1,5ppm Abweichung.
 
warum DCF77 wenn „Stellenweise gar keinen Empfang“.
Weil das Ding nicht als (Funk-)Uhr gekauft worden ist, sondern als Außenthermometer. Und als solches funktioniert es ja. Theoretisch hätte man auch in einem der Außensensoren den DCF-Reciever/Decoder integrieren können, aber das wäre sicher teurer geworden.
Du hast ein DCF77- Modul der untersten Klasse.
Die werden da sicher nichts teureres als nötig verbaut haben - neben der Signalstärke und der Abschirmung durch Wände/Armierung gibt es aber auch noch HF-Störungen...

Aber es geht ja hier nicht um mich - ich hab keine Probleme mit meinen Uhren...

mat-sche war die softclock, die die DCF-Routine nebenbei generiert, zu ungenau (bei fehlender Synchronisation), und nach seiner Aussage vertragen sich die Bascom DCF-Routinen nicht mit config clock=soft für die Verwendung des asynchron getakteten Timers.

Bezüglich seiner Frage hab ich (hoffentlich) einige Sachen zum asynchronen Timer beitragen/korrigieren können, und den Vorschlag, stattdessen eine externe RTC als Taktquelle für die interne Uhr zu verwenden. Ob nun mit oder ohne DCF-sync erstmal egal...

Klar gibts dabei viiiieeeele Möglichkeiten, und da wir nicht wissen, welche Prioritäten außer der Genauigkeint bei fehlendem DCF sonst noch gesetzt sind (Stromverbrauch/Sleep, anderweitig zu verwendende periphäre HW-Ressourcen,...), muß mat-sche entscheiden, welchem der Vorschläge(!) er folgen will.

Neben DCF gäbe es ja auch noch die Synchronisation übers WLAN über einen Zeitserver, GPS, DAB, was weiß ich.
Dann kannst Du das auch noch abkoppeln, die extern erfaßte Zeit über irgendeinen Kanal (seriell, IR-Licht, Bluetooth, Schall, Laser,...) über irgendein willkürliches proprietäres Protokoll zu Deiner Uhr leiten...

P.S.: darf man denn so'n Signalverstärker selbst betreiben? Nicht, daß da dann plötzlich wegen irgendeiner Fehlfunktion die Jungs von der BNetzA klingeln...
 
Sorry, bei Verstärker hatte ich jetzt 'n Verstärker des Funksignals - also sowas wie'n Repeater im Kopf...
Du meintest offensichtlich, daß die Empfänger empfindlich (im Sinne des Empfanges) sind, also das Signal auch Empfangen, wenn es schon stark geschwächt ist...
 
Memo an mich selbst: Tiny-Datenbank auf asynchrone Timer kontrollieren
Nur bei den neuen XTinies.
Allerdings besitzen die keinen internen Oszillator für einen externen (!) Quarz außer eben dem 32,...kHz.
Sie können also extern außer dem TOSC nur mit einer externen Clock betaktet werden.
Intern besitzen sie einen 32kHz Ultra-low-Power-Oszillator, und einen 20-/16-MHz-Oszillator.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)