Willkommen in unserer Community

Werde Teil unserer Community und registriere dich jetzt kostenlos ...

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

ATmega2560 DCF77 softclock 32kHz Quarz

Dieses Thema im Forum "Programmierung und Bascom IDE" wurde erstellt von mat-sche, 10. Oktober 2017.

  1. mat-sche

    mat-sche Neues Mitglied

    Registriert seit:
    22. April 2008
    Beiträge:
    4
    Zustimmungen:
    0
    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
     
  2. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.668
    Zustimmungen:
    37
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    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.
     
  3. mat-sche

    mat-sche Neues Mitglied

    Registriert seit:
    22. April 2008
    Beiträge:
    4
    Zustimmungen:
    0
    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?
     
  4. addi

    addi Mitglied

    Registriert seit:
    2. September 2013
    Beiträge:
    73
    Zustimmungen:
    2
    Ort:
    Hamminkeln
    Sprachen:
    BascomAVR, C#, Assembler
    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
     
  5. mat-sche

    mat-sche Neues Mitglied

    Registriert seit:
    22. April 2008
    Beiträge:
    4
    Zustimmungen:
    0
    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.
     
  6. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.668
    Zustimmungen:
    37
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    Ich auch, aber bei mir wurden die alten Beiträge mitgezählt... egal...
    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.
    Hmm... das finde ich in der Online-Hilfe nur bei "Config Clock", und da konkret:
    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...
     
  7. mat-sche

    mat-sche Neues Mitglied

    Registriert seit:
    22. April 2008
    Beiträge:
    4
    Zustimmungen:
    0
    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......
     
  8. addi

    addi Mitglied

    Registriert seit:
    2. September 2013
    Beiträge:
    73
    Zustimmungen:
    2
    Ort:
    Hamminkeln
    Sprachen:
    BascomAVR, C#, Assembler
    Hmmmm...bei meinen geräten und auswertungen benutze ich generell utc...erspart manches kopfzerbrechen :-
    Addi
     
  9. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.668
    Zustimmungen:
    37
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    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)
    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.
    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.
    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)
    ???
    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).
     
  10. fredred

    fredred Mitglied

    Registriert seit:
    1. Oktober 2015
    Beiträge:
    51
    Zustimmungen:
    1
    Fehler
     
    #10 fredred, 13. Oktober 2017
    Zuletzt bearbeitet: 14. Oktober 2017
  11. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.668
    Zustimmungen:
    37
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    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.
     
  12. fredred

    fredred Mitglied

    Registriert seit:
    1. Oktober 2015
    Beiträge:
    51
    Zustimmungen:
    1
    Fehler
     
    #12 fredred, 14. Oktober 2017
    Zuletzt bearbeitet: 14. Oktober 2017
  13. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.668
    Zustimmungen:
    37
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    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.
    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...
     
  14. fredred

    fredred Mitglied

    Registriert seit:
    1. Oktober 2015
    Beiträge:
    51
    Zustimmungen:
    1
    Fehler meinerseits.
     
    #14 fredred, 14. Oktober 2017
    Zuletzt bearbeitet: 14. Oktober 2017
  15. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.668
    Zustimmungen:
    37
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    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...
     
  16. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.668
    Zustimmungen:
    37
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    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.
     

Diese Seite empfehlen

  • Über uns

    Unsere immer weiter wachsende Community beschäftigt sich mit Themenbereichen rund um Mikrocontroller- und Kleinstrechnersysteme. Neben den Themen Design von Schaltungen, Layout und Software, beschäftigen wir uns auch mit der herkömmlichen Elektrotechnik.

    Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  • Coffee Time

    Unser makerconnect-Team arbeitet hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und unser eigener makerconnekt-Server regelmäßig gewartet wird. Wir nehmen das Thema Datensicherung und Datenschutz sehr ernst und sind hier sehr aktiv, auch sorgen wir uns darum, dass alles Drumherum stimmt!

    Dir gefällt das Forum und die Arbeit unseres Teams und du möchtest es unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft, unser Team freut sich auch über eine Spende für die Kaffeekasse :-)
    Vielen Dank!
    Dein makerconnect-Team

    Spende uns! (Paypal)