Uhr mit 4x 8x8 Led-Matrix Max7219

    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!

    • Welche 'check'-Option hast du in der config dcf stehen? In der Hilfe findest du die Optionen dazu und eine Erklärung
      CHECKCheck is 1 by default. The possible values are :
      0 - The DCF-77 parity bits are checked. No other checks are performed.
      Use it when you have exceptional signal strength
      1 - The received minutes are compared with the previous received minutes. And the difference must be 1.
      2 - All received values(minutes, hours, etc. ) are compared with their previous received values. Only the minutes must differ with 1, the other values must be exactly the same.
      This value uses more internal ram but it gives the best check. Use this when you have bad signal reception.

      bei check=0 und =1 kann das passieren. Bei =2 hast du mehr Plausibilitätsüberprüfungen drin.


      Übrigens, die Hilfe bekommt man ganz einfach angezeigt: man geht im editor mit dem cursor auf einen bascom-Befehl, wie zB. 'config' und drückt dann 'F1'. Daes bei config mehr Hilfetexte gibt, muss man hier sich noch zu dem gewünschten Thema weiter klicken, aber sonst schnappt gleich die passende Hilfe zum Befehl auf.
      Raum für Notizen

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

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

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

    • @tschoeatsch
      Ich habe mal versucht, das Programm aus Post #138 nachzuvollziehen.
      Da habe ich aber noch Fragen. So wie ich das verstanden habe, wird die interne Uhr
      nach erfolgreichem Empfang mit den DCF -Werten synchronisiert. Ist die interne Uhr
      erst einmal DCF-synchronisiert, tickert sie immer so vor sich hin, auch wenn keine
      erneute Synchronisation erfolgt.
      Ich hoffe, das bis dahin verstanden zu haben.
      Du musst also davon ausgehen, das die interne Uhr keinen Fehler macht. Und wenn doch,
      warum auch immer????
      Ich kann mir vorstellen, das es dann zu solchen Fehlern , wie beschrieben, kommen kann.
      Die einzige Abfrage, ob sich die Daten logisch sinn machen, wird bei der Handeingabe (Debounce)
      getätigt.
      Vielleicht liege ich auch ganz falsch ? a_56_df238249 , dann Asche auf mein Haupt a_38_b45e201d

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Es ist alles genau so, wie du es auch denkst. Ich gehe davon aus, dass die softclock, die ja durch die dcf-lib eingerichtet wird, alles richtig macht. Jetzt könnte man Vorwerte von _hour, _min und _sec speichern und bei einer neuen Sekunde prüfen, ob Minuten- und Stundenübergänge von der softclock korrekt ausgeführt wurden, aber den Aufwand spare ich mir. Ich denke, meine Programme werden nicht in der Raumfahrt eingesetzt, um mal am Mars vorbei zu fliegen :D
      Oder, fällt mir gerade noch ein, man könnte aus der Variablen secofday, die ja einfach zum Fortschreiben ist, selber die Stunden und Minuten heraus rechnen, wenn das Rechnen dann auch immer klappt.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • @tschoeatsch
      Hast natürlich recht, man muss nicht alles machen, nur weil es technisch möglich ist.
      Und da ich auch annehme, das die Synchronisation mehrmals am Tag erfolgt, wird der
      falsche Wert so wie so überschrieben. Ich hatte ja nur versucht, eine Erklärung für das
      Phänomen zu finden. Ob das die richtige, oder einzige Erklärung ist, sei dahin gestellt.

      Nebenbei
      Böse Zungen behaupten ja, der Flug zum Mond wurde mit einem C64 gesteuert.
      Da würde für die Reise zum Mars wahrscheinlich ein Pentium 2 mit WIN 95 reichen a_48_7237538e

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Das Schlechte an dieser Vorgehensweise (nur mit der letzten Minute vergleichen) ist, dass man nur sehr schwer wieder auf die korrekte Zeit kommt, wenn sie einmal daneben ist. Dann vergleicht man ja immer gegen eine falsche Zeit. Ich hatte das neulich mal bei einem gekauften Wecker. Der zeigte morgens die falsche Zeit an und obwohl er jede Stunde überprüft, dauerte es bis zum nächten Tag abends, bis die Zeit wieder korrekt war. Für einen Wecker ist mir das zu unzuverlässig.

      Bei meiner eigenen Uhr bin ich anders vorgegangen. Alle im Minutentakt mit korrekten Prüfbits empfangenen Zeiten werden per Syssec in ein Array von 10 Zeiten gespeichert, die neueste schiebt die älteste raus. Dabei werden alle abgespeicherten Zeiten um 60sec erhöht. Finden sich mehr als 3 mit der aktuellen Zeit übereinstimmende Zeiten, wird diese als gültig angenommen. Eine gültige, aber falsche Zeit hat so kaum eine Chance, während gültige richtige Zeiten sehr schnell durchkommen, selbst wenn zwischendurch einige falsche abgespeichert werden. Bei der allerersten Zeit nach dem Einschalten wird nur eine Übereinstimmung benötigt.
      Das klappt sehr gut. Wenn ich die Zeit per Eingabe falsch stelle, dauert es immer nur wenige Minuten, bis die richtige Zeit angezeigt wird.
      Weiterer Nebeneffekt ist, dass keine Vorkehrungen für Sommer-/Winterzeit Umstellung getroffen werden müssen, da dies ebenfalls nach ein paar Minuten ausgeglichen wird.
    • hero schrieb:

      Das klappt sehr gut. Wenn ich die Zeit per Eingabe falsch stelle, dauert es immer nur wenige Minuten, bis die richtige Zeit angezeigt wird.
      Weiterer Nebeneffekt ist, dass keine Vorkehrungen für Sommer-/Winterzeit Umstellung getroffen werden müssen, da dies ebenfalls nach ein paar Minuten ausgeglichen wird.
      Also das Programm würde mich mal interessieren.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Das ist total simpel:

      BASCOM-Quellcode

      1. Const Dcf_max_previous_count = 10 'ANPASSEN!!!!!!!!!!
      2. Const Dcf_treffer_start = 1
      3. Const Dcf_treffer_betrieb = 3
      4. Dim Dcf_prev_times(dcf_previous_count) As Long
      5. Dim Dcf_syssec As Long
      6. Dim Dcf_temp As Byte
      7. Dim Dcf_treffer As Byte
      8. Dcf_syssec = Syssec(dcf_sekunden) 'letzte gültige, aber nicht unbedingt korrekte empfangene Zeit
      9. Dcf_temp = 1
      10. Do
      11. Dcf_prev_times(dcf_temp) = Dcf_prev_times(dcf_temp + 1) + 60 'alle Zeiten verschieben und 60s draufaddieren
      12. If Dcf_prev_times(dcf_temp) = Dcf_syssec Then Incr Dcf_treffer 'falls Übereinstimmung, Treffer erhöhen
      13. Incr Dcf_temp 'nächste Zeit
      14. Loop Until Dcf_temp = Dcf_max_previous_count
      15. Dcf_prev_times(dcf_max_previous_count ) = Dcf_syssec 'hier wird die letzte empfangene Zeit abgespeichert
      16. If Dcf_status.1 = 0 And Dcf_treffer_start <= Dcf_treffer Or Dcf_treffer_betrieb <= Dcf_treffer Then
      17. 'fertig, Zeit wird als korrekt angenommen
      Alles anzeigen
      Ist jetzt einfach aus dem Programm herauskopiert, ich hoffe, ich habe nichts vergessen.
    • hero schrieb:

      Das Schlechte an dieser Vorgehensweise (nur mit der letzten Minute vergleichen) ist, dass man nur sehr schwer wieder auf die korrekte Zeit kommt, wenn sie einmal daneben ist.
      Ich denke da bisschen anders. Die Stunde kann mal vermurkst sein, das wird ignoriert und eben 25 angezeigt. Ist die Minute vermurkst, wird die Zeit verworfen und die softclock läuft auch mit einer vermurksten Stunde weiter. Kommen jetzt 2 aufeinander folgende Minuten mit 1 Minute Differenz, dann wird neu synchronisiert und es wäre schon ein Zufall, wenn jetzt wieder die Stunde vermurkst ist. Das ist bei 'check=1' der Fall. Bei 'check=2 werden die Stunden ja auch überprüft, dann würde erst wenn 2 folgende Stunden so vermurkst empfangen werden, dass sie gleich sind, also 2x hintereinander die 25, eine falsche Stunde angezeigt. Aber da gibt es halt mehr Möglichkeiten, das die empfangene Zeit verworfen wird, deswegen steht ja auch bei dieser Option: Use this when you have bad signal reception.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • hero schrieb:

      tschoeatsch schrieb:

      Die Stunde kann mal vermurkst sein, das wird ignoriert und eben 25 angezeigt
      Mir ist halt lieber, dass sie nicht vermurkst wird.
      Mit check=2 ist das doch sehr unwahrscheinlich.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Ja, ich geb' dir Recht. Hab' noch ein bisschen darüber gegrübelt, du sortierst wahrscheinlich gültige Zeiten zu einer gültigen zusammen. Deine Einstellung ist check=0. Wie verhinderst du, dass nicht mit einer vermeindlich gültigen Zeit synchronisiert wird, oder überschreibst du das gleich nach dem Empfang der Minute?
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Nein, jede gültige Zeit wird abgespeichert. Und dann wird überprüft, ob die letzte mit mehreren anderen übereinstimmt. Bei einer ist das unwahrscheinlich, bei mehreren eben umso mehr.
      Ich weiß nicht, ob die Bascom Routine die Wertebereiche der Minuten usw. überprüft, denn dann könnte 25 als Stünde ja nicht vorkommen. Ich mache das jedenfalls.
    • Ja, das hab' ich jetzt schon kapiert. Gültig heißt Parität ist ok, muss aber nicht die richtige Zeit sein. Diese gültige Zeit setzt jetzt die softclock. Verwendest du jetzt die oder bastelst du dir die Variablen für die weitere Verarbeitung jetzt selbst zusammen und verwendest _hour, _min nur als Zwischenspeicher für den Zeitempfang?
      Raum für Notizen

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

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