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 Ich hab' hier noch eine abgespeckte Version einer Funkuhr mit max7219 Matrixanzeigen (5 Stück werden benötigt)
      Die Version kannst du auch mit der Demo compilieren und flashen. Du musst aber deinen Kontroller im $regfile eintragen. Die Anschlüsse vom max7219 und dcf-Empfänger stehen im Programm. Ohne Dcf-Empfänger läuft die Uhr mit 00:00:00 los.
      Dateien
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Halo,
      ich habe schon einiges in Bascom probiert.
      Wenn ich den Progammer entsprechend Anleitung auf Arduino stelle, wird der Chip nicht erkannt und ich kann auch keinen Chip per Hand einstellen.

      Wenn ich den Programmer auf STK200.... oder auf Eddie McMullens.. stelle, wird der Chip auch nicht erkannt, aber ich kann per Hand den Chip Auswählen.
      Ich kann den Chip auslesen, nicht beschreiben.
      Geht das überhaupt mit Arduino-Board + Bascom den Chip auszulesen?


      mfg Manfred
    • einen Leonardo hab' ich jetzt nicht da.
      Ich würde den Programmierer schon auf Arduino einstellen, im Gertätemanager nachsehen, welcher com-port verwendet wird und das entsprechend im Programmer einstellen. Dann kommt es noch auf die passende baud-Rate an, bei meinem nano ist es 57600. Da muss du rum probieren, fang mal mit 115200 an. Den chip musst du identifizieren können, dann kannst du auch auslesen. Den Kontroller musst du im Programm richtig angeben, nicht verwechseln.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • maheau0 schrieb:

      Übrigens ist in deiner *.bas der Kontroller m32!
      genau da musst du deinen Kontroller einstellen, das meine ich

      BASCOM-Quellcode

      1. 'Max7219 Test
      2. $regfile = "m32u4def.dat"
      3. $crystal = 16000000
      4. $hwstack = 256
      5. $swstack = 256
      6. $framesize = 256
      7. Max_din Alias Portd.2 : Config Max_din = Output
      8. Max_clk Alias Portd.3 : Config Max_clk = Output
      9. Max_cs Alias Portd.4 : Config Max_cs = Output
      10. 'Das Signal vom DCF-Empfänger wird an den Kontrollerpin portd.7 erwartet
      11. 'DCF77 einrichten
      12. Config Dcf77 = Pind.7 , Timer = 1 , Update = 0 , Inverted = 0 , Check = 1 , Timer1sec = 0 , Gosub = Sectic
      13. 'Set Portd.7 'pullup setzen
      14. Declare Sub Schreiben(byval Text As String , Byval Spalten_nummer As Word )
      15. Enable Interrupts
      16. Const Anzahl_module = 5
      17. Dim Display_speicher(anzahl_module * 8) As Byte '8 Spalten für jedes Modul
      18. Dim Zeile As Byte
      19. Dim Display_speicher_bit As Byte
      20. Dim Zeilen_nummer As Byte
      21. Dim Buchstabe As String * 1
      22. Dim Spalte As Word
      23. Dim Tabellen_stelle As Word
      24. Dim Display_daten As Byte , Display_digit As Byte
      25. Dim X As Byte
      26. Dim N As Byte
      27. Dim Stunde_st As String * 2
      28. Dim Minute_st As String * 2
      29. Dim Sekunde_st As String * 2
      30. Dim Stunde As Byte
      31. Dim Minute As Byte
      32. Dim Sekunde As Byte
      33. Spiinit
      34. Gosub Init_max7219 'Display initialisieren
      35. Gosub Loeschen 'Display loeschen
      36. Wait 1
      37. '##################################################### Main-Frame
      38. _hour = 0 : _min = 0
      39. Do
      40. Do
      41. Sekunde = _sec
      42. Minute = _min
      43. Stunde = _hour
      44. 'formatieren, um führende 0 zu bekommen
      45. Stunde_st = Str(stunde)
      46. Stunde_st = Format(stunde_st , "00")
      47. 'in den Zwischenspeicher schreiben
      48. Call Schreiben(stunde_st , 1)
      49. Minute_st = Str(minute)
      50. Minute_st = Format(minute_st , "00")
      51. Call Schreiben(minute_st , 15)
      52. Sekunde_st = Str(sekunde)
      53. Sekunde_st = Format(sekunde_st , "00")
      54. Call Schreiben(sekunde_st , 29)
      55. 'Doppelpunkte als Trennzeichen in den Zwischenspeicher schreiben
      56. Gosub Trenner
      57. 'Zwischenspeicher ausgeben
      58. Gosub Ausgabe
      59. 'auf die nächste Sekunde warten
      60. While Sekunde = _sec
      61. Wend
      62. Loop
      63. Loop
      64. End
      65. '##################################################### Main-Frame
      66. Sub Schreiben(text As String , Byval Spalten_nummer As Word)
      67. Spalte = Spalten_nummer
      68. For N = 1 To Len(text)
      69. Buchstabe = Mid(text , N , 1) 'Einzelbuchstaben herauspicken
      70. Tabellen_stelle = Asc(buchstabe) 'Tabelle berechnen minus 32 zeichen.
      71. Tabellen_stelle = Tabellen_stelle - 32
      72. Tabellen_stelle = Tabellen_stelle * 6
      73. For X = 0 To 5 'das bitmuster spaltenweise in den Speicher schreiben
      74. Display_speicher(spalte) = Lookup(tabellen_stelle , Font_tabelle)
      75. Tabellen_stelle = Tabellen_stelle + 1
      76. Spalte = Spalte + 1
      77. Next X
      78. Next N
      79. End Sub
      80. Ausgabe:
      81. 'Ausgabe an die Module und den neuen Speicherinhalt anzeigen lassen
      82. For Display_speicher_bit = 0 To 7
      83. Zeilen_nummer = 1 + Display_speicher_bit
      84. Spalte = 1
      85. Max_cs = 0
      86. While Spalte < 41
      87. For N = 7 To 0 Step -1
      88. Zeile.n = Display_speicher(spalte).display_speicher_bit
      89. Incr Spalte
      90. Next N
      91. Shiftout Max_din , Max_clk , Zeilen_nummer , 1
      92. Shiftout Max_din , Max_clk , Zeile , 1
      93. Wend
      94. Max_cs = 1
      95. Next Display_speicher_bit
      96. Return
      97. Trenner: 'Doppelpunkte zwischen Stunde und Minute und Minute und Sekunde innerhalb der Einerstellen
      98. Display_speicher(13) = 20
      99. Display_speicher(14) = 0
      100. Display_speicher(27) = 20
      101. Display_speicher(28) = 0
      102. Return
      103. Init_max7219: ' Initialisieren des MAX7219
      104. Display_digit = &H0C : Display_daten = &H00 ' Shutdown On
      105. Gosub Led_write_command
      106. Display_digit = &H09 : Display_daten = &H00 ' kein decode "B" für alle Digits
      107. Gosub Led_write_command
      108. Display_digit = &H0A : Display_daten = &H03 ' Helligkeit 0-F
      109. Gosub Led_write_command
      110. Display_digit = &H0B : Display_daten = 7 ' Anzahl Digits 8
      111. Gosub Led_write_command
      112. Display_digit = &H0F : Display_daten = 0 ' Test Off
      113. Gosub Led_write_command
      114. Display_digit = &H0C : Display_daten = 1 ' Shutdown Off
      115. Gosub Led_write_command
      116. Return
      117. Led_write_command:
      118. Max_cs = 0
      119. For N = 1 To 6
      120. Shiftout Max_din , Max_clk , Display_digit , 1
      121. Shiftout Max_din , Max_clk , Display_daten , 1
      122. Next N
      123. Max_cs = 1
      124. Return
      125. Loeschen:
      126. For Spalte = 1 To Anzahl_module * 8 '8x8 LED-Array löschen
      127. Display_speicher(spalte) = 0 'Platz zwischen den Zeichen
      128. Next Spalte
      129. Gosub Ausgabe
      130. Return
      131. Sectic:
      132. Return
      133. Font_tabelle:
      134. 'Font5x8
      135. Data 0 , 0 , 0 , 0 , 0 , 0 '
      136. Data 0 , 6 , 95 , 6 , 0 , 0 ' !
      137. Data 7 , 3 , 0 , 7 , 3 , 0 ' "
      138. Data 36 , 126 , 36 , 126 , 36 , 0 ' #
      139. Data 36 , 43 , 106 , 18 , 0 , 0 ' $
      140. Data 99 , 19 , 8 , 100 , 99 , 0 ' %
      141. Data 54 , 73 , 86 , 32 , 80 , 0 ' &
      142. Data 0 , 7 , 3 , 0 , 0 , 0 ' '
      143. Data 0 , 62 , 65 , 0 , 0 , 0
      144. Data 0 , 65 , 62 , 0 , 0 , 0
      145. Data 8 , 62 , 28 , 62 , 8 , 0 ' *
      146. Data 8 , 8 , 62 , 8 , 8 , 0 ' +
      147. Data 0 , 224 , 96 , 0 , 0 , 0 ' ,
      148. Data 8 , 8 , 8 , 8 , 8 , 0 ' -
      149. Data 0 , 96 , 96 , 0 , 0 , 0 ' .
      150. Data 32 , 16 , 8 , 4 , 2 , 0 ' /
      151. 'Data 62 , 81 , 73 , 69 , 62,0 ' 0
      152. Data 62 , 65 , 65 , 65 , 62 , 0 ' 0
      153. Data 0 , 66 , 127 , 64 , 0 , 0 ' 1
      154. Data 98 , 81 , 73 , 73 , 70 , 0 ' 2
      155. Data 34 , 73 , 73 , 73 , 54 , 0 ' 3
      156. Data 24 , 20 , 18 , 127 , 16 , 0 ' 4
      157. Data 47 , 73 , 73 , 73 , 49 , 0 ' 5
      158. Data 60 , 74 , 73 , 73 , 48 , 0 ' 6
      159. Data 1 , 113 , 9 , 5 , 3 , 0 ' 7
      160. Data 54 , 73 , 73 , 73 , 54 , 0 ' 8
      161. Data 6 , 73 , 73 , 41 , 30 , 0 ' 9
      162. Data 0 , 108 , 108 , 0 , 0 , 0 ' :
      163. Data 0 , 236 , 108 , 0 , 0 , 0 ' '
      164. Data 8 , 20 , 34 , 65 , 0 , 0 ' <
      165. Data 36 , 36 , 36 , 36 , 36 , 0 ' =
      166. Data 0 , 65 , 34 , 20 , 8 , 0 ' >
      167. Data 2 , 1 , 89 , 9 , 6 , 0 ' ?
      168. Data 62 , 65 , 93 , 85 , 30 , 0 ' @
      169. Data 126 , 17 , 17 , 17 , 126 , 0 ' A
      170. Data 127 , 73 , 73 , 73 , 54 , 0 ' B
      171. Data 62 , 65 , 65 , 65 , 34 , 0 ' C
      172. Data 127 , 65 , 65 , 65 , 62 , 0 ' D
      173. Data 127 , 73 , 73 , 73 , 65 , 0 ' E
      174. Data 127 , 9 , 9 , 9 , 1 , 0 ' F
      175. Data 62 , 65 , 73 , 73 , 122 , 0 ' G
      176. Data 127 , 8 , 8 , 8 , 127 , 0 ' H
      177. Data 0 , 65 , 127 , 65 , 0 , 0 ' I
      178. Data 48 , 64 , 64 , 64 , 63 , 0 ' J
      179. Data 127 , 8 , 20 , 34 , 65 , 0 ' K
      180. Data 127 , 64 , 64 , 64 , 64 , 0 ' L
      181. Data 127 , 2 , 4 , 2 , 127 , 0 ' M
      182. Data 127 , 2 , 4 , 8 , 127 , 0 ' N
      183. Data 62 , 65 , 65 , 65 , 62 , 0 ' O
      184. Data 127 , 9 , 9 , 9 , 6 , 0 ' P
      185. Data 62 , 65 , 81 , 33 , 94 , 0 ' Q
      186. Data 127 , 9 , 9 , 25 , 102 , 0 ' R
      187. Data 38 , 73 , 73 , 73 , 50 , 0 ' S
      188. Data 1 , 1 , 127 , 1 , 1 , 0 ' T
      189. Data 63 , 64 , 64 , 64 , 63 , 0 ' U
      190. Data 31 , 32 , 64 , 32 , 31 , 0 ' V
      191. Data 63 , 64 , 60 , 64 , 63 , 0 ' W
      192. Data 99 , 20 , 8 , 20 , 99 , 0 ' X
      193. Data 7 , 8 , 112 , 8 , 7 , 0 ' Y
      194. Data 113 , 73 , 69 , 67 , 0 , 0 ' Z
      Alles anzeigen
      ich glaube, du hast einen mega32u4 Kontroller, den hab' ich mal hier in dem code eingestellt.
      Ich habe auch noch die Ansteuerung der Max umgestellt, die neuen pinBelegungen sind angegeben. Das hab' ich gemacht, weil zB. bei meinem nano die Led auf dem Sck-pin angeschlossen ist.

      Also, wenn du den Programmer mit F4 von bascom aus aufrufst, kannst du dann mit 'chip' -> 'Identify' den chip auf dem Leonardo identifizieren?
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Ich muss jetzt weg. Starte bascom neu, lade den geposteten code und compiliere ihn. Das muss mit der demo auch gehen, das Programm braucht nur 3k byte. Dann hast du die hex gleich. Ich würde erst morgen dazu kommen.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • hier ist die .bas von post#55 zusammen mit der .bin und .hex
      Dateien
      Raum für Notizen

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

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