Jetzt aber andersrum, MAX7219 8x8 Matrix 4mal.

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Jetzt aber andersrum, MAX7219 8x8 Matrix 4mal.

      Ale die Bascom Codes sind für die 4x8x8 Matrix 4 St. LEISTE. Ich habe aber 4St. einzelne Module, jeder mit 1 Max7219. Die Ausgänge und Eingänge sind oben und unten. Wenn
      man die zusammen schaltet scrollen die Buchstaben von Oben nach Unten. Mein Problem ist wie kann die Spalte auch Adress für Max7219 sein? so daß das Scrollen richtig von Links nach Rechts geht. Meine Idee ist:

      8 mal
      cs=0
      shiftout Adress
      case 1:
      shiftout Inhalt 1
      case 2:
      shiftout Inhalt 2
      cs=1
      u.s.w .......
      weiter aber klemts bei mir. a_67_e210de67 Danke.
    • Ich würde es wieder mit einem 'Bildspeicher' machen, wenn der Text scrollen soll. Große Teile des Programms aus dem Lexikonbeitrag kann man verwenden, nur die Senderoutine an die max7219 muss geändert werden.
      Ich beziehe mich auf das Beispiel im Lexikon. Der Bildspeicher hat die bytes als Spalten, deine Matrixen sind bei deiner Anordnung auch in senkrechte Spalten organisiert. So musst du nur die 1. Spalte des Bildspeichers als erstes in die 1. Spalte des 1. max schieben, dann die 9. Spalte des Bildspeichers in die 1 Spalte des 2. max, die 17. in die 1. Spalte des 3. max usw., dann mit cs- Gezappel übernehmen lassen, dann das selbe Spielchen mir der 2., 10, 18. ..Spalte des Bildspeichers in die 2. Spalten der max. Nach 8 Durchgängen ist der komplette Bildspeicher übertragen.
      Raum für Notizen

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

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

      The post was edited 1 time, last by tschoeatsch ().

    • Probier mal das

      BASCOM Source Code

      1. 'Textausgabe mit 4 Max7219 Led8x8 Matrix mit außenliegendem chip
      2. 'Din-Anschluß oben am rechtesten Modul
      3. $regfile = "m168pdef.dat"
      4. $crystal = 8000000
      5. $hwstack = 34
      6. $swstack = 32
      7. $framesize = 64
      8. 'Alias
      9. Din Alias Portd.0 'Mit DIN an der Max-Platine verbinden
      10. Clk Alias Portd.1 'Mit Clk an der Max-Platine verbinden
      11. Cs Alias Portd.2 'Mit Cs an der Max-Platine verbinden
      12. 'ports
      13. Config Din = Output
      14. Config Clk = Output
      15. Config Cs = Output
      16. 'Variablen
      17. Const Anzahl_displays = 4
      18. Const Spalten = 8 * Anzahl_displays 'maximale Anzahl der Spalten
      19. Dim Bildspeicher(spalten)as Byte
      20. Dim Bs_spalte As Byte 'Spalte im Bildspeicher
      21. Dim Spalte As Byte 'Spalte eines Moduls
      22. Dim Zeile As Byte
      23. Dim Bit_nummer As Byte
      24. Dim Befehl As Byte , Disp_daten As Byte
      25. Dim N As Byte 'Zähler
      26. Dim B As Byte , M As Byte 'Zähler
      27. Dim Tabellenstart As Word 'Nummer des Tabelleneintrags
      28. Dim Ausgabetext As String * 254
      29. Dim Buchstabe As String * 1
      30. Dim Lang As Byte
      31. Dim Scrollpause As Word
      32. 'Start Programm
      33. Scrollpause = 100
      34. Cs = 1
      35. Gosub Init_max7219 'initialisieren für die Verwendung mit der 8x8 Matrix
      36. Do
      37. Ausgabetext = "Hallo Bascom-Gemeinde. Das ist ein Beispiel, wie man einfach einen scrollenden Text auf 8x8 Ledmatrixen anzeigen kann. "
      38. Gosub Text_schreiben
      39. Loop
      40. End
      41. Text_schreiben:
      42. Lang = Len(ausgabetext)
      43. For B = 1 To Lang 'nacheinander die einzelnen Buchstaben durchgehen
      44. Buchstabe = Mid(ausgabetext , B , 1) 'Einzelbuchstaben herauspicken
      45. Tabellenstart = Asc(buchstabe) 'Tabelle berechnen minus 32 zeichen.
      46. Select Case Buchstabe
      47. Case "Ä" : Tabellenstart = &H82
      48. Case "Ö" : Tabellenstart = &H83
      49. Case "Ü" : Tabellenstart = &H84
      50. Case "ä" : Tabellenstart = &H80
      51. Case "ü" : Tabellenstart = &H7F
      52. Case "ö" : Tabellenstart = &H81
      53. Case "ß" : Tabellenstart = &H85
      54. End Select
      55. Tabellenstart = Tabellenstart - 32
      56. Tabellenstart = Tabellenstart * 6
      57. For M = 1 To 6 'das bitmuster spaltenweise in den Speicher schreiben (6 Spalten)
      58. Gosub Shift_bildspeicher_left 'Bildspeicher nach links verschieben
      59. Bs_spalte = Lookup(tabellenstart , Font_6x8)
      60. Bildspeicher(spalten) = Bs_spalte 'in die rechteste Bildspeicherspalte schreiben
      61. Gosub Ausgabe
      62. Waitms Scrollpause
      63. Incr Tabellenstart
      64. Next M
      65. Next B
      66. Return
      67. Shift_bildspeicher_left:
      68. For N = 2 To Spalten
      69. Bildspeicher(n -1) = Bildspeicher(n)
      70. Next N
      71. Return
      72. Ausgabe: 'der Bildspeicher wird an die Max7219 übertragen
      73. For Spalte = 1 To 8 'Spalten der Module
      74. Cs = 0 'Beginn der Datenübertragung
      75. Bs_spalte = Spalte 'offset der Spalten
      76. For N = 1 To Anzahl_displays 'es wird jede 8. Spalte in ein Modul geladen
      77. Shiftout Din , Clk , Spalte , 1
      78. Shiftout Din , Clk , Bildspeicher(bs_spalte) , 1
      79. Bs_spalte = Bs_spalte + 8
      80. Next N
      81. Cs = 1 'Flanke überträgt die Daten für einer Bildspeicher-Zeile an die Max7219
      82. Next Spalte
      83. Return
      84. Init_max7219: ' Initialisieren des MAX7219
      85. Befehl = &H09 : Disp_daten = &H00 ' kein decode "B" für alle Digits weil 8x8 Matrix
      86. Gosub Led_write_command
      87. Befehl = &H0A : Disp_daten = &H04 ' Helligkeit 0-F
      88. Gosub Led_write_command
      89. Befehl = &H0B : Disp_daten = 7 ' Anzahl Digits 8 weil 8x8 Matrix
      90. Gosub Led_write_command
      91. Befehl = &H0F : Disp_daten = 0 ' Test Off
      92. Gosub Led_write_command
      93. Befehl = &H0C : Disp_daten = 1 ' Shutdown Off
      94. Gosub Led_write_command
      95. Return
      96. Led_write_command:
      97. Cs = 0
      98. For N = 1 To Anzahl_displays
      99. Shiftout Din , Clk , Befehl , 1
      100. Shiftout Din , Clk , Disp_daten , 1
      101. Next N
      102. Cs = 1 'Flanke von 0 zu 1 überträgt den Befehl und die Daten in den Max
      103. Return
      104. $include 6x8font_spalten.txt
      Display All
      Ich kann's jetzt nicht probieren, ich hab' gerade keine Aufbau mit dem Matrixen zur Hand. Ich vermute mal, dass die Matrix bezüglich der Lage des Din-Anschlusses bei deinen Modulen genauso auf der Platine sitzt. Dann sollte es passen, wenn du deine Matrixen um 90° nach links drehst, also Din ist oben und am rechtesten Modul.
      Files
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hallo Leute,
      ich habe ein ähnliches Problem mit einer 10x7 Dot_matrix (eigentlich 2mal 5x7 Dor-Matix) mit 3 vorgeschalteten Schieberegistern.
      Bei mir lassen sich nur die Reihen einschalten (high), wenn ich eine Spalte einschalte (high), dann geht am Kreuzungspunkt die LED aus.
      Ich habe dies im Anhang deutlich gemacht. Dort habe ich auch mein Bascom-Programm eingestellt.

      Wer kann mir helfen auf der >Matrix beliebige Zeichen oder Buchstaben anzuzeigen??

      Für Eure Mühe schon ein Danke.
      Programm.jpg
      Files
      • Text 1.jpg

        (318.58 kB, downloaded 13 times, last: )
      • Text 2.jpg

        (269.85 kB, downloaded 13 times, last: )
      • Matrix-Modul.jpg

        (13.27 kB, downloaded 119 times, last: )
      • Schaltplan.jpg

        (82.52 kB, downloaded 20 times, last: )
    • Es wäre schöner den Code einzufügen mit </> (oben rechts) Das Bild ist schlecht zu erkennen und müsste abgetippt werden um es zu simulieren.
      Die Punkte müsten einzeln angefahren werden ähnlich wie die alten Fernseher ein Bild darstellten. Dazu würde ich einen "Bildspeicher'" anlegen und eine Timer-Isr die dann die einzelnen Spalten ausgibt. Damit es nicht furchtbar flackert muß das schnell passieren (>20Bilder pro Sekunde mal 10 5 Spalten mal 24 Bit) >5kbaud . Ideal wäre der Hardware Spi dafür geeignet. Ist der (seine Pins) verplant?
      Welcher Chip sind die Schieberegister? Sie können vermutlich den alten Wert ausgeben während ein Neuer reinkommt?

      djmsc wrote:

      also wird eins davon die Zeilen und zwei die Spalten steuern
      eben nicht. Siehe Schaltplan. Die Belegung ha er schon ausgearbeitet. Sie hat den Vorteil das beide gleichzeitig angesprochen werden können somit nur halbe Übertragungsrate nötig ist.

      The post was edited 1 time, last by Pluto25 ().

    • Hallo,
      bei ELV gibt es bei den Prototypenadaptern (hier Modell PAD4) einen Download. Der ist aber in C geschrieben und C ist mir nur wenig geläufig.
      Mit Bascom konnte ich nur feststellen welches Bit von welchem Scheiberegister die betreffende LED an bzw. ausschaltet. Leider nicht mehr.
      Die Schieberegister scheinen vom Typ 74HC595 zu sein, die jeweils aus einem Schieberegister und einem Speicherregister aufgebaut sind.
      Ich fand noch ein Beispiel, das aber mit nur einem Schieberegister und nur einer Matrix arbeitet. Ich lege es in den Anhang, vielleicht hilft es weiter.
      Ist übrigends auch in C geschrieben.
      Wäre toll, wenn damit beliebige Zeichen angezeigt werden können.
      Dank Euch allen fürs mitmachen.
      Files
    • Der Max72.. ist kein Schieberegister sondern ein kompletter Matrix Controller. Heißt er hat einen "Bildschirmspeicher" und die Ansteuerungslogic intern verbaut. Damit muß er nur noch mit den Bitfolgen beschrieben werden und zeigt diese an bis neue kommen. Oder die Stromversorgung abgeschaltet wird :D
      Wie viele Zeichen in welcher Größe sollen angezeigt werden? Nur ein paar ausgewählte oder ein kompletter Schriftsatz? Dann würde sich ein Font anbieten. z.B. 5x7 für zwei Zeichen nebeneinander oder 7x10 für ein Zeichen quer.
    • Laut Schaltplan sind beide Anzeigen getrennt von einander, also die erste Anzeige DS1 wird von U1A und U2A angesteuert und DS2 von U2A und U3A.
      Dabei sind Bit 0 - 4 (U1A) die Spalten für DS1 und 5 - 7 die ersten drei Zeilen von DS1. Gefolgt von Bit 0 - 3 (U2A) für die Zeilen 4 - 7. Die Bits 4 - 7 (U2A) sind für
      die Zeilen 1 - 4 von DS2 und Bit 0 - 2 (U3A) für die letzten drei Zeilen, danach kommen die letzten 5 Bit von U3A für die 5 Spalten von DS2.

      Die Bit-Folge sollte so aussehen:

      Spalte 1 - 5 , Zeile 1 - 3 , Zeile 4 - 7 , Zeile 1 - 4 , Zeile 5 - 7 , Spalte 1 - 5

      Ich hoffe das hilft erstmal weiter
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Hallo
      ich muß mich entschuldigen, daß manche der Bildchen schlecht lesbar waren. Vorallem das Listing. Ich habe gesehen, daß Listings direkt von Bascom in das Forum übertragen werden können. Leider habe ich noch nicht herausgefunden wie das geht. Wer hat dazu eine Anleitung oder einen Link ??
      Ich stelle dann das Listing nochmlas ein.

      djmsc Du hast Recht, wenn auf der Spalte eine 0 und in der Reihe (bzw. Zeile) eine 1 dann leuchtet die LED, ist in der Spalte eine 1 leuchtet sie nicht.
      Die beiden Anzeigen sind 2 mal 5x7 Matrixen verbunden durch die 3 Bausteine 74HC595, welche wohl die Schieberegister und Speicherregister enthalten oder liege ich da falsch.
      Du sagst die Bits müssen spalten- und zeilen-weise eingegeben werden. Wie sieht denn so was im Bascom-Programm aus. Ich kenne dort keinen Befehl für die Spalte oder Zeile??

      Ich werde am Wochenende mal wieder probieren müssen, na ja das Wetter ist entsprechend.

      Euch allen Danke für heute und schönes Wochenende
    • Lothringen wrote:

      Wer hat dazu eine Anleitung oder einen Link ??
      Wenn du im Editorfenster (hier auf der Seite) auf "</>" klickst kannst du den Code einfügen. Syntax-Hervorhebeung auf BASCOM-Quellcode stellen und dann auf "Speichern" klicken.

      Lothringen wrote:

      oder liege ich da falsch
      Nein, es sind drei Schieberegister 74HC595.

      Du musst vor der Ausgabe mit Shiftout (Bascom-Funktion) die Daten zusammen-bauen.
      Byte 1 enthält die fünf Spalten und die letzten drei Zeilen von DS2, Byte 2 enthält die ersten vier Zeilen von DS2 und die letzten vier Zeilen von DS1 und Byte 3 enthält die ersten drei Zeilen und die fünf Spalten von DS1. Es ist dann natürlich wichtig in welcher Reihenfolge die drei Byte gesendet werden, damit die Anzeige auch stimmt.

      Die Bytes musst du also erstmal mit den Daten füllen die dann angezeigt werden sollen.
      Nachteil ist, dass es kein zusammenhängendes Byte für die Zeilen gibt.
      Ist also ein etwas größerer Aufwand die Daten in die drei Bytes zu packen.

      Ich werde mal einen Testaufbau machen.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Hallo,
      hier noch einmal das Listing zu der 10x7 Dot-Matrix (bzw. 2 mal 5x7 Matrix)
      Ich hoffe jetzt läßt sich das Listing besser einsehen und auch testen ohne abtippen.
      Beim einsetzten des Listings hat mir freundlicherweise djmsc geholfen. Herzlichen Dank dafür. Es hat ja auch gleich geklappt.
      Nun versuche ich es weiter und hoffe auf Erfolg
      Danke und Gruß

      BASCOM Source Code: 10x7 Dot-Matrix

      1. '4d Matrix Soft-SPI mit Schieberegister
      2. $regfile = "m8def.dat" 'Prozessor
      3. $crystal = 3684000 'Taktfrequenz
      4. $baud = 19200
      5. $hwstack = 40
      6. $swstack = 40
      7. $framesize = 80
      8. Takt Alias Portb.5 'B.5 = SRCLK = Takt
      9. Config Takt = Output
      10. Daten Alias Portb.3 'B.3 = Serin = Dateneingabe
      11. Config Daten = Output
      12. Uebernahme Alias Portb.2 'B.2 = RCLK = Übernahme
      13. Config Uebernahme = Output
      14. Oe Alias Portb.1 'B.1 = OE = Matrix ein/aus
      15. Config Oe = Output
      16. Config Portb.0 = Output 'B.0 = LEDs ein/aus
      17. Config Spi = Soft , Din = Pinb.4 , Dout = Daten , Ss = Uebernahme , Clock = Takt , Mode = 0 'SPI-Soft
      18. Spiinit
      19. Waitms 50
      20. Dim I As Byte
      21. Dim Ausgabemuster As Byte
      22. Oe = 1 ' Matrix aus
      23. Uebernahme = 0
      24. Portb.0 = 1
      25. Ausgabemuster = &B1101_0000 'landet im Schieberegister A
      26. Gosub Ausgeben
      27. Ausgabemuster = &B1000_0001 'Landet im Schieberegister B
      28. Gosub Ausgeben
      29. Ausgabemuster = &B0000_0101 'landet im Schieberegister C
      30. Gosub Ausgeben
      31. Waitms 50
      32. Uebernahme = 1 'Übergabe in Speicherregister
      33. Waitms 20
      34. Uebernahme = 0
      35. Waitms 20
      36. Oe = 0 'Matrix einschalten
      37. End
      38. Ausgeben:
      39. For I = 7 To 0 Step -1
      40. Daten = Ausgabemuster.i 'Bit für Bit vom Ausgabemuster in Dateneingabe
      41. Takt = 1
      42. Waitms 20
      43. Takt = 0
      44. Waitms 20
      45. Next
      46. Waitms 20
      47. Return
      Display All