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!

    • Hallo, ich hatte @maheau0 in Post#129 einen Link gegeben. Dort ist m.M. nach, alles schön
      beschrieben, wie man es selber machen kann. Auch ist eine Decodiertabelle dabei. Ich finde,
      es lohnt sich.
      Die Frage, die sich stellt, ist aber, ist der Zeitstempel des decodierten DCF-Signals richtig?
      Die Paritätsbits sagen nicht wirklich viel darüber aus.
      Ich will das mal an einem Beispiel festmachen. Ich habe zwei Würfel, einer stellt die Stundeneiner,
      der andere die Stundenzehner dar. Jeder Wurf soll 7 Augen ergeben. Das ist also die Parität.
      Jetzt kann ich 6 / 1 , 5 / 2 , 4 / 3 , würfeln. Immer stimmt die Parität.
      Ich kann auch 1 / 6 , 2 / 5 , 3 / 4 , würfeln, auch da stimmt die Parität.
      Die Parität sagt nur aus, das der Empfang korrekt war, über die Qualität der empfangenen Daten
      sagt sie nichts.
      Wenn ich das richtig erinnere, ging es bei der Programmierung auch darum, die Demo-Version (4k)
      zu bemühen.
      Natürlich lässt sich alles mögliche kontrollieren, aber das geht dann auch an den Speicherplatz.
      Es ist also schon eine Risikoabwägung von Nöten. Das soll aber jeder Nutzer für sich selber entscheiden.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Hallo Detlef,
      ich weiß nicht, was du mit „Die Parität sagt nur aus, das der Empfang korrekt war, über die Qualität der empfangenen Daten sagt sie nichts.“
      Vielleicht kannst du das noch mal erklären.

      Mittels der Parity Bits kann man feststellen, ob ein Bit beider Übertragung umgekippt ist, also nicht mehr den Wert vom Sender hat.
      Hier werden redundante Daten mitgeschickt, die kleine Abweichungen sicher erkennbar machen.
      Da es immer nur ein Parity-Bit ist, kann man auch nur ein umgekipptes Bit sicher erkennen, genauso wie 3, 5, 7 usw., wobei dann die Anzahl unklar ist.
      Sind 2 Bits falsch, dann lässt sich über das Parity Bit dazu keine Aussage machen. Genau wie für 4, 6 usw.
      Je größer die Anzahl der Bits ist, die in das Parity Bit einfließen, umso größer ist die Wahrscheinlichkeit, dass nicht nur ein Bit falsch ist.
      Bei den Minuten sind es 7 Bits und das Parity Bit selber, beim Datum dagegen 22 Bits + Parity.

      Eine Weiterverarbeitung ohne zusätzliche Checks außer den Parity Bits ist bei weniger guten Empfangsbedingungen schon recht unsicher.
      Dazu muss natürlich etwas Code und auch ein paar Byte SRAM verwendet werden.
      Und je aufwendiger die Checks sind, umso mehr finden sie, aber umso mehr Ressourcen werden sie auch verbrauchen.
      Wie du sagst, das muss jeder nach seinen Empfangsbedingungen, Anwendung und Chip Größe entscheiden.
      Ich wollte nur meinen Weg zeigen, mit dem auf einfache Art die Schwierigkeiten rund um die Synchronisation behandelt werden können.
    • Was jetzt vielleicht mal interessant wäre, das Verfahren von @hero zusammen mit der bascom dcf-lib zu kombinieren. Nicht jeder schafft das dcf-Signal händisch zu decodieren.
      Check=0 synchronisiert ja bei gültigen Paritäten mit einer 'wahrscheinlich' gültigen Zeit die softclock. Das 'fertige Minute'-Signal wird man auch gut verwenden können. Was man jetzt machen müsste wäre das Sammeln der empfangenen Zeiten, um durch Abgleich die wahrscheinlichste Zeit zu finden und die wiederum in eigene Variablen für Stunde, Minute zu konvergieren und zur Anzeige bringen.
      Raum für Notizen

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

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

      Eine Weiterverarbeitung ohne zusätzliche Checks außer den Parity Bits ist bei weniger guten Empfangsbedingungen schon recht unsicher.
      Genau das wollte ich damit ausdrücken. Vielleicht kam es zu unverständlich rüber.
      Dazu passt auch die Aussage

      hero schrieb:

      Sind 2 Bits falsch, dann lässt sich über das Parity Bit dazu keine Aussage machen.
      Wie du schreibst,

      hero schrieb:

      Ich wollte nur meinen Weg zeigen, mit dem auf einfache Art die Schwierigkeiten rund um die Synchronisation behandelt werden können.
      das wollte ich aber nicht in Frage stellen. Vielmehr darauf hinweisen, das das "händische " überprüfen
      der Daten zur Sicherheit der Anzeige beiträgt.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Hallo Meister Hora,
      vielen Dank für Deinen Code zur Matrix-Uhr mit Max 7219. Er klappt wunderbar, nur habe ich ein Problem mit dem Empfang DCF 77. Ich habe Dein Programm modifiziert für den Einsatz eines RTC mit DS3231. Damit habe ich gute Erfahrungen gemacht. Die Module sind preiswert z.B. bei Amazon zu haben, sie sind viel handlicher als die klobigen "Ferrit-Empfänger". Die Genauigkeit ist für normale Bedürfnisse absolut ausreichend. In einem Monat nur einige Sekunden Abweichung. Die ließen sich noch per Software weiter reduzieren.
      Nebenbei bemerkt imponiert mir Deine Hilfsbereitschaft im Forum!
      Mit freundlichen Grüßen
      Bert
    • @Eule
      Hi Peter, ich vermute jetzt, du hast solche Module, wo der 7219 nicht unter der Ledmatrix, sondern neben der Ledmatrix auf dem Platinchen montiert ist. Diese Typen hab ich nicht bei mir im Hause und ich weiß jetzt auch nicht, welche Led zu 'Zeile1, erstes eingeschobene bit' gehört.
      Das array 'displayspeicher()' ist so organisiert, dass der Index die Spalten sind, 1=linke Spalte, die rechteste Spalte kann man mit 'Anzahl der Module*8' berechnen. Der Bereich von displayspeicher der ausgegeben, somit sichtbar sein soll, ist bit0 bis bit7 vom word des arrays. bit0 der 1. Spalte wäre die Led oben links in der Gesamtmatrix.
      Kannst du sagen, was bei deinen Modulen zur 'Zeile1, erstes eingeschobene bit' welcher Led zugeordnet ist? Rechts oben, oder links unten in der 8x8Matrix? Wieviele Module verwendest du?
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • @Eule
      ich hab mich mal an einer passenden Ausgabe versucht, probieren kann ich nix. Zumindest liefert das Compilieren keinen Fehler :huh:
      probier doch mal:

      Quellcode

      1. Ausgabe:
      2. For N = 1 To 8
      3. Cs = 0
      4. For Spalte = N To 40 Step 8 '5 Module
      5. Temp = Display_speicher(spalte) 'nur bit0 bis bit7 vom word verwenden
      6. Temp = Flip(temp) 'bit-Reihenfolge umkehren, MSB soll als letzte bit ausgegeben werden
      7. Spiout N , 1
      8. Spiout Temp , 1
      9. Next Spalte
      10. Cs = 1
      11. Next N
      12. '(
      13. 'Ausgabe an die Module und den high-Teil des Speicherinhalts anzeigen lassen
      14. For Display_speicher_bit = 0 To 7
      15. Zeilen_nummer = 8 - Display_speicher_bit
      16. Spalte = Anzahl_spalten
      17. Cs = 0
      18. While Spalte > 0
      19. For N = 7 To 0 Step -1
      20. Temp = Display_speicher_bit + 8
      21. Zeile.n = Display_speicher(spalte).temp
      22. Decr Spalte
      23. Next N
      24. Spiout Zeilen_nummer , 1
      25. Spiout Zeile , 1
      26. Wend
      27. Cs = 1
      28. Next Display_speicher_bit
      29. ')
      30. Return
      Alles anzeigen
      Dateien
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • @Eule
      ich kenn mein eigenes Programm nicht mehr X/
      Es muss der bit8 bis bit15 Teil des arrays display_speicher angezeigt werden.

      Quellcode

      1. Ausgabe:
      2. For N = 1 To 8
      3. Cs = 0
      4. For Spalte = N To 40 Step 8 '5 Module
      5. Temp = High(display_speicher(spalte) ) 'nur bit8 bis bit15 vom word verwenden
      6. Spiout N , 1
      7. Spiout Temp , 1
      8. Next Spalte
      9. Cs = 1
      10. Next N
      Raum für Notizen

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

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