Grafikdisplay Varitronix COG-VLGEM1277-01 240x64 pixel

    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!

    • Grafikdisplay Varitronix COG-VLGEM1277-01 240x64 pixel

      Hallo,

      hat jemand bereits mit diesem Display gebastelt?
      Kann ich dieses Display per Bascom ansprechen?
      - Ich hab irgendwo gelesen das dass wegen dem Controller nicht funzen soll.
      Das Display braucht 3,3V für die Logik ist es hier besser den Chip (dachte an einen AtMega8) direkt nur mit 3,3V zu betreiben oder soll ich lieber die Spannung auf den Leitungen zum Display reduzieren?

      Noch eine Frage: mit einem Flachbandkabel hab ich noch nie gearbeitet.
      Wie lötet man sowas?

      Grüße
      Alex
    • Ein Link auf das Datenblatt könntest du noch posten.
      Meinst du wirklich Flachbandkabel?
      Die haben 1,27mm Pinabstand und lassen sich nach Abisolieren recht einfach verlöten.
      FFC Kabel (Flexkabel) habe ich schon Rücklings auf Lochraster geklebt und die Pins mit Kupferlackdraht verlötet. Das geht aber nur, wenn das Trägermaterial einigermaßen temperaturfest ist.
      Stecker für FFC/FPC gibt es von Molex z.B. bei Reichelt.

      Ich finde es besser, bei 3,3V Displays das ganze System auf 3,3V laufen zu lassen. Das spart eine Menge Pegelwandler, die ja eine weitere Fehlerquelle sind.
      Nachteil ist der halbierte Maximaltakt des AVRs.
    • Hallo,

      nein ist so eine FPC zeugs.
      Hier das Datenblatt:
      pollin.de/productdownloads/D121713D.PDF
      Stecker hab ich auch schon gesehen. Nur die dinger sind extrem winzig.
      Wird lustig die anzulöten.

      Hab auch ein paar Youtube Videos gekuckt zu FPC Kabel löten.
      Wenn man nur 6 oder 8 kontakte hat ist das ganz okay.
      Aber bei der Menge an "drähten" dürfte das ungeheuer Fehleranfällig werden genauso wie das löten eines Steckers. Die Abstände sind einfach viel zu gering. Vielleicht versuch ich es mit einer Adapterplatine von ebay. ebay.de/itm/FFC-Adapter-Platin…andkabel-FPC/183927242351

      Mal sehen.

      Jetzt muss ich ersteinmal wissen ob man das ding mit Bascom zum laufen bringen kann.


      Grüße

      Alex
    • Alex_T schrieb:

      Wird lustig die anzulöten.
      Wieso anlöten werden die nicht nur gepresst?

      Alex_T schrieb:

      Jetzt muss ich ersteinmal wissen ob man das ding mit Bascom zum laufen bringen kann.
      Im Grunde bekommt man alles mit Bascom zum Laufen, man muss sich nur damit auseinandersetzen.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von djmsc ()

    • Hallo,

      noch ein paar Fragen:
      wie werden die Daten an das Display übermittelt?
      Braucht man hier für dieses Display ein eigenes Übertragungsprotokoll mit spezifischen Komandos?
      Oder sind die irgendwie universell?
      Wie spricht man ein Pxiel auf dem Display an?
      Muss ich die Zahlen, Buchstaben selbst zeichnen oder gibt es dafür eine Libary?
      Die Libarys für C hab ich ja in dem MC Beitrag gesehen - muss leider zugeben das ich C nur dürftig kann.

      Ich habe in den mikrocontroller.net/topic/472549 Beitrag gesehen das man lediglich 6 der 22 Ports zum MC fürhen muss - der rest muss per 4,7uF Kondenstoren gegen GND geschalten werden bzw. halt so wie dort beschrieben. Also dann braucht das ding nur 6 verbindungen?


      Noch eine Frage zum Pegelwandler: braucht das display eine bidirektionale wandlung? Oder reicht hier einfach ein Spannungsteiler vom MC zum Display? Hintergrund: ich möchte das Display an Batterien betreiben. Bei 3 Zellen wären das 4,5V.



      Ich hab absolut keine ahnung von Grafikdisplays - kenn nur 16x2 und 20x4 Zeichen Displays.

      Danke! & Grüße
      Alex

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Alex_T ()

    • Seriell (Spi)
      Ja.
      Jain. Das Konzept und einige Kommandos sind ähnlich (Datenblatt)
      Ja , verschiedene. z.B Fonts. Das "ST7565 128x64 spi" von Hkinik könnte funktionieren?
      4 Verbindungen, die nur Displayeingänge sind. Idealerweise arbeitet der Avr mit der selben Spannung. Muß der mit höherer Spannung betrieben werden (weil er höher getaktet werden soll) sind Spannungsteiler suboptimal da sie nur für geringe Geschwindigkeiten brauchbar sind.
    • Ich kann nur für die St7565r displays reden , die hab ich schon mehrfach genutzt.
      Theoretisch kann der der IC paralell und seriell (kein echtes SPI galub ich) im Seriell modus kann man aber nicht lesen. Das bedeutet die Grafikfunktionen funktionieren nicht (Line, Circle, dot etc). Bilder direkt kann man laden. Und indem man nen Font umbastelt theoretisch auch im 8er Raster zeichen/stempeln. Muss man halt creativ werden. Paralell ist nicht immer rausgeführt (z.b. EAdog serie) und selbst wenn hab ich nie zum laufen bekommen.
      Anschlüsse sinds glaub ich minimum 3, ich hab lieber alle 5 genutzt, dann kan man das ding auch mal neu initialisieren. Die Grafikdisplays fressen eh mehr Speicher und man braucht einen etwas grösseren Prozessor, da sind ports nie das Problem gewesen. Und natürlich alles 3,3V, ist aber zumindest was ich bisher gemacht hab nie nen problem vom Speed gewesen, fahr das fast alles mit 8Mhz intern takt. Pegelwandeln würde da sogar mit widerständen gehen...ist baer immer mist, dann halt alles 3,3v und gut ists.
      Wenn du mal was mit grafischen probieren willst kannste nen paar gebrauchte paralelle haben, hab ich noch knapp zwei dutzend gebrauchte von. Die sind auch noch 5V (linke seite), da brauchste aber fast 2 komplette ports für.
      display.JPG
      Dein Serielles Schnäppchen braucht dann noch nach Datenblatt Kondensatoren, beim 7565r sind das 1uF, manche Displays wie die blauen bei mir haben die hinten schon auf ner Platine, bei z.b. EAdogm 128-6 musst du die selber bei dir in die Schaltung reinbasteln
      Rechts mal die rückseite von nem seriellen schnäppchen vergangener Zeiten (wahrscheinlich ST7565r Display mit Kondensatoren)
      display1.JPG
      Hier mal nen lauffähiges programm mit dem blauen seriell display

      Quellcode

      1. $regfile = "m8def.dat"
      2. ' lcd pin 20>pind.4 = Dip-package pin 6
      3. ' lcd pin 19>pind.5 = Dip-package pin 11
      4. ' lcd pin 18>pind.7 = Dip-package pin 13
      5. ' lcd pin 17>pinb.5 = Dip-package pin 19
      6. ' lcd pin 16>pinb.2 = Dip-package pin 16
      7. $crystal = 8000000
      8. $hwstack = 32
      9. $swstack = 32
      10. $framesize = 40
      11. $lib "glcdeadogm128x6.lbx"
      12. '$lib "glcd.lbx" für grafik routinen, leider nicht fürs 7565r
      13. Dim A As Byte
      14. 'config mit allen ports wie vorgesehen
      15. 'Config Graphlcd = 128 * 64eadogm , Cs1 = Portd.4 , A0 = Portd.7 , Si = Portb.2 , Sclk = Portb.5 , Rst = Portd.5
      16. ' Initlcd
      17. 'Cls
      18. 'config mit dummy c7 port, cs1 und reset nicht benutzt, reset auf gnd, cs1 auf 3,3v
      19. Config Graphlcd = 128 * 64eadogm , Cs1 = Portc.7 , A0 = Portd.7 , Si = Portb.2 , Sclk = Portb.5 , Rst = Portc.7
      20. Initlcd
      21. Cls
      22. 'Glcdcmd &B01100000 'versatz um 32zeilen, für adafruit notwendig
      23. 'für aaaa-display müssen die beiden folgenden an sein, schrift muss in spalte 2 beginnen!
      24. Glcdcmd &B10100000 'Display für 12Uhr Blickwinkel(180°gedreht)
      25. Glcdcmd &B11001000 'Display für 12Uhr Blickwinkel(gespiegelt)
      26. Glcdcmd &B10000001 'kontrast setzen
      27. Glcdcmd 16 'kontrast auf 8 Setzen
      28. 'bild ins eeprom laden
      29. $eeprom
      30. Bild1:
      31. 'the $BGF directive will load the data into the EEPROM or FLASH depending on the $EEPROM or $DATA directive
      32. $bgf "fendt1.bgf"
      33. 'switch back to normal DATA (flash) mode
      34. $data
      35. Setfont Font16x16 'Font 16x16 Laden
      36. Lcdat 1 , 2 , "ST-7565R"
      37. Lcdat 3 , 2 , "Test1" 'Textausgabe
      38. Lcdat 5 , 2 , "S:P.I"
      39. Lcdat 7 , 2 , "Test1234"
      40. 'Lcdat 5 , 2 , "Test333333333333"
      41. 'Lcdat 6 , 2 , "Test444444444444" 'Textausgabe
      42. 'Lcdat 7 , 2 , "123456781234567"
      43. 'Lcdat 1 , 50 , "."
      44. 'Lcdat 1 , 25 , "88" 'Textausgabe
      45. Wait 5
      46. 'Lcdat 8 , 61 , "88"
      47. Cls
      48. 'Lcdat 7 , 0 , "1234567812345678"
      49. Setfont Font8x8 'Font 16x16 Laden
      50. Lcdat 1 , 2 , "ST7565R" 'Textausgabe
      51. Lcdat 3 , 2 , "S:P.I"
      52. Lcdat 5 , 2 , "Test_tt" 'Textausgab
      53. Lcdat 7 , 2 , "1234567812345678 "
      54. Wait 5
      55. Cls
      56. 'Setfont Font1x1
      57. 'Lcdat 4 , 10 , "-"
      58. 'Setfont Font8x8
      59. 'Pset 1 , 0 , 64
      60. 'Wait 5
      61. Showpice 0 , 0 , Bild1 'Bild1 aus eeprom Anzeigen
      62. 'Showpic 0 , 0 , Bild1 'Bild1 aus flash Anzeigen
      63. Wait 5
      64. 'Glcdcmd &B10100101 'alle pixel an
      65. 'Wait 2
      66. '#glcdcmd &B10100100 'alle aus
      67. Do
      68. For A = 1 To 63 'Kontrast durchlaufend anzeigen
      69. Glcdcmd &B10000001 'kontrast setzen
      70. Glcdcmd A 'kontrastwert
      71. Waitms 300
      72. Glcdcmd &B10100111 ' negativmodus an
      73. Waitms 300
      74. Glcdcmd &B10100110 ' negativmodus aus (Default)
      75. Cls
      76. Lcdat 2 , 1 , "Kontrast"
      77. Lcdat 4 , 30 , A 'aktuellen kontrastwert im Display anzeigen
      78. Waitms 500
      79. Next A
      80. Loop
      81. End
      82. $include Font8x8.font
      83. '$include Font8x8tt.font 'truetype font
      84. $include Font16x16.font
      85. 'bild in flash speichern
      86. 'Bild1:
      87. '$bgf "fendt1.bgf"
      Alles anzeigen
    • An: Schraubbear:

      Wenn das Programm so funzen sollte ist es ja ganz einfach.
      Sorry, das ich es noch nicht ausporbiert hab - aber ich hab meine Steckplatinen verlegt so das ich alles direkt löten muss. Die neuen kommen erst übernächste Woche. -> Warensendung.

      Kannst du mir noch die beiden Dateien aus deinem Beispiel schicken? Font, Bild
      Dann kann ich zumindest schoneinmal den Code virtuell testen. Vielleicht löt ich dann gleich.
      Hab einen FPC sockel in passender größe auf einer alten (Schrott) Platine gefunden. Den könnt ich für den ersten provisorischen aufbau benutzen bis ich dann die Adapterplatinen hab -> die kommen vermudlich bis Mittwoch.

      Danke!

      Grüße
      Alex
    • Hallo zusammen,
      ich habe mir auch ein paar von diesen LCDs zugelegt. Die sind ja preislich echt attraktiv.
      Blöd ist nur der 22Pin FFC, aber beim China-Mann bekommt man den auch.
      Hier mal ein Testprogramm, in diesem Fall erst einmal nur eine Helligkeit, die beiden Graustufen gehen aber auch. Ist ohne LIB, beliebige Ausgänge mit Shiftout. Und wegen Faulheit recht wenigen Kommentaren, sorry.
      Viel Spass damit.

      BASCOM-Quellcode

      1. 'Ansteuerung Grafikdisplay Varitronix COG-VLGEM1277-01 240x64 pixel
      2. $regfile = "m1284pdef.dat"
      3. $crystal = 20000000
      4. $hwstack = 50
      5. $swstack = 100
      6. $framesize = 100
      7. Declare Sub Lcd_send(out_byte As Byte)
      8. Declare Sub Lcd_data(byval Dat_byte As Byte)
      9. Declare Sub Lcd_cmd1(byval Cmd_byte1 As Byte)
      10. Declare Sub Lcd_cmd2(byval Cmd_byte1 As Byte , Byval Cmd_byte2 As Byte)
      11. Declare Sub Lcd_cmd3(byval Cmd_byte1 As Byte , Byval Cmd_byte2 As Byte , Byval Cmd_byte3 As Byte)
      12. Declare Sub Lcd_char(byval Posx As Byte , Byval Posy As Byte , Byval Letter As Byte , Byval Size As Byte)
      13. Declare Sub Lcd_string(byval Posx As Byte , Byval Posy As Byte , Zeile As String , Byval Size As Byte)
      14. Declare Sub Lcd_init()
      15. Declare Sub Lcd_fill_box(byval Start_col As Byte , Byval Start_page As Byte , Byval End_col As Byte , Byval End_page As Byte , Byval Gray As Byte)
      16. Declare Sub Lcd_icon(byval Posx As Byte , Byval Posy As Byte , Bylabel Icon_label As Word)
      17. Pin_cs Alias Porta.0
      18. Pin_dc_a0 Alias Porta.1
      19. Pin_sck Alias Porta.2
      20. Pin_sda Alias Porta.3
      21. Config Pin_cs = Output
      22. Config Pin_dc_a0 = Output
      23. Config Pin_sck = Output
      24. Config Pin_sda = Output
      25. Config Base = 0
      26. Const 8x8 = 0
      27. Const 16x16 = 1
      28. Const Data_write = &H1D ' Display Data Write(n -bytes)
      29. Const page_addr = &HB1 ' Page Address Set(2 Byte)
      30. Const col_addr = &H13 ' Column Address Set(2 Byte)
      31. Const display_off = &HAE ' Display On / Off : 0 = Off / 1 = On
      32. Const display_on = &HAF ' Display On / Off : 0 = Off / 1 = On
      33. Const display_normal = &HA6 ' Display / Normal : 0 = Normal / 1 = Reverse
      34. Const display_reverse = &HA7 ' Display / Normal : 0 = Normal / 1 = Reverse
      35. Const display_light_normal = &HA4 ' Display All Lighting : 0 = Normal / 1 = All On
      36. Const display_light_all_on = &HA5 ' Display All Lighting : 0 = Normal / 1 = All On
      37. Const display_start_line = &H8A ' Display Start Line(2 / 3 Byte)
      38. Const display_mode = &H66 ' Display Mode(2 Byte) : 0 = 4 Gray -scale , 1 = Binary
      39. Const gray_scale_pattern = &H39 ' Gray Scale Pattern(2 Byte)
      40. Const com_out_status_normal = &HC4 ' Common Output Status Select : 0 = Normal / 1 = Reverse
      41. Const com_out_status_reverse = &HC5 ' Common Output Status Select : 0 = Normal / 1 = Reverse
      42. Const duty_set = &H6D ' Duty Set Command(3 Byte)
      43. Const builtin_osc_off = &HAA ' Built -in Oscillator Circuit : [0] : 0 = Off / 1 = On
      44. Const builtin_osc_on = &HAB ' Built -in Oscillator Circuit : [0] : 0 = Off / 1 = On
      45. Const builtin_osc_freq = &H5F ' Built -in Oscillator Circuit Frequency Select(2 Byte)
      46. Const pwr_control = &H25 ' Power Control Set(2 Byte)
      47. Const lc_drive_voltage = &H2B ' Liquid Crystal Drive Voltage Select(2 Byte)
      48. Const el_volume = &H81 ' Electronic Volume Set(2 Byte)
      49. Const Reset_lcd = &HE2 ' Software Reset
      50. Dim Font_pointer As Iram Word At 8 Overlay ' Data pointer R8:R9 Font_start = Loadlabel(font_6x8)
      51. Dim Font_start As Word
      52. Dim Char_bytes1_4 As Dword , Char_bytes5_6 As Word , Out_bytes(6) As Byte At Char_bytes1_4 Overlay
      53. Dim My_string As String * 40 , My_string_ovly(40) As Byte At My_string Overlay
      54. Dim Double_char(16) As Byte
      55. Dim W As Word
      56. Double_char(0) = &B0000_0000
      57. Double_char(1) = &B0000_0011
      58. Double_char(2) = &B0000_1100
      59. Double_char(3) = &B0000_1111
      60. Double_char(4) = &B0011_0000
      61. Double_char(5) = &B0011_0011
      62. Double_char(6) = &B0011_1100
      63. Double_char(7) = &B0011_1111
      64. Double_char(8) = &B1100_0000
      65. Double_char(9) = &B1100_0011
      66. Double_char(10) = &B1100_1100
      67. Double_char(11) = &B1100_1111
      68. Double_char(12) = &B1111_0000
      69. Double_char(13) = &B1111_0011
      70. Double_char(14) = &B1111_1100
      71. Double_char(15) = &B1111_1111
      72. My_string = "HELLO WORLD"
      73. Font_start = Loadlabel(font_6x8)
      74. Lcd_init
      75. Do
      76. Lcd_fill_box 0 , 1 , 239 , 8 , &B00_00_00_00
      77. Wait 1
      78. Lcd_fill_box 200 , 3 , 230 , 6 , &B11_11_11_11
      79. Lcd_string 8 , 1 , My_string , 8x8
      80. Lcd_icon 10 , 4 , Icon8x8
      81. Lcd_icon 100 , 4 , Icon16x16
      82. Lcd_string 8 , 7 , My_string , 16x16
      83. Wait 10
      84. Loop
      85. End
      86. Sub Lcd_send(out_byte As Byte)
      87. Shiftout Pin_sda , Pin_sck , Out_byte , 1
      88. Reset Pin_sda
      89. End Sub
      90. Sub Lcd_data(byval Dat_byte As Byte)
      91. Reset Pin_cs
      92. Set Pin_dc_a0
      93. Lcd_send Dat_byte
      94. Reset Pin_dc_a0
      95. Set Pin_cs
      96. End Sub
      97. Sub Lcd_cmd1(byval Cmd_byte1 As Byte)
      98. Reset Pin_cs
      99. Reset Pin_dc_a0
      100. Lcd_send Cmd_byte1
      101. Set Pin_cs
      102. End Sub
      103. Sub Lcd_cmd2(byval Cmd_byte1 As Byte , Byval Cmd_byte2 As Byte)
      104. Reset Pin_cs
      105. Reset Pin_dc_a0
      106. Lcd_send Cmd_byte1
      107. Set Pin_dc_a0
      108. Lcd_send Cmd_byte2
      109. Reset Pin_dc_a0
      110. Set Pin_cs
      111. End Sub
      112. Sub Lcd_cmd3(byval Cmd_byte1 As Byte , Byval Cmd_byte2 As Byte , Byval Cmd_byte3 As Byte)
      113. Reset Pin_cs
      114. Reset Pin_dc_a0
      115. Lcd_send Cmd_byte1
      116. Set Pin_dc_a0
      117. Lcd_send Cmd_byte2
      118. Lcd_send Cmd_byte3
      119. Reset Pin_dc_a0
      120. Set Pin_cs
      121. End Sub
      122. Sub Lcd_init()
      123. Lcd_cmd1 Reset_lcd
      124. Waitms 20
      125. Lcd_cmd2 builtin_osc_freq , &H00 '5F 00
      126. Lcd_cmd1 builtin_osc_on 'AB
      127. Lcd_cmd2 lc_drive_voltage , &H07 '2B 07
      128. Lcd_cmd2 el_volume , &H10 '81 10
      129. Lcd_cmd2 pwr_control , &B11111 '25 1F
      130. Lcd_cmd3 duty_set , &H11 , &H00 '6D 11 00
      131. Lcd_cmd1 display_normal 'A6
      132. Lcd_cmd1 display_light_normal 'A4
      133. Lcd_cmd2 display_mode , 1 '66 00
      134. Lcd_cmd2 gray_scale_pattern , &H25 '&H36 '39 36
      135. Lcd_cmd1 com_out_status_reverse 'C5
      136. Lcd_cmd2 display_start_line , 0 '8A 00
      137. Lcd_cmd1 display_on 'AF
      138. End Sub
      139. Sub Lcd_fill_box(byval Start_col As Byte , Byval Start_page As Byte , Byval End_col As Byte , Byval End_page As Byte , Byval Gray As Byte)
      140. Local X As Byte , Y As Byte
      141. Local Col_count As Byte
      142. Col_count = End_col - Start_col
      143. For Y = Start_page To End_page
      144. Lcd_cmd2 page_addr , Y
      145. Lcd_cmd2 col_addr , Start_col + 8
      146. Lcd_cmd1 data_write
      147. For X = 0 To Col_count
      148. Lcd_data Gray
      149. Next X
      150. Next Y
      151. End Sub
      152. Sub Lcd_char(byval Posx As Byte , Byval Posy As Byte , Byval Letter As Byte , Byval Size As Byte)
      153. Local Font_offset As Word
      154. Local Col As Byte
      155. Local Nibble As Byte
      156. Font_pointer = Font_start
      157. Font_offset = Letter - 32
      158. Font_offset = Font_offset * 6
      159. Font_pointer = Font_pointer + Font_offset
      160. Read Char_bytes1_4
      161. Read Char_bytes5_6
      162. Lcd_cmd2 page_addr , Posy
      163. Lcd_cmd2 col_addr , Posx
      164. Lcd_cmd1 data_write
      165. If Size = 1 Then
      166. For Col = 0 To 5
      167. Nibble = Out_bytes(col) And &B0000_1111
      168. Lcd_data Double_char(nibble)
      169. Lcd_data Double_char(nibble)
      170. Next Col
      171. Lcd_cmd2 page_addr , Posy + 1
      172. Lcd_cmd2 col_addr , Posx
      173. Lcd_cmd1 data_write
      174. For Col = 0 To 5
      175. Nibble = Out_bytes(col) / 16
      176. Lcd_data Double_char(nibble)
      177. Lcd_data Double_char(nibble)
      178. Next Col
      179. Else
      180. For Col = 0 To 5
      181. Lcd_data Out_bytes(col)
      182. Next Col
      183. End If
      184. End Sub
      185. Sub Lcd_string(byval Posx As Byte , Byval Posy As Byte , Zeile As String , Byval Size As Byte)
      186. Local Len_zeile As Byte
      187. Local My_char As Byte
      188. Len_zeile = Len(zeile) - 1
      189. For My_char = 0 To Len_zeile
      190. Lcd_char Posx , Posy , My_string_ovly(my_char) , Size
      191. If Size = 0 Then Posx = Posx + 6 Else Posx = Posx + 12
      192. Next My_char
      193. End Sub
      194. Sub Lcd_icon(byval Posx As Byte , Byval Posy As Byte , Bylabel Icon_label As Word)
      195. Local Out_byte As Byte
      196. Local Col As Byte
      197. Local Size As Byte
      198. Lcd_cmd2 page_addr , Posy
      199. Lcd_cmd2 col_addr , Posx
      200. Lcd_cmd1 data_write
      201. W = Icon_label
      202. !lds _dptrl,{w }
      203. !LDS _dptrh,{w+1}
      204. Read Size
      205. For Col = 0 To Size
      206. Read Out_byte
      207. Lcd_data Out_byte
      208. Next Col
      209. If Size = 15 Then
      210. Lcd_cmd2 page_addr , Posy + 1
      211. Lcd_cmd2 col_addr , Posx
      212. Lcd_cmd1 Data_write
      213. For Col = 0 To 15
      214. Read Out_byte
      215. Lcd_data Out_byte
      216. Next Col
      217. End If
      218. End Sub
      219. $include "data_file.txt"
      Alles anzeigen
      VLGEM1277.jpg
      Dateien
      • data_file.txt

        (4,02 kB, 20 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Franz ()

    • Hallo zusammen,
      dieses Display entwickelt sich langsam zu meinem Lieblingsteil.
      Hauptnachteil des Pollin Moduls ist, dass es nur seriell ansprechbar ist und daher kein Lesen des RAMs erlaubt.
      Und da das LCD in diesem Modus immer 8-bit überschreibt, kann man nicht wirklich schön Grafiken oder ähnliches verwenden.
      Für reinen Text oder ein paar Linien ist es mit 40x8 Zeichen gut geeignet und auch schnell.
      Will man aber frei auf dem Bildschirm zeichnen, ist es wichtig, immer nur das Pixel zu ändern, welches gerade geschrieben werden soll und nicht noch 7 andere.
      Also braucht man einen eigenen Bildspeicher, ein Abbild des RAMs also (240 * 8 Byte).
      Das habe ich in dieser Version jetzt umgesetzt. Alle Funktionen schreiben nur Pixel und speichern die Änderung im Bildspeicher.
      VLGEM1277_1_1.bas
      data_file.inc

      VLGEM1277_1.jpg

      Als Spielerei habe ich dann noch ein kleines Video gemacht, wo man auch mal eine Animation sieht.
      Damit man die Graphik erkennen kann, musste ich allerdings ein Waitms 20 zwischen jeden Step einfügen, was es etwas langsam macht.
      Vielleicht kann der eine oder andere was damit anfangen.
    • Hallo Franz,

      ganz sauber sind die Funktionen noch nicht, denke ich.
      Einmal ist die Schrift weiß auf weißem Hintergrund wie bei dem gefüllten Kreis, dann wieder nicht sichtbar wie bei der ersten 3. oder der Null.
      Die Linien werden wohl auch mit verschiedenen Algorithmen gezeichnet, betrachtet man die Spitzen der Dreiecke.
      Das Problem hatte @Pluto25 im anderen Thread auch schon.

      Fehlstellen.jpg
    • Hallo Michael,
      ich bin ziemlich sicher, dass noch der eine oder andere Fehler drin ist.
      In dem Beispiel habe ich einfach mal alle Funktionen verwendet, ohne darauf zu achten, dass es Sinn macht. Deswegen ist auch viel mehr übereinander geschrieben, als man das wirklich tun würde.
      Die meisten Stellen, die du markiert hast, sind daher alle ok, sie resultieren aus dem Togglen bzw überschreiben.
      Bei der "3" wird der Text zuerst geschrieben und dann von dem innersten Rechteck überschrieben. Da das mit Pix_clear ausgegeben wird, werden die Pixel einfach gelöscht. Deswegen fehlt der untere Teil der "3".
      Bei der "0" ist es ähnlich, das Polygon ist mit Pix_toggle ausgegeben und kippt daher den vorher geschriebenen Text.
      Das W-förmige Polygon ist mit Pix_toggle ausgegeben, daher setzt die erste Kante die Punkte, die zweite löscht dann wieder einen. Das passiert bei sehr spitzen Winkeln. Wenn man das verhindern will, schreibt man einfach mit Pix_set, wie dies beim Dreieck gemacht ist. Das im Programm zu verhindern ist recht aufwendig.
      Den Vorteil von Pix_toggle sieht man am besten am Smilie. Das eine ist mit Toggle, das ander mit Set geschrieben. Ich finde es sieht mit Toggle viel besser aus. Beim Text würde genau das gleiche passieren wie in dem neuen Bild zu sehen.
      Nur die untere linke Ecke des Quadrats ist tatsächlich ein Fehler, da habe ich einen Punkt vergessen, der das Togglen korrigieren soll. Deswegen hier der Vollständigkeit halber noch die korrigierte Version.

      VLGEM1277_1_3a.jpg

      VLGEM1277_1_3.bas