RGB Matrix module 20x40 1/5 scan GKGD - error of display of the image

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

    • RGB Matrix module 20x40 1/5 scan GKGD - error of display of the image

      Dear friends!
      Help me with connecting the RGB matrix. This code once helped me make Mike.
      This code works perfectly with Qiang Li P8 20x40 matrices. Now the matrices of another manufacturer - GKGD - have been brought. With them there was a break with output to images.

      A328_P8_20x40_QL.bas

      Send the number "1234" below.
      Image_1.jpg

      Sending number "2".
      Image_2.jpg
      Can you help me fix the code?
    • Ich würde, wie schon bei anderen displays, zunächst ein byte mit einem bit-muster an das display senden und beobachten, wo dieses Muster ausgegeben wird. Dann weiter mit 2 bytes. So bekommt man langsam die Übersicht, wie das display organisiert ist.
      As with other displays, I would first send a byte with a bit pattern to the display and observe where this pattern is output. Then continue with 2 bytes. So you slowly get an overview of how the display is organized.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Pluto25 wrote:

      SAMEGO wrote:

      SPACE- shows nothing.
      It make a room between the others, so we see witch dot ist from what Number.Your Way is possible too . Try the ohters (0100 000, 0010 0000 ...
      So we can change the range of bits, but it seems not the only problem.
      Try 2222 (better 2 <space> 2 ....)
      This is what "2 2" looks like.
      Image_3.jpg
      I understand that in the screen update there are bytes in turn 0,1,2,3,4,5,6,7
      And in new matrices there should be 3,2,1,0,7,6,5,4
      I try to change the code, but it doesn 't work out.

      Sending values:
      Memory_green(0) = &B11110000
      Memory_green(5) = &B00010000
      Memory_green(10) = &B00010000
      Memory_green(15) = &B00010000
      Memory_green(20) = &B11100000

      Memory_green(25) = &B11000000
      Memory_green(30) = &B00100000
      Memory_green(35) = &B00010000
      Memory_green(40) = &B10010000
      Memory_green(45) = &B11100000

      and screen:
      Image_4.jpg

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

    • SAMEGO wrote:

      Sending values:
      Memory_green(0) = &B01100000
      Memory_green(5) = &B10010000
      Memory_green(10) = &B01000000
      Memory_green(15) = &B00100000
      Memory_green(20) = &B11110000
      Shoud make a small 2
      What s about the lower Nibble? Wehre is the dot you send:
      Memory_green(0) = &B00000001 ? first dot sixth row?
      Memory_green(4) = &B10000000 ? last dot first row?
    • Pluto25 wrote:

      SAMEGO wrote:

      Sending values:
      Memory_green(0) = &B01100000Memory_green(5) = &B10010000
      Memory_green(10) = &B01000000
      Memory_green(15) = &B00100000
      Memory_green(20) = &B11110000
      Shoud make a small 2
      What s about the lower Nibble? Wehre is the dot you send:
      Memory_green(0) = &B00000001 ? first dot sixth row?
      Memory_green(4) = &B10000000 ? last dot first row?
      Here so it turns out
      Image_5.jpg
    • SAMEGO wrote:

      SPACE- shows nothing.
      I am sending Memory_green (0) = & B10000000
      but I receive
      send_1.jpg

      Sending Memory_green (0) = & B00010000
      I receive:
      send_2.jpg
      This is the first row of the matrix
      It's possible that the nibbles in the received bytes are swapped. Try to swap the nibbles for all the send/receive data. OR: LSB/MSB is not correct.
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • You need it for Text only ? No Lines or Pictures?
      So we "only" change the Set_Text_6_8.
      I create an adressmatrix , it's unkomplet.
      Please test Memory_green(70) = &B00001000.
      Hope ist sets the 5th Dot in first line.
      If you need lines. Please draw two lines 0,10 to 39,10 and 0,0 to 20,40.

      SAMEGO wrote:

      somehow he doesn 't want to help

      no time a_448_c66dc889 or badguy? :cursing: Or some of the "I can all" people a_58_b54cfdb4
      Files
      • Matrix.zip

        (5.96 kB, downloaded 3 times, last: )
    • Pluto25 wrote:

      It seems the Matrix is correct now :)
      For each Font his own Sub? Lets start with the smallest one ,( or the easy one 4x4 :D )
      Of course, the 4x4 font did not. Because it 's not a font anymore. Since in this square do not fit the letter.
      There are fonts with one SUB. There is a compound font.
      3 fonts in one sub

      Source Code

      1. Sub Set_text(byval X As Word , Byval Y As Word , Byval Fonts As Word , Byval Color As Byte)
      2. Local Col As Word , Mem_byte_num As Word , Max_baseline As Byte , Y1 As Word , X1 As Word
      3. Local Character_column As Byte , Letter_num As Byte , Sign As String * 1 , Bit_num As Byte
      4. Local Font_byte As Byte , Bit_counter As Byte
      5. Local Ll1 As Byte , Ff1 As Byte
      6. Ll1 = Fonts * 2
      7. Max_baseline = Row_num - 16
      8. If Y > Max_baseline Then Y = Max_baseline
      9. Y1 = Row_num1 - Y 'y1 counts from upper row
      10. For Letter_num = 1 To Len(text)
      11. Sign = Mid(text , Letter_num , 1) 'Only one letter
      12. Tab_start = Asc(sign)
      13. Call Rusific(sign)
      14. Tab_start = Tab_start - 32
      15. Tab_start = Tab_start * Ll1 'Starting point in the font table
      16. For Character_column = 0 To Ll1 -2 Step 2
      17. Bit_num = X Mod 8 : Bit_num = 7 -bit_num 'bit-number of byte
      18. Col = X / 8 'number of byte-column
      19. Mem_byte_num = Y1 * Bytes_in_row
      20. Mem_byte_num = Mem_byte_num + Col
      21. If Mem_byte_num > Mem_size_1 Then Exit Sub 'there is no space, you are ready
      22. X1 = Tab_start + Character_column
      23. For Ff1 = 1 To 2
      24. If Fonts = 8 Then Font_byte = Lookup(x1 , Font_8x16)
      25. If Fonts = 10 Then Font_byte = Lookup(x1 , Font_10x16)
      26. If Fonts = 12 Then Font_byte = Lookup(x1 , Font_12x16)
      27. For Bit_counter = 0 To 7
      28. If Color.0 = 1 Then Memory_red(mem_byte_num).bit_num = Font_byte.bit_counter 'red
      29. If Color.1 = 1 Then Memory_green(mem_byte_num).bit_num = Font_byte.bit_counter 'green
      30. If Color.2 = 1 Then Memory_blue(mem_byte_num).bit_num = Font_byte.bit_counter 'blue
      31. Mem_byte_num = Mem_byte_num - Bytes_in_row 'jump one row up
      32. Next Bit_counter
      33. If Ff1 = 1 Then Incr X1
      34. If Ff1 = 2 Then Incr X
      35. Next Ff1
      36. Next Character_column
      37. Next Letter_num
      38. End Sub
      Display All
      Compound font

      Source Code

      1. Sub Set_text_32(byval X As Word , Byval Z As Word , Byval Color As Byte)
      2. Local Col As Word , Mem_byte_num As Word , Max_baseline As Byte , Y1 As Word , X1 As Word , Y As Word
      3. Local Character_column As Byte , Letter_num As Byte , Sign As String * 1 , Bit_num As Byte
      4. Local Font_byte As Byte , Bit_counter As Byte
      5. Local D_count As Byte
      6. D_count = X
      7. For F = 0 To 3
      8. X = D_count
      9. If F = 0 Then Y = Z + 24
      10. If F = 1 Then Y = Z + 16
      11. If F = 2 Then Y = Z + 8
      12. If F = 3 Then Y = Z
      13. Max_baseline = Row_num - 8
      14. If Y > Max_baseline Then Y = Max_baseline
      15. Y1 = Row_num1 - Y 'y1 counts from upper row
      16. For Letter_num = 1 To Len(text)
      17. Sign = Mid(text , Letter_num , 1) 'Only one letter
      18. Tab_start = Asc(sign)
      19. Tab_start = Tab_start - 48
      20. Tab_start = Tab_start * 16 'Starting point in the font table
      21. For Character_column = 0 To 15
      22. Bit_num = X Mod 8 : Bit_num = 7 -bit_num 'bit-number of byte
      23. Col = X / 8 'number of byte-column
      24. Mem_byte_num = Y1 * Bytes_in_row
      25. Mem_byte_num = Mem_byte_num + Col
      26. If Mem_byte_num > Mem_size_1 Then Exit Sub 'there is no space, you are ready
      27. X1 = Tab_start + Character_column
      28. If F = 0 Then Font_byte = Lookup(x1 , Font_32_1)
      29. If F = 1 Then Font_byte = Lookup(x1 , Font_32_2)
      30. If F = 2 Then Font_byte = Lookup(x1 , Font_32_3)
      31. If F = 3 Then Font_byte = Lookup(x1 , Font_32_4)
      32. For Bit_counter = 0 To 7
      33. If Color.0 = 1 Then 'red
      34. Memory_red(mem_byte_num).bit_num = Font_byte.bit_counter
      35. End If
      36. If Color.1 = 1 Then 'green
      37. Memory_green(mem_byte_num).bit_num = Font_byte.bit_counter
      38. End If
      39. If Color.2 = 1 Then 'blue
      40. Memory_blue(mem_byte_num).bit_num = Font_byte.bit_counter
      41. End If
      42. Mem_byte_num = Mem_byte_num - Bytes_in_row 'jump one row up
      43. Next Bit_counter
      44. Incr X
      45. Next Character_column
      46. Next Letter_num
      47. Next F
      48. End Sub
      49. Font_32_1:
      50. Data 0 , 15 , 63 , 127 , 120 , 240 , 224 , 224 , 224 , 224 , 240 , 120 , 127 , 63 , 15 , 0 ' 0
      51. Data 0 , 0 , 0 , 0 , 1 , 3 , 15 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 ' 1
      52. Data 0 , 14 , 62 , 126 , 120 , 240 , 224 , 224 , 224 , 224 , 240 , 120 , 127 , 63 , 15 , 0 ' 2
      53. Data 0 , 14 , 62 , 126 , 120 , 240 , 224 , 224 , 224 , 224 , 240 , 120 , 127 , 63 , 15 , 0 ' 3
      54. Data 0 , 0 , 0 , 3 , 255 , 255 , 254 , 0 , 0 , 0 , 0 , 255 , 255 , 255 , 0 , 0 ' 4
      55. Data 0 , 255 , 255 , 255 , 224 , 224 , 224 , 224 , 224 , 224 , 224 , 224 , 224 , 224 , 224 , 0 ' 5
      56. Data 0 , 15 , 63 , 127 , 120 , 240 , 224 , 224 , 224 , 224 , 240 , 120 , 126 , 62 , 14 , 0 ' 6
      57. Data 0 , 224 , 224 , 224 , 224 , 224 , 224 , 224 , 224 , 224 , 224 , 224 , 255 , 255 , 255 , 0 ' 7
      58. Data 0 , 15 , 63 , 127 , 120 , 240 , 224 , 224 , 224 , 224 , 240 , 120 , 127 , 63 , 15 , 0 ' 8
      59. Data 0 , 15 , 63 , 127 , 120 , 240 , 224 , 224 , 224 , 224 , 240 , 120 , 127 , 63 , 15 , 0 ' 9
      60. Font_32_2:
      61. Data 0 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 255 , 255 , 255 , 0 ' 0
      62. Data 0 , 48 , 112 , 224 , 192 , 128 , 0 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 ' 1
      63. Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 3 , 7 , 15 , 254 , 252 , 248 , 0 ' 2
      64. Data 0 , 0 , 0 , 0 , 1 , 3 , 3 , 3 , 3 , 3 , 7 , 15 , 254 , 252 , 248 , 0 ' 3
      65. Data 0 , 1 , 31 , 255 , 255 , 240 , 0 , 0 , 0 , 0 , 0 , 255 , 255 , 255 , 0 , 0 ' 4
      66. Data 0 , 255 , 255 , 255 , 7 , 14 , 14 , 14 , 14 , 14 , 15 , 7 , 7 , 3 , 1 , 0 ' 5
      67. Data 0 , 255 , 255 , 255 , 1 , 3 , 7 , 7 , 7 , 7 , 7 , 3 , 3 , 1 , 0 , 0 ' 6
      68. Data 0 , 0 , 0 , 0 , 0 , 1 , 3 , 7 , 15 , 30 , 60 , 120 , 240 , 224 , 192 , 0 ' 7
      69. Data 0 , 248 , 252 , 254 , 15 , 7 , 3 , 3 , 3 , 3 , 7 , 15 , 254 , 252 , 248 , 0 ' 8
      70. Data 0 , 252 , 255 , 255 , 7 , 3 , 1 , 1 , 1 , 1 , 3 , 7 , 255 , 255 , 255 , 0 ' 9
      71. Font_32_3:
      72. Data 0 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 255 , 255 , 255 , 0 ' 0
      73. Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 ' 1
      74. Data 0 , 1 , 7 , 15 , 31 , 60 , 120 , 240 , 224 , 192 , 128 , 0 , 0 , 0 , 0 , 0 ' 2
      75. Data 0 , 0 , 0 , 0 , 0 , 128 , 128 , 128 , 128 , 128 , 192 , 224 , 255 , 127 , 63 , 0 ' 3
      76. Data 0 , 254 , 254 , 254 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 255 , 255 , 255 , 14 , 0 ' 4
      77. Data 0 , 128 , 128 , 128 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 128 , 255 , 255 , 255 , 0 ' 5
      78. Data 0 , 255 , 255 , 255 , 192 , 128 , 0 , 0 , 0 , 0 , 128 , 192 , 255 , 255 , 127 , 0 ' 6
      79. Data 0 , 0 , 0 , 31 , 127 , 255 , 224 , 128 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ' 7
      80. Data 0 , 63 , 127 , 255 , 224 , 192 , 128 , 128 , 128 , 128 , 192 , 224 , 255 , 127 , 63 , 0 ' 8
      81. Data 0 , 0 , 0 , 128 , 192 , 192 , 192 , 192 , 192 , 192 , 128 , 0 , 255 , 255 , 255 , 0 ' 9
      82. Font_32_4:
      83. Data 0 , 240 , 252 , 254 , 30 , 15 , 7 , 7 , 7 , 7 , 15 , 30 , 254 , 252 , 240 , 0 ' 0
      84. Data 0 , 0 , 0 , 0 , 3 , 3 , 3 , 255 , 255 , 255 , 3 , 3 , 3 , 0 , 0 , 0 ' 1
      85. Data 0 , 255 , 255 , 255 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 15 , 15 , 15 , 0 ' 2
      86. Data 0 , 112 , 124 , 126 , 30 , 15 , 7 , 7 , 7 , 7 , 15 , 30 , 254 , 252 , 240 , 0 ' 3
      87. Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 255 , 255 , 255 , 0 , 0 ' 4
      88. Data 0 , 112 , 124 , 126 , 30 , 15 , 7 , 7 , 7 , 7 , 15 , 30 , 254 , 252 , 240 , 0 ' 5
      89. Data 0 , 240 , 252 , 254 , 30 , 15 , 7 , 7 , 7 , 7 , 15 , 30 , 254 , 252 , 240 , 0 ' 6
      90. Data 0 , 0 , 0 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ' 7
      91. Data 0 , 240 , 252 , 254 , 30 , 15 , 7 , 7 , 7 , 7 , 15 , 30 , 254 , 252 , 240 , 0 ' 8
      92. Data 0 , 112 , 124 , 126 , 30 , 15 , 7 , 7 , 7 , 7 , 15 , 30 , 254 , 252 , 240 , 0 ' 9
      Display All
    • das Programm ist ja für ein bestimmtes display geschrieben, daß heißt die Ausgabe isr verteilt den linearen Bildspeicher nach einem displayspezifischen Muster. Die Ausgabe so zurück bauen, daß der Bildspeicher linear auf das display gesendet wird. Dann sieht man leicht, wo ein Bildspeicherpunkt wo auf dem display landet. Und dann kann man die Ausgabe anpassen und dann geht das auch.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch wrote:

      Darf ich mir keine Auszeit nehmen?
      Natürlich nicht :D , Wer rastet der rostet. :saint:
      Da lag ich ja mit der ersten Vermutung richtig.
      Hast Du eine fertige/schnellere Lösung oder Zeit und Lust dazu? Ich wäre vermutlich erst Sonntag abend mit der ersten Versuchsversion so weit.(keine Hardware, wenig Zeit)

      tschoeatsch wrote:

      Die Ausgabe so zurück bauen,
      Dann müsste Ausgabe und Erstellung geändert werden. In idealfall nur die Ausgabe. Matrix2 zeigt die jetzige Ausgabestelle des Speichers. (suboptimal ab der 5.Zeile) Vielleicht das schnellste die jetzige Erstellung auch mal so darzustellen wie die Ausgabe sein sollte um dann diese zu ändern. Erscheint mir Aufwändiger erspart aber die Änderung jeder Font Sub.

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