2 x 10x7 LED-Matrix-Displays mit 3 x 74HC595

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

    • 2 x 10x7 LED-Matrix-Displays mit 3 x 74HC595

      Hallo,

      ich habe mal für das im Titel genannte Thema einen neuen Thread zur Weiterführung von der Anfrage im Beitrag

      Jetzt aber andersrum, MAX7219 8x8 Matrix 4mal.

      angelegt, da es auch nicht so ganz zum Thema MAX7219 passt.


      Ich habe jetzt das Programm erstmal soweit, dass ich vier Buchstaben aus einer Tabelle hole und diese auf den vier 5x7 Anzeigen darstelle.

      20201007_212359.jpg

      Als nächtes wird noch eine Laufschrift eingebaut.

      BASCOM Source Code

      1. '2 x 2x5x7 Punkt-Matrix-Anzeige
      2. 'Ausgabe von 15 Byte je 10x7 Display
      3. 'Byte-Reihenfolge
      4. '
      5. 'Byte 3 Byte 2 Byte 1
      6. '
      7. 'Spalten 5 Bit u.Daten 3 Bit DS1 Daten 2x4 Bit Daten 3 Bit u. Spalten 5 Bit DS2
      8. '
      9. 'Als Beispiel für die erste Spalte von beiden Anzeigen
      10. '&b10000xxx &Bxxxx_xxxx &Bxxx10000
      11. '
      12. 'Ausgabe der Bits an Shiftregister 74HC595
      13. 'Byte 1 Byte 2 Byte 3
      14. '76543210 76543210 76543210
      15. '
      16. 'OE dauerhaft auf GND und /SRCLK (Reset) dauerhaft auf VCC
      17. 'Spaltenzähler für DS1 von Spalte 1 - 5 30,29,27,23,15
      18. 'Spaltebzähler für DS2 von Spalte 1 - 5 240,232,216,184,120
      19. $regfile = "m8def.dat"
      20. $crystal = 8000000
      21. $hwstack = 100
      22. $swstack = 100
      23. $framesize = 100
      24. Daten Alias Portd.2
      25. Sck Alias Portd.3
      26. Rck Alias Portd.4
      27. Config Daten = Output 'Ausgabe der Daten an die Schieberegister
      28. Config Sck = Output 'Takt zum Schieben der Daten im 74HC595
      29. Config Rck = Output 'Übernahmetakt in das Ausgaberegister vom 74HC595
      30. Dim Text As String * 20 , Temp_text As String * 20
      31. Dim Buchstabe1 As String * 1 , Buchstabe2 As String * 1
      32. Dim Buchstabe3 As String * 1 , Buchstabe4 As String * 1
      33. Dim Spalte_ds1 As Byte , Spalte_ds2 As Byte , Spalte_ds3 As Byte , Spalte_ds4 As Byte
      34. Dim Zaehler As Byte , Spaltenzaehler As Byte , Zeilenzaehler As Byte
      35. Dim Zaehler1 As Word , Zaehler2 As Word , Zaehler3 As Word , Zaehler4 As Word
      36. Dim Ascii_code1 As Word , Ascii_code2 As Word , Ascii_code3 As Word , Ascii_code4 As Word
      37. Dim Temp_daten1 As Byte , Temp_daten2 As Byte , Temp_daten3 As Byte , Temp_daten4 As Byte
      38. Dim Temp_byte1 As Byte , Temp_byte2 As Byte , Temp_byte3 As Byte , Temp_byte4 As Byte , Temp_byte5 As Byte , Temp_byte6 As Byte
      39. Dim Bildspeicher(30) As Byte , Bildspeicherzaehler As Byte
      40. Dim Buchstabenmuster1(5) As Byte , Buchstabenmuster2(5) As Byte
      41. Dim Buchstabenmuster3(5) As Byte , Buchstabenmuster4(5) As Byte
      42. Text = "Test"
      43. Temp_text = Text
      44. Rck = 1
      45. Gosub Daten_sammeln
      46. Do
      47. Gosub Anzeige
      48. Loop
      49. End
      50. Daten_sammeln:
      51. Buchstabe1 = Mid(text , 1 , 1) 'Buchstabe 1 ganz links
      52. Buchstabe2 = Mid(text , 2 , 1) 'Buchstabe 2
      53. Buchstabe3 = Mid(text , 3 , 1) 'Buchstabe 3
      54. Buchstabe4 = Mid(text , 4 , 1) 'Buchstabe 4 ganz rechts
      55. Ascii_code1 = Asc(buchstabe1) 'Buchstabe in Ascii-Code umwandeln
      56. Ascii_code1 = Ascii_code1 - 32 'Von Ascii-Code 32 abziehen, da Tabelle bei 0 und nicht bei 32 beginnt
      57. Ascii_code1 = Ascii_code1 * 5 'mit 5 multizieren, um auf Anfangsindex der Tabelle zu kommen
      58. Ascii_code2 = Asc(buchstabe2) 'Buchstabe in Ascii-Code umwandeln
      59. Ascii_code2 = Ascii_code2 - 32 'Von Ascii-Code 32 abziehen, da Tabelle bei 0 und nicht bei 32 beginnt
      60. Ascii_code2 = Ascii_code2 * 5 'mit 5 multiplizieren, um auf Anfangsindex der Tabelle zu kommen
      61. Ascii_code3 = Asc(buchstabe3) 'Buchstabe in Ascii-Code umwandeln
      62. Ascii_code3 = Ascii_code3 - 32 'Von Ascii-Code 32 abziehen, da Tabelle bei 0 und nicht bei 32 beginnt
      63. Ascii_code3 = Ascii_code3 * 5 'mit 5 multiplizieren, um auf Anfangsindex der Tabelle zu kommen
      64. Ascii_code4 = Asc(buchstabe4) 'Buchstabe in Ascii-Code umwandeln
      65. Ascii_code4 = Ascii_code4 - 32 'Von Ascii-Code 32 abziehen, da Tabelle bei 0 und nicht bei 32 beginnt
      66. Ascii_code4 = Ascii_code4 * 5 'mit 5 multiplizieren, um auf Anfangsindex der Tabelle zu kommen
      67. For Spaltenzaehler = 0 To 4
      68. Zaehler1 = Ascii_code1 + Spaltenzaehler 'Zähler für Datentabelle
      69. Temp_daten1 = Lookup(zaehler1 , Zeichensatz) 'Daten aus Tabelle holen
      70. Temp_daten1 = Flip(temp_daten1) 'Bits komplett tauschen Bit0 = Bit7, Bit1 = Bit6 usw.
      71. Buchstabenmuster1(spaltenzaehler + 1) = Temp_daten1 'In Buchstabenmuster speichern
      72. Zaehler2 = Ascii_code2 + Spaltenzaehler 'Zähler für Datentabelle
      73. Temp_daten2 = Lookup(zaehler2 , Zeichensatz) 'Daten aus Tabelle holen
      74. Temp_daten2 = Flip(temp_daten2) 'Bits komplett tauschen Bit0 = Bit7, Bit1 = Bit6 usw.
      75. Buchstabenmuster2(spaltenzaehler + 1) = Temp_daten2 'In Buchstabenmuster speichern
      76. Zaehler3 = Ascii_code3 + Spaltenzaehler 'Zähler für Datentabelle
      77. Temp_daten3 = Lookup(zaehler3 , Zeichensatz) 'Daten aus Tabelle holen
      78. Temp_daten3 = Flip(temp_daten3) 'Bits komplett tauschen Bit0 = Bit7, Bit1 = Bit6 usw.
      79. Buchstabenmuster3(spaltenzaehler + 1) = Temp_daten3 'In Buchstabenmuster speichern
      80. Zaehler4 = Ascii_code4 + Spaltenzaehler 'Zähler für Datentabelle
      81. Temp_daten4 = Lookup(zaehler4 , Zeichensatz) 'Daten aus Tabelle holen
      82. Temp_daten4 = Flip(temp_daten4) 'Bits komplett tauschen Bit0 = Bit7, Bit1 = Bit6 usw.
      83. Buchstabenmuster4(spaltenzaehler + 1) = Temp_daten4 'In Buchstabenmuster speichern
      84. Next Spaltenzaehler
      85. Bildspeicherzaehler = 1
      86. For Spaltenzaehler = 0 To 4
      87. Temp_daten1 = Buchstabenmuster1(spaltenzaehler + 1)
      88. Temp_daten2 = Buchstabenmuster2(spaltenzaehler + 1)
      89. Temp_daten3 = Buchstabenmuster3(spaltenzaehler + 1)
      90. Temp_daten4 = Buchstabenmuster4(spaltenzaehler + 1)
      91. Spalte_ds1 = Lookup(spaltenzaehler , Spalten_ds1)
      92. Spalte_ds2 = Lookup(spaltenzaehler , Spalten_ds2)
      93. Temp_byte1 = Temp_daten4 'Buchstabe 4 in Temp_byte1 laden
      94. Shift Temp_byte1 , Right , 4 'Bits von Temp_byte1 5 x nach rechts verschieben
      95. Temp_byte1 = Temp_byte1 Or Spalte_ds2 'Temp_byte1 mit Spalte x von DS2 verknüpfen
      96. Temp_byte3 = Temp_daten3 'Buchstabe 3 in Temp_byte3 laden
      97. Shift Temp_byte3 , Left , 5 'Bits von Temp_byte3 4 x nach links schieben
      98. Temp_byte3 = Temp_byte3 Or Spalte_ds1 'Temp_byte3 mit Spalte x von DS1 verknüpfen
      99. Temp_byte2 = Temp_daten4 'Buchstabe 4 in Temp_byte2 laden
      100. Shift Temp_byte2 , Left , 4 'Bits von Temp_byte2 3 x nach links verschieben
      101. Shift Temp_daten3 , Right , 3 'Temp_daten1 (Buchstabe 3) 4 x nach rechts verschieben
      102. Temp_byte2 = Temp_byte2 Or Temp_daten3 'Temp_byte2 mit Temp_daten1 verknüpfen
      103. Temp_byte4 = Temp_daten2 'Buchstabe 2 in Temp_byte4 laden
      104. Shift Temp_byte4 , Right , 4 'Bits von Temp_byte4 5 x nach rechts verschieben
      105. Temp_byte4 = Temp_byte4 Or Spalte_ds2 'Temp_byte4 mit Spalte x von DS2 verknüpfen
      106. Temp_byte6 = Temp_daten1 'Buchstabe 1 in Temp_byte6 laden
      107. Shift Temp_byte6 , Left , 5 'Bits von Temp_byte6 4 x nach links schieben
      108. Temp_byte6 = Temp_byte6 Or Spalte_ds1 'Temp_byte6 mit Spalte x von DS1 verknüpfen
      109. Temp_byte5 = Temp_daten2 'Buchstabe 2 in Temp_byte5 laden
      110. Shift Temp_byte5 , Left , 4 'Bits von Temp_byte5 3 x nach links verschieben
      111. Shift Temp_daten1 , Right , 3 'Temp_daten1 (Buchstabe 1) 4 x nach rechts verschieben
      112. Temp_byte5 = Temp_byte5 Or Temp_daten1 'Temp_byte5 mit Temp_daten1 verknüpfen
      113. Bildspeicher(bildspeicherzaehler) = Temp_byte1 'Temp_byte1 an Bildspeicher übergeben
      114. Bildspeicher(bildspeicherzaehler + 1) = Temp_byte2 'Temp_byte2 an Bildspeicher übergeben
      115. Bildspeicher(bildspeicherzaehler + 2) = Temp_byte3 'Temp_byte3 an Bildspeicher übergeben
      116. Bildspeicher(bildspeicherzaehler + 3) = Temp_byte4 'Temp_byte4 an Bildspeicher übergeben
      117. Bildspeicher(bildspeicherzaehler + 4) = Temp_byte5 'Temp_byte5 an Bildspeicher übergeben
      118. Bildspeicher(bildspeicherzaehler + 5) = Temp_byte6 'Temp_byte6 an Bildspeicher übergeben
      119. Bildspeicherzaehler = Bildspeicherzaehler + 6
      120. Next Spaltenzaehler
      121. Return
      122. Anzeige:
      123. For Zaehler = 0 To 24 Step 6
      124. Shiftout Daten , Sck , Bildspeicher(zaehler + 1) , 0
      125. Shiftout Daten , Sck , Bildspeicher(zaehler + 2) , 0
      126. Shiftout Daten , Sck , Bildspeicher(zaehler + 3) , 0
      127. Shiftout Daten , Sck , Bildspeicher(zaehler + 4) , 0
      128. Shiftout Daten , Sck , Bildspeicher(zaehler + 5) , 0
      129. Shiftout Daten , Sck , Bildspeicher(zaehler + 6) , 0
      130. Rck = 0
      131. Rck = 1
      132. Next Zaehler
      133. Return
      134. Spalten_ds1:
      135. Data 30 , 29 , 27 , 23 , 15
      136. Spalten_ds2:
      137. Data 240 , 232 , 216 , 184 , 120
      138. $include "Zeichensatz.inc"
      139. 'Ende
      Display All
      Files
      • Zeichensatz.inc

        (14.04 kB, downloaded 5 times, last: )
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Hallo,
      toll, daß es nun weitergeht.
      Ich werde es mal ausprobieren.
      Habe aber einen anderen Lösungsansatz gewählt, mit dem ich noch experiementiere. Ist leider wegen Zeitmangel noch nicht sehr weit. Werde aber mich melden, wenn es läuft.
      Gruß
    • Hallo,
      habe Dein Programm mal reingeholt.
      Es zeigt beim Prüfen des Quellcodes folgende Fehler:
      1. Zeile 81 "Variable not dimensioned"
      2. Zeile 85 "Variable not dimensioned" und "NEXT expected"
      Ich kann leide nicht finden wo der Fehelr herkommt.
      Gruß
    • Teste es einfach mal und sag bescheid, ob es bei dir funktioniert.
      Ich habe das Einlesen der Buchstaben in dieser Version erstmal etwas kmplizierter aufgebaut, damit du es besser nachvollziehen kannst.
      Später werden die Buchstaben nicht einzeln sondern in einer For-Schleife eingelesen.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Hallo,
      ich habe die Demoversion 2.0.7.9. Könnte es sein, daß das "FLIP" das Problem ist? Ich kenne diesen Befehl nicht. Er ist mir neu. Habe im Hilfetext gesucht, da steht was von ADON APP:
      Die habe ich nicht drauf.
      Gruß

      Ach ja ich habe versprochen meinen Lösungsansatz mal rüber zu bringen.
      Bei mir werden die Zeichen Spaltenweise eingelesen, ist sehr einfach, was allerdings einen anders gearteten Zeichensatz bedingt.

      BASCOM Source Code: Matrix 5x7 Zeilenweise Ausgabe

      1. 'Matrix 5x7 Ausgabe eine Matrix 2 Buchstaben Testprogramm
      2. $regfile = "m8adef.dat" 'Prozessor
      3. $crystal = 3684000 'Taktfrequenz
      4. $baud = 19200
      5. $hwstack = 80
      6. $swstack = 80
      7. $framesize = 100
      8. Takt Alias Portb.5 'B.5 an SRCLK = Takt
      9. Config Takt = Output
      10. Daten Alias Portb.3 'B.3 an Serin = Dateneingabe
      11. Config Daten = Output
      12. Uebernahme Alias Portb.2 'B.2 an RCLK = Übernahme
      13. Config Uebernahme = Output
      14. Oe Alias Portb.1 'B.1 an OE = Output enable = Matrix ein/aus
      15. Config Oe = Output
      16. Config Portb.0 = Output
      17. Ein Alias Portb.0
      18. Dim Spa As String * 5 'Spalte Anfang + Ende
      19. Dim B1 As String * 7 'Anzeige auf Matrix 1
      20. Dim B2 As String * 7 'Anzeige auf Matrix 2
      21. Dim Speicher(15) As Byte
      22. Dim I As Byte 'Spaltenzähler
      23. Dim N As Byte
      24. Dim R As String * 8
      25. Dim S As String * 8
      26. Dim T As String * 8
      27. Dim Let1 As Byte 'Letter 1
      28. Dim Let2 As Byte 'Letter 2
      29. Dim Matr1 As Byte 'Matrix 1
      30. Dim Matr2 As Byte 'Matrix 2
      31. Dim Zaehler As Byte
      32. Config Spi = Soft , Din = Pinb.4 , Dout = Daten , Ss = Uebernahme , Clock = Takt , Mode = 0 'SPI-Soft
      33. Spiinit
      34. Waitms 50
      35. Oe = 0 'Oe an GND
      36. Ein = 1
      37. I = 0 'Spaltenzähler von 0 bis 5
      38. N = 1 'Speicherzähler
      39. Let1 = 4 'Kennzahl des Letter1 eingeben
      40. Let2 = 8 'Kennzahl des Letter2
      41. 'Zeichen vorbereiten und speichern
      42. For I = 0 To 4
      43. Matr1 = Let1 * 5
      44. Matr2 = Let2 * 5
      45. Matr1 = Matr1 + I
      46. Matr2 = Matr2 + I
      47. Spa = Lookupstr(i , Grund)
      48. B1 = Lookupstr(matr1 , Buchstabe)
      49. B2 = Lookupstr(matr2 , Buchstabe)
      50. R = Spa + Left(b1 , 3)
      51. S = Right(b1 , 4) + Left(b2 , 4)
      52. T = Right(b2 , 3) + Spa
      53. Speicher(n) = Binval(r)
      54. Speicher(n + 1) = Binval(s)
      55. Speicher(n + 2) = Binval(t)
      56. N = N + 3
      57. Next I
      58. 'Zeichen ausgeben
      59. Do
      60. Gosub Anzeige
      61. Loop
      62. End
      63. Anzeige:
      64. For Zaehler = 1 To 15 Step 3
      65. Shiftout Daten , Takt , Speicher(zaehler) , 1
      66. Shiftout Daten , Takt , Speicher(zaehler + 1) , 1
      67. Shiftout Daten , Takt , Speicher(zaehler + 2) , 1
      68. Uebernahme = 0
      69. Uebernahme = 1
      70. Next Zaehler
      71. Return
      72. End
      73. Grund:
      74. Data "01111" , "10111" , "11011" , "11101" , "11110"
      75. Buchstabe:
      76. Data "0111111" , "1001000" , "1001000" , "1001000" , "0111111" 'A
      77. Data "1111111" , "1001001" , "1001001" , "1001001" , "0110110" 'B
      78. Data "0111110" , "1000001" , "1000001" , "1000001" , "0100010" 'C
      79. Data "1111111" , "1000001" , "1000001" , "1000001" , "0111110" 'D
      80. Data "1111111" , "1001001" , "1001001" , "1001001" , "1000001" 'E
      81. Data "1111111" , "1001000" , "1001000" , "1000000" , "1000000" 'F
      82. Data "0111110" , "1000001" , "1000001" , "1001001" , "1001111" 'G
      83. Data "1111111" , "0001000" , "0001000" , "0001000" , "1111111" 'H
      84. Data "0000000" , "0000000" , "1111111" , "0000000" , "0000000" 'I
      85. Data "1111110" , "0000001" , "0000001" , "0000110" , "0000000" 'J
      86. Data "1111111" , "0001000" , "0010100" , "0100010" , "1000001" 'K
      87. Data "1111111" , "0000001" , "0000001" , "0000001" , "0000000" 'L
      Display All


      Schau Dir es mal an. Die Arbeitsweise ist sehr einfach. Funktioniert allerdings in dieser Form bisher nur für eine Matrix mit 2 Zeichen
    • Hallo,
      ich habe mal Dein Programm auf dem Bascom-Demo installiert. Da das Demoprogramm "FLIP" anscheinend nicht kennt, habe ich ein kleines Zusatzprogramm zum Bit-Tausch eingestzt.
      Es funktioniert alles, nur die Zeichen spielen verrückt. (stehen Kopf oder so) siehe Bilder (Der Bildtext zeigt welche Zeichen ich verwendet habe.) Vielleicht ist es nur eine Kleinigkeit.

      Zum Zusatzprogramm: Zeile 26-28 PortD geändert in PortB, da mir in meinem Aufbau PortD nicht zugänglich sind
      Zeile 47 zusätzliche DIMs
      Zeile 83, 90 ,97, 104 Sprung zum Bittausch statt "FLIP"
      Zeile 177 Bittausch-Programm
      Leider konnte ich den Fehler bei der Zeichenausgabe nicht entdecken.
      Es ist natürlich schwer in einem fertigen Programm einen solchen Fehler zu finden.

      Durch die Größe des Programms ist es recht langsam. Laufschrift wohl nur schwer möglich.

      BASCOM Source Code: Matrix Programm auf Demo

      1. '2 x 2x5x7 Punkt-Matrix-Anzeige
      2. 'Ausgabe von 15 Byte je 10x7 Display
      3. 'Byte-Reihenfolge
      4. '
      5. 'Byte 3 Byte 2 Byte 1
      6. '
      7. 'Spalten 5 Bit u.Daten 3 Bit DS1 Daten 2x4 Bit Daten 3 Bit u. Spalten 5 Bit DS2
      8. '
      9. 'Als Beispiel für die erste Spalte von beiden Anzeigen
      10. '&b10000xxx &Bxxxx_xxxx &Bxxx10000
      11. '
      12. 'Ausgabe der Bits an Shiftregister 74HC595
      13. 'Byte 1 Byte 2 Byte 3
      14. '76543210 76543210 76543210
      15. '
      16. 'OE dauerhaft auf GND und /SRCLK (Reset) dauerhaft auf VCC
      17. 'Spaltenzähler für DS1 von Spalte 1 - 5 30,29,27,23,15
      18. 'Spaltebzähler für DS2 von Spalte 1 - 5 240,232,216,184,120
      19. $regfile = "m8def.dat"
      20. $crystal = 8000000
      21. $hwstack = 100
      22. $swstack = 100
      23. $framesize = 100
      24. Daten Alias PortB.3
      25. Sck Alias PortB.5
      26. Rck Alias PortB.2
      27. Config Daten = Output 'Ausgabe der Daten an die Schieberegister
      28. Config Sck = Output 'Takt zum Schieben der Daten im 74HC595
      29. Config Rck = Output 'Übernahmetakt in das Ausgaberegister vom 74HC595
      30. Dim Text As String * 20 , Temp_text As String * 20
      31. Dim Buchstabe1 As String * 1 , Buchstabe2 As String * 1
      32. Dim Buchstabe3 As String * 1 , Buchstabe4 As String * 1
      33. Dim Spalte_ds1 As Byte , Spalte_ds2 As Byte , Spalte_ds3 As Byte , Spalte_ds4 As Byte
      34. Dim Zaehler As Byte , Spaltenzaehler As Byte , Zeilenzaehler As Byte
      35. Dim Zaehler1 As Word , Zaehler2 As Word , Zaehler3 As Word , Zaehler4 As Word
      36. Dim Ascii_code1 As Word , Ascii_code2 As Word , Ascii_code3 As Word , Ascii_code4 As Word
      37. Dim Temp_daten1 As Byte , Temp_daten2 As Byte , Temp_daten3 As Byte , Temp_daten4 As Byte
      38. Dim Temp_byte1 As Byte , Temp_byte2 As Byte , Temp_byte3 As Byte , Temp_byte4 As Byte , Temp_byte5 As Byte , Temp_byte6 As Byte
      39. Dim Bildspeicher(30) As Byte , Bildspeicherzaehler As Byte
      40. Dim Buchstabenmuster1(5) As Byte , Buchstabenmuster2(5) As Byte
      41. Dim Buchstabenmuster3(5) As Byte , Buchstabenmuster4(5) As Byte
      42. Dim A As Byte , E As Byte , I As Byte , B As String * 9 , C As String * 9 , D As String * 9 'zusätzliche DIM
      43. Text = "Test"
      44. Temp_text = Text
      45. Rck = 1
      46. Gosub Daten_sammeln
      47. Do
      48. Gosub Anzeige
      49. Loop
      50. End
      51. Daten_sammeln:
      52. Buchstabe1 = Mid(text , 1 , 1) 'Buchstabe 1 ganz links
      53. Buchstabe2 = Mid(text , 2 , 1) 'Buchstabe 2
      54. Buchstabe3 = Mid(text , 3 , 1) 'Buchstabe 3
      55. Buchstabe4 = Mid(text , 4 , 1) 'Buchstabe 4 ganz rechts
      56. Ascii_code1 = Asc(buchstabe1) 'Buchstabe in Ascii-Code umwandeln
      57. Ascii_code1 = Ascii_code1 - 32 'Von Ascii-Code 32 abziehen, da Tabelle bei 0 und nicht bei 32 beginnt
      58. Ascii_code1 = Ascii_code1 * 5 'mit 5 multizieren, um auf Anfangsindex der Tabelle zu kommen
      59. Ascii_code2 = Asc(buchstabe2) 'Buchstabe in Ascii-Code umwandeln
      60. Ascii_code2 = Ascii_code2 - 32 'Von Ascii-Code 32 abziehen, da Tabelle bei 0 und nicht bei 32 beginnt
      61. Ascii_code2 = Ascii_code2 * 5 'mit 5 multiplizieren, um auf Anfangsindex der Tabelle zu kommen
      62. Ascii_code3 = Asc(buchstabe3) 'Buchstabe in Ascii-Code umwandeln
      63. Ascii_code3 = Ascii_code3 - 32 'Von Ascii-Code 32 abziehen, da Tabelle bei 0 und nicht bei 32 beginnt
      64. Ascii_code3 = Ascii_code3 * 5 'mit 5 multiplizieren, um auf Anfangsindex der Tabelle zu kommen
      65. Ascii_code4 = Asc(buchstabe4) 'Buchstabe in Ascii-Code umwandeln
      66. Ascii_code4 = Ascii_code4 - 32 'Von Ascii-Code 32 abziehen, da Tabelle bei 0 und nicht bei 32 beginnt
      67. Ascii_code4 = Ascii_code4 * 5 'mit 5 multiplizieren, um auf Anfangsindex der Tabelle zu kommen
      68. For Spaltenzaehler = 0 To 4
      69. Zaehler1 = Ascii_code1 + Spaltenzaehler 'Zähler für Datentabelle
      70. Temp_daten1 = Lookup(zaehler1 , Zeichensatz) 'Daten aus Tabelle holen
      71. A = Temp_daten1
      72. Gosub Tausch
      73. Temp_daten1 = E
      74. 'Temp_daten1 = Flip(temp_daten1) 'Bits komplett tauschen Bit0 = Bit7, Bit1 = Bit6 usw.
      75. Buchstabenmuster1(spaltenzaehler + 1) = Temp_daten1 'In Buchstabenmuster speichern
      76. Zaehler2 = Ascii_code2 + Spaltenzaehler 'Zähler für Datentabelle
      77. Temp_daten2 = Lookup(zaehler2 , Zeichensatz) 'Daten aus Tabelle holen
      78. A = Temp_daten2
      79. Gosub Tausch
      80. Temp_daten1 = E
      81. 'Temp_daten2 = Flip(temp_daten2) 'Bits komplett tauschen Bit0 = Bit7, Bit1 = Bit6 usw.
      82. Buchstabenmuster2(spaltenzaehler + 1) = Temp_daten2 'In Buchstabenmuster speichern
      83. Zaehler3 = Ascii_code3 + Spaltenzaehler 'Zähler für Datentabelle
      84. Temp_daten3 = Lookup(zaehler3 , Zeichensatz) 'Daten aus Tabelle holen
      85. A = Temp_daten3
      86. Gosub Tausch
      87. Temp_daten1 = E
      88. 'Temp_daten3 = Flip(temp_daten3) 'Bits komplett tauschen Bit0 = Bit7, Bit1 = Bit6 usw.
      89. Buchstabenmuster3(spaltenzaehler + 1) = Temp_daten3 'In Buchstabenmuster speichern
      90. Zaehler4 = Ascii_code4 + Spaltenzaehler 'Zähler für Datentabelle
      91. Temp_daten4 = Lookup(zaehler4 , Zeichensatz) 'Daten aus Tabelle holen
      92. A = Temp_daten4
      93. Gosub Tausch
      94. Temp_daten1 = E
      95. 'Temp_daten4 = Flip(temp_daten4) 'Bits komplett tauschen Bit0 = Bit7, Bit1 = Bit6 usw.
      96. Buchstabenmuster4(spaltenzaehler + 1) = Temp_daten4 'In Buchstabenmuster speichern
      97. Next Spaltenzaehler
      98. Bildspeicherzaehler = 1
      99. For Spaltenzaehler = 0 To 4
      100. Temp_daten1 = Buchstabenmuster1(spaltenzaehler + 1)
      101. Temp_daten2 = Buchstabenmuster2(spaltenzaehler + 1)
      102. Temp_daten3 = Buchstabenmuster3(spaltenzaehler + 1)
      103. Temp_daten4 = Buchstabenmuster4(spaltenzaehler + 1)
      104. Spalte_ds1 = Lookup(spaltenzaehler , Spalten_ds1)
      105. Spalte_ds2 = Lookup(spaltenzaehler , Spalten_ds2)
      106. Temp_byte1 = Temp_daten4 'Buchstabe 4 in Temp_byte1 laden
      107. Shift Temp_byte1 , Right , 4 'Bits von Temp_byte1 5 x nach rechts verschieben
      108. Temp_byte1 = Temp_byte1 Or Spalte_ds2 'Temp_byte1 mit Spalte x von DS2 verknüpfen
      109. Temp_byte3 = Temp_daten3 'Buchstabe 3 in Temp_byte3 laden
      110. Shift Temp_byte3 , Left , 5 'Bits von Temp_byte3 4 x nach links schieben
      111. Temp_byte3 = Temp_byte3 Or Spalte_ds1 'Temp_byte3 mit Spalte x von DS1 verknüpfen
      112. Temp_byte2 = Temp_daten4 'Buchstabe 4 in Temp_byte2 laden
      113. Shift Temp_byte2 , Left , 4 'Bits von Temp_byte2 3 x nach links verschieben
      114. Shift Temp_daten3 , Right , 3 'Temp_daten1 (Buchstabe 3) 4 x nach rechts verschieben
      115. Temp_byte2 = Temp_byte2 Or Temp_daten3 'Temp_byte2 mit Temp_daten1 verknüpfen
      116. Temp_byte4 = Temp_daten2 'Buchstabe 2 in Temp_byte4 laden
      117. Shift Temp_byte4 , Right , 4 'Bits von Temp_byte4 5 x nach rechts verschieben
      118. Temp_byte4 = Temp_byte4 Or Spalte_ds2 'Temp_byte4 mit Spalte x von DS2 verknüpfen
      119. Temp_byte6 = Temp_daten1 'Buchstabe 1 in Temp_byte6 laden
      120. Shift Temp_byte6 , Left , 5 'Bits von Temp_byte6 4 x nach links schieben
      121. Temp_byte6 = Temp_byte6 Or Spalte_ds1 'Temp_byte6 mit Spalte x von DS1 verknüpfen
      122. Temp_byte5 = Temp_daten2 'Buchstabe 2 in Temp_byte5 laden
      123. Shift Temp_byte5 , Left , 4 'Bits von Temp_byte5 3 x nach links verschieben
      124. Shift Temp_daten1 , Right , 3 'Temp_daten1 (Buchstabe 1) 4 x nach rechts verschieben
      125. Temp_byte5 = Temp_byte5 Or Temp_daten1 'Temp_byte5 mit Temp_daten1 verknüpfen
      126. Bildspeicher(bildspeicherzaehler) = Temp_byte1 'Temp_byte1 an Bildspeicher übergeben
      127. Bildspeicher(bildspeicherzaehler + 1) = Temp_byte2 'Temp_byte2 an Bildspeicher übergeben
      128. Bildspeicher(bildspeicherzaehler + 2) = Temp_byte3 'Temp_byte3 an Bildspeicher übergeben
      129. Bildspeicher(bildspeicherzaehler + 3) = Temp_byte4 'Temp_byte4 an Bildspeicher übergeben
      130. Bildspeicher(bildspeicherzaehler + 4) = Temp_byte5 'Temp_byte5 an Bildspeicher übergeben
      131. Bildspeicher(bildspeicherzaehler + 5) = Temp_byte6 'Temp_byte6 an Bildspeicher übergeben
      132. Bildspeicherzaehler = Bildspeicherzaehler + 6
      133. Next Spaltenzaehler
      134. Return
      135. Anzeige:
      136. For Zaehler = 0 To 24 Step 6
      137. Shiftout Daten , Sck , Bildspeicher(zaehler + 1) , 0
      138. Shiftout Daten , Sck , Bildspeicher(zaehler + 2) , 0
      139. Shiftout Daten , Sck , Bildspeicher(zaehler + 3) , 0
      140. Shiftout Daten , Sck , Bildspeicher(zaehler + 4) , 0
      141. Shiftout Daten , Sck , Bildspeicher(zaehler + 5) , 0
      142. Shiftout Daten , Sck , Bildspeicher(zaehler + 6) , 0
      143. Rck = 0
      144. Rck = 1
      145. Next Zaehler
      146. Return
      147. Tausch: 'Bit-Tausch Bit0>Bit7,Bit1>Bit6,Bit2>Bit5, Bit3>Bit4
      148. C = Bin(a)
      149. B = ""
      150. For I = 1 To 8
      151. D = Right(c , I)
      152. Insertchar B , I , D
      153. Next I
      154. E = Binval(b)
      155. Return
      156. End
      157. Spalten_ds1:
      158. Data 30 , 29 , 27 , 23 , 15
      159. Spalten_ds2:
      160. Data 240 , 232 , 216 , 184 , 120
      161. $include "Zeichensatz.inc"
      162. 'Ende
      Display All
      1 Test.JPG2 Test.JPG3 TEST.JPG4 abcd.JPG5 1234.JPG6 1111.JPG

      Gruß
    • Hallo,
      ich habe den Fehler gefunden. Es war mal wieder ein Tippfehler.
      Zeile 90+92 muß es Temp_daten2, Zeile 97+99 muß es Temp-Daten3, Zeile 104+106 muß es Temp-Daten4 heißen.
      Und außerdem waren bei mir die beiden Module rechts/links vertauscht
      Dann läuft das Programm. Zur besseren Anschauung stelle ich das Programm nochmals ein; allerdings ohne den Zeichensatz, da es sonst zu lang ist.

      BASCOM Source Code: Matrix-Programm für 2 Matrixmodule auf Bascom-Demo

      1. '2 x 2x5x7 Punkt-Matrix-Anzeige
      2. 'Ausgabe von 15 Byte je 10x7 Display
      3. 'Byte-Reihenfolge
      4. '
      5. 'Byte 3 Byte 2 Byte 1
      6. '
      7. 'Spalten 5 Bit u.Daten 3 Bit DS1 Daten 2x4 Bit Daten 3 Bit u. Spalten 5 Bit DS2
      8. '
      9. 'Als Beispiel für die erste Spalte von beiden Anzeigen
      10. '&b10000xxx &Bxxxx_xxxx &Bxxx10000
      11. '
      12. 'Ausgabe der Bits an Shiftregister 74HC595
      13. 'Byte 1 Byte 2 Byte 3
      14. '76543210 76543210 76543210
      15. '
      16. 'OE dauerhaft auf GND und /SRCLK (Reset) dauerhaft auf VCC
      17. 'Spaltenzähler für DS1 von Spalte 1 - 5 30,29,27,23,15
      18. 'Spaltebzähler für DS2 von Spalte 1 - 5 240,232,216,184,120
      19. $regfile = "m8def.dat"
      20. $crystal = 8000000
      21. $hwstack = 100
      22. $swstack = 100
      23. $framesize = 100
      24. Daten Alias Portd.2
      25. Sck Alias Portd.3
      26. Rck Alias Portd.4
      27. Config Daten = Output 'Ausgabe der Daten an die Schieberegister
      28. Config Sck = Output 'Takt zum Schieben der Daten im 74HC595
      29. Config Rck = Output 'Übernahmetakt in das Ausgaberegister vom 74HC595
      30. Dim Text As String * 20 , Temp_text As String * 20
      31. Dim Buchstabe1 As String * 1 , Buchstabe2 As String * 1
      32. Dim Buchstabe3 As String * 1 , Buchstabe4 As String * 1
      33. Dim Spalte_ds1 As Byte , Spalte_ds2 As Byte , Spalte_ds3 As Byte , Spalte_ds4 As Byte
      34. Dim Zaehler As Byte , Spaltenzaehler As Byte , Zeilenzaehler As Byte
      35. Dim Zaehler1 As Word , Zaehler2 As Word , Zaehler3 As Word , Zaehler4 As Word
      36. Dim Ascii_code1 As Word , Ascii_code2 As Word , Ascii_code3 As Word , Ascii_code4 As Word
      37. Dim Temp_daten1 As Byte , Temp_daten2 As Byte , Temp_daten3 As Byte , Temp_daten4 As Byte
      38. Dim Temp_byte1 As Byte , Temp_byte2 As Byte , Temp_byte3 As Byte , Temp_byte4 As Byte , Temp_byte5 As Byte , Temp_byte6 As Byte
      39. Dim Bildspeicher(30) As Byte , Bildspeicherzaehler As Byte
      40. Dim Buchstabenmuster1(5) As Byte , Buchstabenmuster2(5) As Byte
      41. Dim Buchstabenmuster3(5) As Byte , Buchstabenmuster4(5) As Byte
      42. Dim A As Byte , E As Byte , I As Byte , B As String * 9 , C As String * 9 , D As String * 9 'zusätzliche DIM
      43. Text = "Test"
      44. Temp_text = Text
      45. Rck = 1
      46. Gosub Daten_sammeln
      47. Do
      48. Gosub Anzeige
      49. Loop
      50. End
      51. Daten_sammeln:
      52. Buchstabe1 = Mid(text , 1 , 1) 'Buchstabe 1 ganz links
      53. Buchstabe2 = Mid(text , 2 , 1) 'Buchstabe 2
      54. Buchstabe3 = Mid(text , 3 , 1) 'Buchstabe 3
      55. Buchstabe4 = Mid(text , 4 , 1) 'Buchstabe 4 ganz rechts
      56. Ascii_code1 = Asc(buchstabe1) 'Buchstabe in Ascii-Code umwandeln
      57. Ascii_code1 = Ascii_code1 - 32 'Von Ascii-Code 32 abziehen, da Tabelle bei 0 und nicht bei 32 beginnt
      58. Ascii_code1 = Ascii_code1 * 5 'mit 5 multizieren, um auf Anfangsindex der Tabelle zu kommen
      59. Ascii_code2 = Asc(buchstabe2) 'Buchstabe in Ascii-Code umwandeln
      60. Ascii_code2 = Ascii_code2 - 32 'Von Ascii-Code 32 abziehen, da Tabelle bei 0 und nicht bei 32 beginnt
      61. Ascii_code2 = Ascii_code2 * 5 'mit 5 multiplizieren, um auf Anfangsindex der Tabelle zu kommen
      62. Ascii_code3 = Asc(buchstabe3) 'Buchstabe in Ascii-Code umwandeln
      63. Ascii_code3 = Ascii_code3 - 32 'Von Ascii-Code 32 abziehen, da Tabelle bei 0 und nicht bei 32 beginnt
      64. Ascii_code3 = Ascii_code3 * 5 'mit 5 multiplizieren, um auf Anfangsindex der Tabelle zu kommen
      65. Ascii_code4 = Asc(buchstabe4) 'Buchstabe in Ascii-Code umwandeln
      66. Ascii_code4 = Ascii_code4 - 32 'Von Ascii-Code 32 abziehen, da Tabelle bei 0 und nicht bei 32 beginnt
      67. Ascii_code4 = Ascii_code4 * 5 'mit 5 multiplizieren, um auf Anfangsindex der Tabelle zu kommen
      68. For Spaltenzaehler = 0 To 4
      69. Zaehler1 = Ascii_code1 + Spaltenzaehler 'Zähler für Datentabelle
      70. Temp_daten1 = Lookup(zaehler1 , Zeichensatz) 'Daten aus Tabelle holen
      71. A = Temp_daten1
      72. Gosub Tausch
      73. Temp_daten1 = E
      74. 'Temp_daten1 = Flip(temp_daten1) 'Bits komplett tauschen Bit0 = Bit7, Bit1 = Bit6 usw.
      75. Buchstabenmuster1(spaltenzaehler + 1) = Temp_daten1 'In Buchstabenmuster speichern
      76. Zaehler2 = Ascii_code2 + Spaltenzaehler 'Zähler für Datentabelle
      77. Temp_daten2 = Lookup(zaehler2 , Zeichensatz) 'Daten aus Tabelle holen
      78. A = Temp_daten2
      79. Gosub Tausch
      80. Temp_daten2 = E
      81. 'Temp_daten2 = Flip(temp_daten2) 'Bits komplett tauschen Bit0 = Bit7, Bit1 = Bit6 usw.
      82. Buchstabenmuster2(spaltenzaehler + 1) = Temp_daten2 'In Buchstabenmuster speichern
      83. Zaehler3 = Ascii_code3 + Spaltenzaehler 'Zähler für Datentabelle
      84. Temp_daten3 = Lookup(zaehler3 , Zeichensatz) 'Daten aus Tabelle holen
      85. A = Temp_daten3
      86. Gosub Tausch
      87. Temp_daten3 = E
      88. 'Temp_daten3 = Flip(temp_daten3) 'Bits komplett tauschen Bit0 = Bit7, Bit1 = Bit6 usw.
      89. Buchstabenmuster3(spaltenzaehler + 1) = Temp_daten3 'In Buchstabenmuster speichern
      90. Zaehler4 = Ascii_code4 + Spaltenzaehler 'Zähler für Datentabelle
      91. Temp_daten4 = Lookup(zaehler4 , Zeichensatz) 'Daten aus Tabelle holen
      92. A = Temp_daten4
      93. Gosub Tausch
      94. Temp_daten4 = E
      95. 'Temp_daten4 = Flip(temp_daten4) 'Bits komplett tauschen Bit0 = Bit7, Bit1 = Bit6 usw.
      96. Buchstabenmuster4(spaltenzaehler + 1) = Temp_daten4 'In Buchstabenmuster speichern
      97. Next Spaltenzaehler
      98. Bildspeicherzaehler = 1
      99. For Spaltenzaehler = 0 To 4
      100. Temp_daten1 = Buchstabenmuster1(spaltenzaehler + 1)
      101. Temp_daten2 = Buchstabenmuster2(spaltenzaehler + 1)
      102. Temp_daten3 = Buchstabenmuster3(spaltenzaehler + 1)
      103. Temp_daten4 = Buchstabenmuster4(spaltenzaehler + 1)
      104. Spalte_ds1 = Lookup(spaltenzaehler , Spalten_ds1)
      105. Spalte_ds2 = Lookup(spaltenzaehler , Spalten_ds2)
      106. Temp_byte1 = Temp_daten4 'Buchstabe 4 in Temp_byte1 laden
      107. Shift Temp_byte1 , Right , 4 'Bits von Temp_byte1 5 x nach rechts verschieben
      108. Temp_byte1 = Temp_byte1 Or Spalte_ds2 'Temp_byte1 mit Spalte x von DS2 verknüpfen
      109. Temp_byte3 = Temp_daten3 'Buchstabe 3 in Temp_byte3 laden
      110. Shift Temp_byte3 , Left , 5 'Bits von Temp_byte3 4 x nach links schieben
      111. Temp_byte3 = Temp_byte3 Or Spalte_ds1 'Temp_byte3 mit Spalte x von DS1 verknüpfen
      112. Temp_byte2 = Temp_daten4 'Buchstabe 4 in Temp_byte2 laden
      113. Shift Temp_byte2 , Left , 4 'Bits von Temp_byte2 3 x nach links verschieben
      114. Shift Temp_daten3 , Right , 3 'Temp_daten1 (Buchstabe 3) 4 x nach rechts verschieben
      115. Temp_byte2 = Temp_byte2 Or Temp_daten3 'Temp_byte2 mit Temp_daten1 verknüpfen
      116. Temp_byte4 = Temp_daten2 'Buchstabe 2 in Temp_byte4 laden
      117. Shift Temp_byte4 , Right , 4 'Bits von Temp_byte4 5 x nach rechts verschieben
      118. Temp_byte4 = Temp_byte4 Or Spalte_ds2 'Temp_byte4 mit Spalte x von DS2 verknüpfen
      119. Temp_byte6 = Temp_daten1 'Buchstabe 1 in Temp_byte6 laden
      120. Shift Temp_byte6 , Left , 5 'Bits von Temp_byte6 4 x nach links schieben
      121. Temp_byte6 = Temp_byte6 Or Spalte_ds1 'Temp_byte6 mit Spalte x von DS1 verknüpfen
      122. Temp_byte5 = Temp_daten2 'Buchstabe 2 in Temp_byte5 laden
      123. Shift Temp_byte5 , Left , 4 'Bits von Temp_byte5 3 x nach links verschieben
      124. Shift Temp_daten1 , Right , 3 'Temp_daten1 (Buchstabe 1) 4 x nach rechts verschieben
      125. Temp_byte5 = Temp_byte5 Or Temp_daten1 'Temp_byte5 mit Temp_daten1 verknüpfen
      126. Bildspeicher(bildspeicherzaehler) = Temp_byte1 'Temp_byte1 an Bildspeicher übergeben
      127. Bildspeicher(bildspeicherzaehler + 1) = Temp_byte2 'Temp_byte2 an Bildspeicher übergeben
      128. Bildspeicher(bildspeicherzaehler + 2) = Temp_byte3 'Temp_byte3 an Bildspeicher übergeben
      129. Bildspeicher(bildspeicherzaehler + 3) = Temp_byte4 'Temp_byte4 an Bildspeicher übergeben
      130. Bildspeicher(bildspeicherzaehler + 4) = Temp_byte5 'Temp_byte5 an Bildspeicher übergeben
      131. Bildspeicher(bildspeicherzaehler + 5) = Temp_byte6 'Temp_byte6 an Bildspeicher übergeben
      132. Bildspeicherzaehler = Bildspeicherzaehler + 6
      133. Next Spaltenzaehler
      134. Return
      135. Anzeige:
      136. For Zaehler = 0 To 24 Step 6
      137. Shiftout Daten , Sck , Bildspeicher(zaehler + 1) , 0
      138. Shiftout Daten , Sck , Bildspeicher(zaehler + 2) , 0
      139. Shiftout Daten , Sck , Bildspeicher(zaehler + 3) , 0
      140. Shiftout Daten , Sck , Bildspeicher(zaehler + 4) , 0
      141. Shiftout Daten , Sck , Bildspeicher(zaehler + 5) , 0
      142. Shiftout Daten , Sck , Bildspeicher(zaehler + 6) , 0
      143. Rck = 0
      144. Rck = 1
      145. Next Zaehler
      146. Return
      147. Tausch: 'Bit-Tausch Bit7>Bit0,Bit6>Bit1,Bit5>Bit2,Bit4>Bit3,Bit3>Bit4,Bit2>Bit5,Bit1>Bit6,Bit0>Bit7
      148. C = Bin(a)
      149. B = ""
      150. For I = 1 To 8
      151. D = Right(c , I)
      152. Insertchar B , I , D
      153. Next I
      154. E = Binval(b)
      155. Return
      156. Spalten_ds1:
      157. Data 30 , 29 , 27 , 23 , 15
      158. Spalten_ds2:
      159. Data 240 , 232 , 216 , 184 , 120
      160. $include "Zeichensatz.inc"
      161. 'Ende
      Display All


      Besten Dank für die tolle Arbeit und a_475_f10f3094 die Geduld an djmsc.
    • Schön, dass es jetzt funktioniert :)

      Lothringen wrote:

      Habe für meine kleinen Dinge die Vollversion nie gebraucht.
      Aber gerade bei solchen Anzeigen kommst diu schnell an die 4 KB Grenze.
      Ich habe ja schon eine fast fertige Laufschrift und bin jetzt schon bei ca. 33% Speicherauslastung beim ATMega8.
      Also noch 18% mehr und deine Demo versagt.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.