Grafikfehler SSD1306 1,3'

    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!

    • Grafikfehler SSD1306 1,3'

      Hallo,
      ich habe ein Problem mit einem 1306-Oled-Display mit 1,3''. Es werden die letzten zwei Pixel ab ca. 1/4 nach unten des Displays (linkes Bild) nicht angesteuert. Mit einem 0,96'' (rechts) funktioniert die Anzeige ohne Fehler. Das Display ist in Ordnung, ein anderes zeigt den gleichen Fehler. Ich bin erst einmal mit meinem Latein am Ende. Kennt jemand das Problem?
      Danke!
      Gruß Udo

      oled_096.jpgoled130.jpg

      BASCOM-Quellcode: OLED Test

      1. 'Zahlenausgabe
      2. $regfile = "ATtiny85.DAT"
      3. $crystal = 16000000
      4. $hwstack = 40
      5. $swstack = 40
      6. $framesize = 80
      7. Dim Zahl As Word
      8. Dim Zahl1 As Word
      9. Dim Zs As String * 7
      10. Dim Zs1 As String * 7
      11. Config Scl = Portb.2 ' used i2c pins
      12. Config Sda = Portb.0
      13. Config I2cdelay = 1 'i2c speed 10 =100,5 = 200,2=500,1=1000
      14. I2cinit : Waitms 500
      15. $lib "glcdSSD1306-I2C.lib" ' override the default lib with this special one
      16. '#if _build < 20784
      17. 'Dim ___lcdrow As Byte , ___lcdcol As Byte ' dim these for older compiler versions
      18. '#endif
      19. Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1306"
      20. '-------------------------------- Program --------------------------------------
      21. 'LCD Init
      22. '***************************************************************************************************************
      23. I2cstart
      24. I2cwbyte &H78 'I2C Adresse
      25. I2cwbyte &H00 'SET DISPLAY STARTLINE, Kommand stream
      26. I2cwbyte &HAE 'DISPLAYOFF
      27. I2cwbyte &H3F 'Flip Display 180°
      28. I2cwbyte &HA0
      29. I2cwbyte &HC9
      30. I2cwbyte &HA0
      31. I2cwbyte &HA1
      32. 'I2cwbyte &HA8 'Flip Display
      33. 'I2cwbyte &H3F
      34. 'I2cwbyte &HA0
      35. 'I2cwbyte &HC0
      36. 'I2cwbyte &HA0
      37. 'I2cwbyte &HA0
      38. 'I2cwbyte &HD5 'SET DISPLAY CLOCKDIV
      39. 'I2cwbyte &H80 'DISPLAY RATIO '80
      40. 'I2cwbyte &H1F 'DISPLAY 1/32 DUTY
      41. 'I2cwbyte &H22 'HORIZONTAL MODE 20
      42. 'I2cwbyte &B00000000 'Page start Address, range
      43. 'I2cwbyte &B00000111
      44. 'I2cwbyte &H40 'DISPLAY START AT 0
      45. 'I2cwbyte &HA1 'REMAP 0-127
      46. 'I2cwbyte &HA0 'Display up/Down A0 o Down A8
      47. 'I2cwbyte &HC0 'SCAN DIRECTION C8 or C0
      48. 'I2cwbyte &HDA 'COM PINS
      49. 'I2cwbyte &H12 'COM PINS 10
      50. 'I2cwbyte &HA4 ' DISPLAY ON
      51. 'I2cwbyte &HA7 '$A6=NORMAL MODE;$A7=INVERSE MODE
      52. 'I2cwbyte &HD9 'set precharge period D9
      53. 'I2cwbyte &H22 '$22 - External, $F1 - Internal
      54. 'I2cwbyte &HDB 'vcomh deselect level
      55. 'I2cwbyte &H20 'MEMORYMODE
      56. 'I2cwbyte &H00 'horizontal addr mode
      57. 'I2cwbyte &H8D 'enable charge pump
      58. 'I2cwbyte &H14 'at 14h = 20d
      59. I2cwbyte &H81 '10000001 Set contrast
      60. I2cwbyte &HFF '01111111 7F (01-FF)
      61. I2cwbyte &HAF ' DISPLAY ON HAE = off
      62. Waitms 50
      63. I2cstop
      64. '****************************************************************************************************************
      65. Declare Sub Lcd_schreibe()
      66. Wait 1
      67. Cls
      68. Setfont Font16x16
      69. Lcdat 1 , 1 , "SSD1306 "
      70. Lcdat 3 , 1 , " "
      71. Lcdat 5 , 1 , " "
      72. Lcdat 7 , 1 , "Font 16x" , 1
      73. Do
      74. Zahl = Rnd(65000)
      75. Zahl1 = Zahl1 - Zahl
      76. Zs = Str(zahl)
      77. Zs = Format(zs , "000.00")
      78. Zs1 = Str(zahl1)
      79. Zs1 = Format(zs1 , "000.00")
      80. Call Lcd_schreibe()
      81. 'Wait 3
      82. Loop
      83. End
      84. '===============================================================================
      85. $include "font16x16.font"
      86. Sub Lcd_schreibe()
      87. ' Lcdat 3 , 1 , " "
      88. Lcdat 3 , 15 , Zs
      89. 'Lcdat 5 , 1 , " "
      90. Lcdat 5 , 15 , Zs1
      91. Waitms 500
      92. End Sub
      Alles anzeigen

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

    • Der weiße Streifen, neben dem 'F', ist beim linken display auch schmäler. Das sieht für mich so aus, als wenn der Inhalt zu weit nach links angezeigt wird, weil vielleicht die Spaltenanschlüsse nach links versetzt angebracht wurden.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Warum stehen die Zeichen nicht gleichmäßig übereinander? Es sind doch normal alle Zeichen 16 pixel breit. Verwende mal zum Test 4 Zeilen mit je 8 gleichen Buchstaben, zB 'XXXXXXXX'
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch schrieb:

      Sind die Anschlüsse am display verrutscht?
      Ist auch bei einen anderen Display in weiß genau so gewesen. Ich hab nun noch bisschen probiert. Du hast recht, die 2 pixel am Ende fehlen erst einmal am Anfang. Weiterer Fehler ist, das CLS nicht funktioniert bzw. ausgeführt wird. Mit den 0,96'' funktioniert das nach wie vor. Ich kann mir nur vorstellen, dass hier ein anderer Treiber drauf ist, ich denke mal der SH1106. Dann hab ich erst mal schlechte Karten und der Rest mach dann auch Sinn.
      dipl.jpg

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

    • Ich benutze noch den Treiber von Hkipnik, bevor das Display als Lib integriert wurde.
      Da konnte man den Treiberchip wählen, denn die Displays werden mit zwei verschiedenen ausgeliefert.
      Dann kommt es zu diesen Zeilenverschiebungen.
      Zumindest könnte es das sein.

      Hier der Codeteil, mit dem ich noch arbeite:
      Man sieht, dass zwischen dem SH1106 (1) und dem SSD1306 (0) unterschieden wird.


      SSD1306 oder Treiber IC SH1106 wird häufig als Ersatz geliefert. kann 0 oder 1 sein.
      Wie das in der Lib geht, weiß ich jetzt nicht.

      Quellcode

      1. If Driver_typ = 1 Then
      2. For Zab1 = 0 To 7
      3. Call Lcd_comm_out(page) 'send page address
      4. Call Lcd_comm_out(&H10) 'column address upper 4 bits + 0x10
      5. Call Lcd_comm_out(&H00) 'column address lower 4 bits + 0x00 H02 for SH1106
      6. I2cstart 'start condition
      7. I2cwbyte &H78 'slave address
      8. I2cwbyte &H40
      9. For Zab2 = 1 To 128 '128 columns wide
      10. I2cwbyte Ddata(point)
      11. Incr Point
      12. Next
      13. I2cstop
      14. Incr Page 'after 128 columns, go to next page
      15. Next
      16. Else
      17. For Zab1 = 0 To 7
      18. Call Lcd_comm_out(page) 'send page address
      19. Call Lcd_comm_out(&H10) 'column address upper 4 bits + 0x10
      20. Call Lcd_comm_out(&H02)
      21. I2cstart 'start condition
      22. I2cwbyte &H78 'slave address
      23. I2cwbyte &H40
      24. For Zab2 = 1 To 128 '128 columns wide
      25. I2cwbyte Ddata(point)
      26. Incr Point
      27. Next
      28. I2cstop
      29. Incr Page 'after 128 columns, go to next page
      30. Next
      31. End If
      Alles anzeigen
    • Peer Gehrmann schrieb:

      Ich benutze noch den Treiber von Hkipnik
      Hallo Peer,
      das hab ich auch schon erfolgreich eingesetzt. Vorallem, da sind einige Zeichenfunktionen mit integriert. Leider funktioniert das bei mir nicht auf einen Attiny85, das Programm braucht über die 8k Speicher. Die Übernahme der geänderten Parameter für das SH1106 hat bei der LIB nicht funktioniert, oder aber ich bin da zu blöde. ;)
      Ich habe noch ein Atmega32u4 mini Bord, wegen der Größe werde ich das einmal Testen und evtl. verwenden. Das ganze soll einmal eine Uhr + Temperatur + bischen Grafikanimaton in ein kleines retro Fernsehgehäuse für die Puppenstube weden. Das größere Display wäre da schon nich schlecht.