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!

    • maheau0 schrieb:

      der Chip wird immer noch nicht erkannt..
      Habe auf einen anderen Rechner(Window 7) probiert: Leonardo -> nein ; Uno --> ja
      Habe mir ein neues Board bestellt. Mal sehen ob es damit klappt.
      Der Leonardo ist etwas anders als der Uno, in der Bascom-Hilfe wird eine andere Programmierung erwähnt:
      avrhelp.mcselec.com/index.html?arduino.htm

      Zitat:

      ARDUINO Leonardo
      For some reason each arduino board seems to use a different bootloader method. The leonardo implements a virtual COM port. When opened at 1200 baud, the board resets into another virtual COM device with a different COM port number.
      In BASCOM you need to chose the myAVR MK2 / AVR910 programmer since Leonardo uses the AVR910 loader from Atmel.
      You need to select the COM port that you get at Boot time. The baud is 115200.
      To program, press the reset button, wait till the USB is enumerated and the Virtual COM port is ready, then press F4 to program the processor.

      Zitat Ende

      Also Baudrate 115200, richtiger COM-Port und myAVR MK2 / AVR91
    • Hallo ,
      ich habe gestern schon entsprechend Anleitung mit Avrdude probiert.
      Bei der Eingabe der Parameter wurde bloß die Hälfte der Parameterzeile übernommen --- es ging nicht ( es konnte nur eine bestimmte Anzahl an Zeichen eingegeben werden).
      Eine weiter Möglichkeit wäre, wenn mir Meister Hora mir bitte die Hex-File für einen Uno schicken könnte ( bitte auch die abgespeckte Version ).

      mfg Manfred
    • bitteschön. Die zip enthält .bas, .bin und .hex
      es schaut dann so aus
      uno mit max7219.jpg
      Dateien
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Das ist die, hat 3206 bytes für den flash.
      Die .hex ist immer größer, schau dir die Größe von der .bin an, das ist das, was in den flash geschrieben wird.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hallo Meiste Hora.,
      ich konnte den Uno programmieren.
      Habe mal eine Anzeige rangehangen - z.Zt. nur 4 Module - es fehlen die Sunden zehner und 50% der Stunden 1-ner. ----> auf dem Leonhard-Board scheint kein Usb-Schalkreis zu sein.
      Die Uhr läuft im Sekundentakt- die Sekunden srollen nict.
      Vielleicht kannst du mir bitte Die Dateien schicken.

      mfg Manfred
    • maheau0 schrieb:

      auf dem Leonhard-Board scheint kein Usb-Schalkreis zu sein
      Braucht es auch nicht, da das ganze über den Bootloader vom AVR läuft.
      Die Dateien stehen doch im Post #64 zum download bereit. Mehr gibt es für diese Uhr nicht.
      Wenn du jetzt nur vier Anzeigen hast musst du das in der .bas Datei entsprechend anpassen und nur Stunden und Minuten ausgeben.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • @maheau0 die abgespeckte Version scrollt nicht, weil abgespeckt. Die scrollende Version hat mehr wie 4k byte. Aber ich werde dir morgen eine .hex mit den gleichen pin-Einstellungen vorbereiten. Die solltest du mit der demoVersion auch in deinen uno laden können.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hallo Meister Hora,
      ich will schon 5 Module einsetzen --> ich hatte nur eine komplette Anzeige mit 4 Modulen zur Hand , muß noch ein 5-tes anbauen.
      Bitte die Dateien für 5-Module schicken ( wenn es Probleme mit der Demo gibt, finde ich bestimmt jemand, der die Vollversion hat und mir den Uno programmiert)

      mfg Manfred
    • Hier hast du was zum Spielen und Üben
      Probiere doch mal das hier gezeigte listing in den bascom-editor zu kopieren, zu compilieren und zu flashen.

      BASCOM-Quellcode

      1. 'Max7219 Test
      2. 'Uhrzeit wird wie mit einem Walzenzählwerk angezeigt
      3. $regfile = "m328pdef.dat"
      4. $crystal = 16000000
      5. $hwstack = 256
      6. $swstack = 256
      7. $framesize = 256
      8. Max_din Alias Portd.2 : Config Max_din = Output
      9. Max_clk Alias Portd.3 : Config Max_clk = Output
      10. Max_cs Alias Portd.4 : Config Max_cs = Output
      11. 'Das Signal vom DCF-Empfänger wird an den Kontrollerpin portd.7 erwartet
      12. 'DCF77 einrichten
      13. Config Dcf77 = Pind.7 , Timer = 1 , Update = 0 , Inverted = 0 , Check = 1 , Timer1sec = 0 , Gosub = Sectic
      14. 'Set Portd.7 'pullup setzen
      15. Declare Sub Schreiben(byval Ziffer As Byte , Byval Spalten_nummer As Byte )
      16. Enable Interrupts
      17. Const Anzahl_module = 5
      18. Dim Vergleichs_speicher(40) As Byte
      19. Dim Display_speicher(anzahl_module * 8) As Word '8 Spalten für jedes Modul
      20. Dim Zeile As Byte
      21. Dim Display_speicher_bit As Byte
      22. Dim Zeilen_nummer As Byte
      23. Dim Spalte As Byte
      24. Dim Tabellen_stelle As Byte
      25. Dim Display_daten As Byte , Display_digit As Byte
      26. Dim X As Byte , Z As Byte , Zz As Byte
      27. Dim N As Byte , Vergleichsbyte As Byte
      28. Dim Stunde_zehner As Byte , Stunde_einer As Byte
      29. Dim Minute_zehner As Byte , Minute_einer As Byte
      30. Dim Sekunde_zehner As Byte , Sekunde_einer As Byte
      31. Dim Stunde_zehner_alt As Byte , Stunde_einer_alt As Byte
      32. Dim Minute_zehner_alt As Byte , Minute_einer_alt As Byte
      33. Dim Sekunde_zehner_alt As Byte , Sekunde_einer_alt As Byte
      34. Dim Sekunde As Byte
      35. Time$ = "09:59:30" 'nur zu Testzwecken, kann auskommentiert werden
      36. Gosub Init_max7219 'Display initialisieren
      37. '##################################################### Main-Frame
      38. Sekunde_zehner_alt = 1
      39. Sekunde_einer_alt = 1
      40. Minute_zehner_alt = 1
      41. Minute_einer_alt = 1
      42. Stunde_zehner_alt = 1
      43. Stunde_einer_alt = 1
      44. Do
      45. Do
      46. Sekunde = _sec
      47. Sekunde_zehner = _sec / 10
      48. Sekunde_einer = _sec Mod 10
      49. Minute_zehner = _min / 10
      50. Minute_einer = _min Mod 10
      51. Stunde_zehner = _hour / 10
      52. Stunde_einer = _hour Mod 10
      53. 'in den Vergleichsspeicher schreiben
      54. Call Schreiben(stunde_zehner , 1)
      55. Call Schreiben(stunde_einer , 7)
      56. Vergleichs_speicher(13) = 20
      57. Vergleichs_speicher(14) = 0
      58. Display_speicher(13) = 20 * 256
      59. Display_speicher(14) = 0
      60. Call Schreiben(minute_zehner , 15)
      61. Call Schreiben(minute_einer , 21)
      62. Vergleichs_speicher(27) = 20
      63. Vergleichs_speicher(28) = 0
      64. Display_speicher(27) = 20 * 256
      65. Display_speicher(28) = 0
      66. Call Schreiben(sekunde_zehner , 29)
      67. Call Schreiben(sekunde_einer , 35)
      68. 'Ziffern anzeigen und die veränderten umändern
      69. For Z = 1 To 8
      70. If Stunde_zehner_alt <> Stunde_zehner Then
      71. For Zz = 1 To 6
      72. Vergleichsbyte = High(display_speicher(zz))
      73. Shift Display_speicher(zz) , Left , 1
      74. Next Zz
      75. End If
      76. If Stunde_einer_alt <> Stunde_einer Then
      77. For Zz = 7 To 12
      78. Vergleichsbyte = High(display_speicher(zz))
      79. Shift Display_speicher(zz) , Left , 1
      80. Next Zz
      81. End If
      82. If Minute_zehner_alt <> Minute_zehner Then
      83. For Zz = 15 To 20
      84. Vergleichsbyte = High(display_speicher(zz))
      85. Shift Display_speicher(zz) , Left , 1
      86. Next Zz
      87. End If
      88. If Minute_einer_alt <> Minute_einer Then
      89. For Zz = 21 To 26
      90. Vergleichsbyte = High(display_speicher(zz))
      91. Shift Display_speicher(zz) , Left , 1
      92. Next Zz
      93. End If
      94. If Sekunde_zehner_alt <> Sekunde_zehner Then
      95. For Zz = 29 To 34
      96. Vergleichsbyte = High(display_speicher(zz))
      97. Shift Display_speicher(zz) , Left , 1
      98. Next Zz
      99. End If
      100. If Sekunde_einer_alt <> Sekunde_einer Then
      101. For Zz = 35 To 40
      102. Vergleichsbyte = High(display_speicher(zz))
      103. Shift Display_speicher(zz) , Left , 1
      104. Next Zz
      105. End If
      106. Gosub Ausgabe
      107. Waitms 50
      108. Next Z
      109. Sekunde_zehner_alt = Sekunde_zehner
      110. Sekunde_einer_alt = Sekunde_einer
      111. Minute_zehner_alt = Minute_zehner
      112. Minute_einer_alt = Minute_einer
      113. Stunde_zehner_alt = Stunde_zehner
      114. Stunde_einer_alt = Stunde_einer
      115. 'auf die nächste Sekunde warten
      116. While Sekunde = _sec
      117. Wend
      118. Loop
      119. Loop
      120. End
      121. '##################################################### Main-Frame
      122. Sub Schreiben(ziffer As Byte , Byval Spalten_nummer As Byte)
      123. Spalte = Spalten_nummer
      124. Tabellen_stelle = Ziffer * 6
      125. For X = 0 To 5 'das bitmuster spaltenweise in den Speicher schreiben
      126. Vergleichs_speicher(spalte) = Lookup(tabellen_stelle , Font_tabelle)
      127. Display_speicher(spalte) = Display_speicher(spalte) And &HFF00
      128. Display_speicher(spalte) = Display_speicher(spalte) + Vergleichs_speicher(spalte) 'in den lsb-byte vom word schreiben
      129. Tabellen_stelle = Tabellen_stelle + 1
      130. Spalte = Spalte + 1
      131. Next X
      132. End Sub
      133. Ausgabe:
      134. 'Ausgabe an die Module und den neuen Speicherinhalt anzeigen lassen
      135. For Display_speicher_bit = 8 To 15 'die msb-bits werden angezeigt
      136. Zeilen_nummer = Display_speicher_bit - 7
      137. Spalte = 1
      138. Max_cs = 0
      139. While Spalte < 41
      140. For N = 7 To 0 Step -1
      141. Zeile.n = Display_speicher(spalte).display_speicher_bit
      142. Incr Spalte
      143. Next N
      144. Shiftout Max_din , Max_clk , Zeilen_nummer , 1
      145. Shiftout Max_din , Max_clk , Zeile , 1
      146. Wend
      147. Max_cs = 1
      148. Next Display_speicher_bit
      149. Return
      150. Init_max7219: ' Initialisieren des MAX7219
      151. Display_digit = &H0C : Display_daten = &H00 ' Shutdown On
      152. Gosub Led_write_command
      153. Display_digit = &H09 : Display_daten = &H00 ' kein decode "B" für alle Digits
      154. Gosub Led_write_command
      155. Display_digit = &H0A : Display_daten = &H03 ' Helligkeit 0-F
      156. Gosub Led_write_command
      157. Display_digit = &H0B : Display_daten = 7 ' Anzahl Digits 8
      158. Gosub Led_write_command
      159. Display_digit = &H0F : Display_daten = 0 ' Test Off
      160. Gosub Led_write_command
      161. Display_digit = &H0C : Display_daten = 1 ' Shutdown Off
      162. Gosub Led_write_command
      163. Return
      164. Led_write_command:
      165. Max_cs = 0
      166. For N = 1 To 5 'alle 5 Max bekommen die Einstellungen gesendet
      167. Shiftout Max_din , Max_clk , Display_digit , 1
      168. Shiftout Max_din , Max_clk , Display_daten , 1
      169. Next N
      170. Max_cs = 1
      171. Return
      172. Sectic:
      173. Return
      174. Font_tabelle:
      175. 'Font5x8
      176. 'Data 62 , 81 , 73 , 69 , 62,0 ' 0
      177. Data 62 , 65 , 65 , 65 , 62 , 0 ' O
      178. Data 0 , 66 , 127 , 64 , 0 , 0 ' 1
      179. Data 98 , 81 , 73 , 73 , 70 , 0 ' 2
      180. Data 34 , 73 , 73 , 73 , 54 , 0 ' 3
      181. Data 24 , 20 , 18 , 127 , 16 , 0 ' 4
      182. Data 47 , 73 , 73 , 73 , 49 , 0 ' 5
      183. Data 60 , 74 , 73 , 73 , 48 , 0 ' 6
      184. Data 1 , 113 , 9 , 5 , 3 , 0 ' 7
      185. Data 54 , 73 , 73 , 73 , 54 , 0 ' 8
      186. Data 6 , 73 , 73 , 41 , 30 , 0 ' 9
      Alles anzeigen
      die nächste Übung wäre das time$ in Zeile 38 mit der aktuellen Uhrzeit zu versehen, zu compilieren und flashen. Dann hättest du schon mal eine Uhr, die die aktuelle Zeit anzeigt. Und natürlich irgendwann mal deinen DCF-Empfänger anschließen.
      Zur Not findest du in der .zip auch die .bin und .hex des obigen Programms.
      Dateien
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hallo,
      ich habe versucht das 5. Modull anzubauen.. Es gibt aber ein Problem, daß bei den Komplettmudul die Led punkförmig leuchten und die Einzelmodule die Led* flächenmäßig leuchten. So muß ich 5x Einzelmodule verdrahten.
      Hast du zufälolig ein 5-stelliges Mpdul bei ebay gefunden?

      mfg Manfred
    • Hallo Meister Hora,
      einige Fragen zum DCF-Modul:
      - welcher Ausgang? normal oder invertiert - ist offener Kolektoranschluß möglich?
      - wird die Uhr jede Minute über Dcf syncronisiert, oder 1x pro Tag ?
      - blinkt in der Anzeige der Doppelpunkt?

      PS: Ich habe mal testweise 5 Module verbunden ---> läuft

      mfg Manfred
    • Das Signal kommt an portd.7, steht im listing. Invertiert oder nicht kommt auf deinen Empfänger an, jetzt ist das Programm auf nicht invertiert eingestellt. Offener Kollektor geht, dann musst du den pullup aktivieren, das ist der Befehl Set portd.7.
      Die Uhr wird, so wie es jetzt programmiert ist, mit jedem gültigen Zeitempfang synchronisiert. Man sieht nix davon im Programm. Wenn du keinen Empfang zustande bringst, könnte das am Netzteil liegen oder räumliche Nähe Empfänger mit der Anzeige. Das sind zumindest meine Erfahrungen mit dem Pollinempfänger.
      Übrigens sind im letzten Programm paar Leichen versteckt, die von einem Vorversuch (der nicht g'scheit ging) übrig geblieben sind. Die verbrauchen jetzt bisschen Platz. Wenn man die entsorgt wäre vielleicht noch Platz für Blinken und anderen Schnickschnack bei <4k byte (demoVersionfähig). :huh:
      Raum für Notizen

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

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