DCF77 mit RTC - Einstellung verschiedener Zeitzonen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • tschoeatsch schrieb:

      Da passiert natürlich nix. Ich meinte, wenn man in der 23. Stunde das _hour+1 vor nimmt, also _hour den Wert 24 bekommt, dann könnte es durcheinander kommen.

      Das nix passiert war schon klar! Habe gemeint das ich sehen werde was die Stunden-, Datums- und Tagesanzeige macht.
      Also wie erwartet ist die Tages- und Datumsanzeige auf dem Mo den 17. geblieben und die Stundenanzeige auf 24 gegangen.
      Um 24 Uhr hat dann wieder alles gepasst: Di 18.09.18 01:00:00
      Ist natürlich nicht optimal - aber in meinem konkreten Fall wäre mir egal ob die Tages und Datumsanzeige mitten in der Nacht eine Stunde lang falsch ist!
      Um alles richtig anzeigen zu lassen müssten alle relewanten Daten um 23 Uhr (DCF) angepasst werden!!!

      ceperiga schrieb:

      Also ich finde, wenn da eh ein RTC- Modul dranhängt, reicht es aus, wenn man die Zeit einmal am Tag synchronisiert. Das am besten gegen 3 Uhr, dann bekommt man auch offizielle Zeitumstellungen mit, solange es die noch gibt. Dann hat man den ganzen Streß mit dem Tageswechsel auch nicht.
      Das ist eine gute Möglichkeit - werde ich gleich ändern :thumbup:
    • tschoeatsch schrieb:

      @fredred wie kommst du immer darauf, dass ein Schreiben auf dcf_status.7 was bewirkt? In der Hilfe dazu steht


      Hallo tschoeatsch,


      da ich mich vielleicht immer falsch Ausdrücke mal ein Softwareschnipsel.



      Nun mal angenommen mein Projekt benötigt nach Neustart ein genauen Zeitstempel dann mach ich es so.
      auf Uhrzeit/Datum von DCF warten
      While Dcf_status.7 = 0
      solange die Zeit nicht stimmt mal ein paar Infos anzeigen lassen
      Print "DCF: " ; Time$ ; " " ; Date$ ; " " ; Time(dcf_sec) ; " " ; Date(dcf_day) ; " " ; Bin(dcf_status) ; " " ; "
      Wend
      Do

      ……

      Loop









      Nun wird erst mit der Hauptschleife weiter gemacht wenn DCF77 mit Clock syncron ist. Kann ja bis zu 3 Minuten dauern. Kann ja sein ich muss genau um xxxx Uhr was starten oder lesen. Muss ich z.B. nach einer Stunde Stromausfall sofort nach Start die genaue Zeit haben, dann könnte RTC gut sein. Aber in einer guten Steuerungssoftware sollten doch immer Neustartbedingung stehen die zu keinen Fehler führen können.

      Ist mir das egal schreibe ich statt While Dcf_status.7 = 0 nur Dcf_status.7 = 1 nun geht es mit der Hauptschleife sofort los. Kann ja sein mir reicht es wenn die Ticketacke erst im Laufe genau geht.


      Mit dem Statueregister gibt es noch andere Möglichkeiten. Mal Bit 6 mit einbeziehen.




      If _min = 0 And Dcfstatus.7 = 0 Then'1x pro StundeDcfstatus.6 = 0'Softclock inaktuellEnd If'Wenn Softclock inaktuell, dann nach DCF stellen:If Dcfstatus.6 = 0 Then Dcfstatus.7 = 1 Else Dcfstatus.7 = 0 Ja was in der Hilfe dazu steht ist nicht so mein Ding. Ich beschäftige mich lieber mit den Innereien(Register) der µC. Einer so der andere so.Hast Du dies auch in der Hilfe gelesen?Schau in die dcf77.lib wie benutzerfreundlich das DCF77 Telegramm „zerlegt“ wird.
      Dcfstatus->
      Bit0: 15. Impuls erreicht.Bit1: Minutenparität OKBit2: Stundenparität OKBit3: Parität OKBit4: 58 Impulse empfangen Bit5: Gültiges DCF77-TelegrammBit6: Softclock nach DCF gestelltBit7: DCF-Decoder EINDamit man kein Mist baut sind Bits 0 bis 5 nur zum lesen.Ich weis somit sind meine Hinweise nicht immer Normgerecht. Bin eben ein kleiner Spinner der hier im Forum zeigen möchte es geht auch anders als mal gedacht.Mit freundlichen Grüßen P.S. Saut mal in Codeschnipsel „Kalenderuhr“ die Funktioniert auch ohne DCF77 durch Tägliche Zeitkorrektur und sogar Jährliche Zeitumstellung nur mit RTC- Modul sehr genau.
    • fredred schrieb:

      Ist mir das egal schreibe ich statt While Dcf_status.7 = 0 nur Dcf_status.7 = 1 nun geht es mit der Hauptschleife sofort los.
      Ok, jetzt hab' ich's kapiert. Du willst mit dcf_status.7=1 ein while..wend überspringen und nur das.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch schrieb:

      Ok, jetzt hab' ich's kapiert. Du willst mit dcf_status.7=1 ein while..wend überspringen und nur das.


      Nein nicht nur das. Somit ich, wieder mal etwas mehr dahin geschrieben als gefragt.
      Nochmal:

      Mit Dcfstatus Byte liefert jedes Bit wichtige Informationen und Bit 6 und 7 können sogar nach bedarf gesetzt werden.


      If _min = 0 And Dcfstatus.7 = 0 Then

      Dcfstatus.6 = 0

      End If

      If Dcfstatus.6 = 0 Then Dcfstatus.7 = 1 Else Dcfstatus.7 = 0


      Nun kann ich doch den Zeitpunkt der Synchronisierung selber bestimmen und unmittelbar danach nur die Stunde ändern.

      Aber wie schon geschrieben bin mehr für „Echt“. Möchte ich nach Zeitvorgabe was Steuern muss ich doch nicht die MEZ verfälschen.
      Mach was wenn MEZ Stunde + 1 oder – 3 ist.

      Aber jeder kann auf sein Art das Ziel erreichen, muss nur die Grundregeln beachten.
      Auf dem Feldweg weniger wie auf der Autobahn.

      In diesem Sinne
    • fredred schrieb:

      Möchte ich nach Zeitvorgabe was Steuern muss ich doch nicht die MEZ verfälschen.
      Mach was wenn MEZ Stunde + 1 oder – 3 ist.
      Das ist natürlich für meine Anwendung eine Möglichkeit! Dann sollte ich mir aber die Zeit nicht anzeigen lassen - weil die stimmt ja für mich nicht!
      Somit hätte ich eine ganze Zeile für was auch immer frei...
      Im "Hintergrund" arbeite ich dann mit "Mach was wenn MEZ Stunde + 1" a_14_3ef964b0
    • fredred schrieb:

      If _min = 0 And Dcfstatus.7 = 0 Then

      Dcfstatus.6 = 0

      End If

      If Dcfstatus.6 = 0 Then Dcfstatus.7 = 1 Else Dcfstatus.7 = 0
      Nee, hab's doch nicht kapiert. Du schreibst in den bits rum, die eigentlich nur Meldungen sind. Aber wenn du damit zufrieden bist...
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • avralfred schrieb:

      Das ist natürlich für meine Anwendung eine Möglichkeit! Dann sollte ich mir aber die Zeit nicht anzeigen lassen - weil die stimmt ja für mich nicht!
      Somit hätte ich eine ganze Zeile für was auch immer frei...
      Im "Hintergrund" arbeite ich dann mit "Mach was wenn MEZ Stunde + 1
      Stimmt auch nicht, Du kannst doch die Zeitanzeige anders betrachten wie mit Zeit was steuern. Mal einfach gesagt Du kannst mehrere Zeitzonen programmieren. Habe vor langer Zeit eine Weltuhr gebaut und die Basiszeit für alle ist eben DCF77. Wichtig ist doch nur ich habe ein sehr genauen Zeittakt und wenn dieser noch fertige Informationen wie DCF77 mitliefert, nehme ich diese dankend an .


      tschoeatsch schrieb:

      Nee, hab's doch nicht kapiert. Du schreibst in den bits rum, die eigentlich nur Meldungen sind. Aber wenn du damit zufrieden bist...
      Ja bin ich.

      Gruß
    • fredred schrieb:

      Aber wie schon geschrieben bin mehr für „Echt“. Möchte ich nach Zeitvorgabe was Steuern muss ich doch nicht die MEZ verfälschen.
      Jetzt ist es soweit a_67_e210de67
      Ich kenn mich gar nicht mehr aus!!! Wie machst du dann eine "Weltuhr" ohne die MEZ nicht zu verfälschen?
      Die MEZ bleibt natürlich die "Urzeit" aber dann muss sie doch irgendwie "verfälscht" werden? Weil - wie komme ich sonst auf andere Zeitanzeigen!
      Aber wie jetzt genau - das habe ich noch immer nicht gerafft a_27_b277ca12
    • Man dreht am Stundenzeiger. Deswegen sind die Ansammlungen von Uhrwerken, die diverse Zeiten auf der Welt anzeigen, Analoguhren.
      Du kannst natürlich dir eigene Variablen für deine Zeit anlegen. _meineStunde, _meineMinute, _meineSekunde, zB. Ok, die Minute und Sekunde kannst du dir sparen. _meineStunde setzt du dann, wenn sich _hour ändert und dann halt auf deinen gewünschten Wert relativ zu _hour. Baust noch eine Abfrage für den Fall des Überlaufs ein und fertig.
      if _hour <> _hour_alt then
      _meineStunde = _hour +1
      if _meineStunde>23 then _meineStunde = 0
      _hour_alt = _hour
      end if
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Guten Tag

      Pluto25 schrieb:

      Dcf_status und Dcfstatus sind verschiede Bytes. Die Bit-auflösung von Beitrag #22 ist völlig anders als die des Dcf_status.
      Vielen Dank @Pluto25

      Hier liegt wohl das Missverständnis mit @tschoeatsch.

      Ich betrachte die DCF77.lib als

      1. DCF-Decoder ohne Softclock
      2. DCF-Decoder mit Softclock

      In beiden werden Statusbits verwendet in 1 kommen diese mit Telegramm und werden decodiert. Somit kann ich diese nicht ändern.
      In 2 werden die decodierten Daten wie gewünscht in Softclock übernommen und da kommt Dcf_status ins Spiel. Hier kann ich „sagen“ starte Softclock sofort, beginnt alles mit null oder ich „sage“ schau erst mal in Decoder ob alles da ist. Wird ja mit Statusbit erkannt und als Byte an Clock übergeben. Nun kann ich in Softclock auch Zeitfenster setzen, wie bei Funkuhren syn. alle Stunde oder einmal am Tag oder wie bei der Bahnmutteruhr alle Minute(kleiner ist ja Sinnlos)usw. Wie ich schrieb das Zeitsignal kommt ja fortlaufend.

      So nun bevor ich verwirrt wurde noch mal an @avralfred.

      Kümmere dich nicht um decodierten Status wichtig ist der Softwarestatus denn der ist völlig unabhängig vom DCF- Decoder.

      Ist Dcf_Status.7 auf 0 rattert dein Programm solange im Kreis bis Bit 7 eins bekommt nur dann ist Clock- Zeit = DCF- Zeit. Ist z.B. bei einem Datenlogger mit Zeitstempel ein muss.

      Aber dumm wenn die Zeitsynchronisierung nicht genau sein muss und der Empfang mal instabil ist. Dann setze lieber Dcf_Status.7= 1 dann geht alles weiter und siehe da wenn Zeit DCF okay ist, wird diese auch in Clock geschrieben.

      Habe mehrere Projekten mit Zeitsteuerung/Anzeige auf meiner Ranch. Die haben kein RTC- oder ein DCF- Modul aber eine 3polige Buchse (+5Volt,GND und DCF-Signaleingang)
      Kommen diese außer Tritt oder Zeitumstellung ist nötig. Einfach meine mobile DCF- Antenne eingesteckt und nach max. 3 Minuten wieder präzise MEZ und ab zum nächsten Projekt. Warum soll die Antenne Stationär dran bleiben wenn außer Tritt siehst Du es doch. Funktioniert aber nur wenn ich im Programm „sage“ Dcf_Status.7= 1. Soweit meine Spinnerei erkannt?

      avralfred schrieb:

      Ich kenn mich gar nicht mehr aus!!! Wie machst du dann eine "Weltuhr" ohne die MEZ nicht zu verfälschen?
      Doch Du hast es erkannt. Die MEZ bleibt natürlich die "Urzeit".
      Nun kannst Du z.B. eine neue Anzeige generieren wo die Stunde plus/minus was weiß ich 1 oder 6 ist. Ist doch nur eine optische Spielerei.
      Nun halte ich mich hier raus. Einmal als Forum- Troll bezeichnet zu werden reicht. a_64_3a718cae
      Mit freundlichen Grüßen
      Fred
    • D A N K E fredred

      fredred schrieb:

      Kümmere dich nicht um decodierten Status wichtig ist der Softwarestatus denn der ist völlig unabhängig vom DCF- Decoder.
      Also wenn mein RTC-Modul nach einem Stomausfall mal ausfallen sollte (z.B.: Bat. leer) , dann sollte meine Steuerung trotzdem einen deffinierten Zustand erreichen dass nix passieren kann!


      fredred schrieb:

      Nun kannst Du z.B. eine neue Anzeige generieren wo die Stunde plus/minus was weiß ich 1 oder 6 ist. Ist doch nur eine optische Spielerei.
      Es ist ja so einfach wenn das Brett vorm Kopf weggemacht wird. - DANKE!

      fredred schrieb:

      Einmal als Forum- Troll bezeichnet zu werden reicht.
      Das war nicht so gemeint! a_46_71693e42
      Ich lese deine Beiträge wirklich gerne (verstehe zwar nicht alles) aber das deine Beiträge "anders" sind, war im positivsten Sinn gemeint.

      Mit freundlichen Grüßen
      Alfred

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von avralfred ()

    • fredred schrieb:

      Warum soll die Antenne Stationär dran bleiben wenn außer Tritt siehst Du es doch.
      Solange man eine Uhr mit permanenter Anzeige hat. Es gibt aber auch Anwendungen die ohne Anzeige immer die genaue Zeit haben sollten/müssen.
      @tschoeatsch hat ja da auch ein paar Beispiele für Uhren ohne Anzeige oder mit nur zufälliger Anzeige.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • tschoeatsch schrieb:

      if _hour <> _hour_alt then
      _meineStunde = _hour +1
      if _meineStunde>23 then _meineStunde = 0
      _hour_alt = _hour
      end if
      Habe es so gemacht. Die Stunde wird korrigiert angezeigt! Nur kann ich ja nicht mehr "time$" anzeigen lassen weil die enthält ja nicht "_meinestunde"!
      Also habe ich _meinestunde : _min : _sec anzeigen lassen. Das funktioniert aber nicht richtig da alle Zahlen <10 nicht richtig angezeigt werden.
      Geht das irgendwie das time$ _meinestunde statt _hour verwendet oder muss ich das ganz anders lösen?
    • Hier mal ein Beispiel wie du es machen könntest

      BASCOM-Quellcode

      1. Dim Stunde As String * 2 , Minute As String * 2 , Sekunde As String * 2
      2. If Lcd_aktualisieren = 252 Then
      3. Locate 1 , 1 : Lcd "WASSERTEMP.: " ; Fusing(dg_s1 , "#.#") : Lcd " " : Lcd Chr(223) ; "C"
      4. Locate 2 , 1 : Lcd "SOLL-TEMP.: " ; Fusing(soll_temp , "#.#") : Lcd " " : Lcd Chr(223) ; "C"
      5. If _sec >= 10 Then
      6. Sekunde = Str(_sec)
      7. Else
      8. Sekunde = Str(_sec)
      9. Sekunde = "0" + Sekunde
      10. End If
      11. If _min >= 10 Then
      12. Minute = Str(_min)
      13. Else
      14. Minute = Str(_min)
      15. Minute = "0" + Minute
      16. End If
      17. If _meinestunde >= 10 Then
      18. Stunde = Str(_meinestunde)
      19. Else
      20. Stunde = Str(_meinestunde)
      21. Stunde = " " + Stunde
      22. End If
      23. Locate 3 , 1 : Lcd Lookupstr(_weekday , Wochentag) : Lcd " " : Lcd Date$ : Lcd " " : Lcd Stunde : Lcd ":" : Lcd Minute : Lcd ":" : Lcd Sekunde
      24. Locate 4 , 1 : Lcd " EINST SW WRTG M/M "
      25. If A > 0 Then 'Wenn innerhalb der letzten 5 Minuten (A = 300) eine DCF Sync. erfolgte dann
      26. Locate 4 , 20 : Lcd Chr(0) 'zeige das Empfanssymbol an
      27. Else 'sonst
      28. Locate 4 , 20 : Lcd " " 'nichts
      29. End If
      30. End If
      Alles anzeigen
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.