Pinned SSD1306 OLED Display

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

    • bm-magic wrote:

      Falls es funktionieren sollte, bin ich gern bereit die Vollversion zu kaufen
      Ich hab mal ein Herz aus eigenen (Herz-)Fotos für meine Frau gemacht, also alle Bilder angeordnet in Herzform.
      Da gab es eine Demo Software, da konnte ich das wunderbar machen, nur hatte ich ein Wasserzeichen im fertigen Bild.
      Ich habe mir die Software gekauft, für 40 Euro, und habe sie nur für dieses eine mal benutzt. Die Software war damit so teuer wie das Bild-machen-lassen selbst inklusive Rahmen. Ich fand aber die Idee dahinter so gut, dass ich dem Programmierer das Geld gegönnt habe. Ich krieg da übrigens auch kostenlose Updates.

      Was ich damit sagen will:
      Ich finde es nicht anständig, die Vollversion anzuschnorren.

      Wem die Demo nicht reicht, der kauft sich normalerweise die Vollversion.
      Wir unterstützen alle hier mit dem Kauf die Entwickler und ich denke, die dürfen das Geld ruhig haben.

      bm-magic wrote:

      Sonst bin ich besser bedient mit Arduino-ISP, denn dazu gibt im Internet viel mehr Beispiele
      Vielleicht ist es in dem Fall wirklich besser, du stößt dir mit Arduino erstmal die Hörner ab ;)
      Wenn Arduino so gut ist, dann brauchst du Bascom vielleicht gar nicht mehr.
    • Guten Morgen Forum,

      ich habe gerade dieses (noch recht teure) Display gefunden (war hier auch schon mal Tema, sehe ich gerade):
      Der Thread ist aber nicht weitergeführt worden, daher meine Frage:

      amazon.de/gp/product/B0749DYGS…0771_244626071_em_1p_2_ti

      Es ist wie das kleine OLED mit 0,9..-1,2..", nur viel größer mit 2,42", das sind gut 6cm Diagonale, immerhin.

      Problem: Es hat einen SSD 1309!

      Frage (an Hkipnik?):
      Ist der Treiber vergleichbar mit dem vorhandenen Treiber für "SSD1306" oder "SSD1106", oder muss man da Anpassungen machen?

      Es ist schön groß, kann man also auch ohne Lupe bzw. Brille ablesen, wenn man "U100" ist...

      Gruss
      Peer
    • @' rakohr,

      ich werde Dir "ewig Dankbar" sein.
      - Leider konnte ich es noch nicht testen, weil mir mein kleiner "Freund" ATTiny85 mein "Eifer" , übel genommen hat. ist er Krank/Tot?
      Jedenfalls wird ein Reset gesendet und das wars...
      - Auch eine Erfahrung. ;) Ich habe Ersatz bestellt. Bis er da ist, gibt es "nur" Theorie.
      - Aus Deinen Beispielen, (ich konnte soll/ist vergleichen), habe ich unglaublich viel gelernt. Ob ich es "richtig" Verstanden habe wird sich zeigen
      wenn der Ersatz kommt.
      - Ich werde jedenfalls berichten.
    • Hallo,
      hatte auch noch so ein Modul in der Kiste und hab es mal zum laufen bekommen.



      Der Code den ich mal irgendwann gefunden hatte sieht so aus:

      Source Code

      1. $regfile = "m328pdef.dat" ' eingesetzter Mikrocontroller
      2. $crystal = 16000000
      3. $hwstack = 100
      4. $swstack = 100
      5. $framesize = 100
      6. Dim Resetflag As Bit
      7. Const Kontrast = &HFF '00-FF Kontrast
      8. Config Scl = Portc.5
      9. Config Sda = Portc.4
      10. Config Twi = 400000
      11. Declare Sub Rstoled
      12. Declare Sub Oled(byval Text As String * 16 , Byval Col As Integer , Byval Page As Integer)
      13. Declare Sub Oled_init
      14. I2cinit
      15. Call Oled_init
      16. Do
      17. If Resetflag < 1 Then
      18. Call Rstoled
      19. Resetflag = 1
      20. Call Oled( " Text " , 0 , 1)
      21. Call Oled( "abcdefghijklmnop" , 0 , 2)
      22. 'Call Oled( "1234567890123456" , 0 , 3)
      23. 'Call Oled( "ABCDEFGHIJKLMNOP" , 0 , 4)
      24. Call Oled( "1234567890123456" , 0 , 5)
      25. 'Call Oled( " " , 0 , 6)
      26. 'Call Oled( " " , 0 , 7)
      27. 'Call Oled( " " , 0 , 8)
      28. 'Call Oled( " Test " , 0 , 9)
      29. End If
      30. Loop
      31. End
      32. Sub Oled(byval Text As String * 16 , Byval Col As Integer , Byval Page As Integer)
      33. Dim Buchstabe As String * 1
      34. Dim Q As Integer
      35. Dim H As Integer
      36. Dim Temp As Integer
      37. Dim Senden As Byte
      38. Col = Col + 16
      39. Page = Page + 175
      40. I2cstart
      41. I2cwbyte &H78
      42. I2cwbyte &H80
      43. I2cwbyte Page 'Bestimmung Page (Y)
      44. I2cstop
      45. I2cstart
      46. I2cwbyte &H78
      47. I2cwbyte &H80
      48. I2cwbyte &H00
      49. I2cstop
      50. I2cstart
      51. I2cwbyte &H78
      52. I2cwbyte &H80
      53. I2cwbyte Col 'Bestimmung Page (Y)
      54. I2cstop
      55. I2cstart
      56. I2cwbyte &H78
      57. I2cwbyte &H80
      58. I2cstop
      59. I2cstart
      60. I2cwbyte &H78
      61. I2cwbyte &H40
      62. 'Umwandlung von Buchstaben zu Asciiwert zu Clumndata der Datenbank
      63. For Q = 1 To 16
      64. Temp = 0
      65. Buchstabe = Mid(text , Q , 1)
      66. Temp = Asc(buchstabe)
      67. Temp = Temp - 32
      68. Temp = Temp * 8
      69. For H = 1 To 8
      70. Senden = Lookup(temp , Asciitab)
      71. I2cwbyte Senden
      72. Incr Temp
      73. Next H
      74. Next Q
      75. I2cstop
      76. End Sub
      77. Sub Rstoled 'OLED RESET, Aufwecken, alles loeschen
      78. Dim I As Byte
      79. Dim J As Integer
      80. Dim Page As Byte
      81. Page = 176
      82. I2cstart
      83. I2cwbyte &H78
      84. I2cwbyte &H40 'Datenempfang
      85. For J = 0 To 1023
      86. I2cwbyte &H00 'sende "leere Column"
      87. Next J
      88. I2cstop
      89. End Sub
      90. Sub Oled_init
      91. 'OLED initialisation ***********************************************************
      92. I2cstart
      93. I2cwbyte &H78
      94. I2cwbyte &HAE 'DISPLAYOFF
      95. I2cwbyte &HD5 'SETDISPLAYCLOCKDIV
      96. I2cwbyte &H80 'ratio 0x80
      97. I2cwbyte &H00 'SETMULTIPLEX
      98. I2cwbyte &H3F ' 1f 128x32
      99. I2cwbyte &HD3 'SETDISPLAYOFFSET
      100. I2cwbyte &H00
      101. I2cwbyte &H40 'SETSTARTLINE
      102. I2cwbyte &H8D 'CHARGEPUMP
      103. I2cwbyte &H14 'vccstate 14
      104. I2cwbyte &H20 'MEMORYMODE
      105. I2cwbyte &H00 '
      106. I2cwbyte &HA1 'A0 upside down SEGREMAP
      107. I2cwbyte &HC8 'COMSCANDEC
      108. I2cwbyte &HDA 'SETCOMPINS
      109. I2cwbyte &H12 ' 02 128x32 12
      110. I2cwbyte &H81 'SETCONTRAST
      111. I2cwbyte Kontrast 'value 1-->256
      112. I2cwbyte &HD9 'SETPRECHARGE
      113. I2cwbyte &HF1 'vccstate f1
      114. I2cwbyte &HDB 'SETVCOMDETECT
      115. I2cwbyte &H40
      116. I2cwbyte &HA4 'DISPLAYALLON_RESUME
      117. I2cwbyte &HA6 'NORMALDISPLAY
      118. I2cwbyte &HAF
      119. I2cstop
      120. End Sub
      121. Asciitab:
      122. Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0,
      123. Data 0 , 0 , 6 , 95 , 6 , 0 , 0 , 0,
      124. Data 0 , 7 , 3 , 0 , 7 , 3 , 0 , 0,
      125. Data 0 , 36 , 126 , 36 , 126 , 36 , 0 , 0,
      126. Data 0 , 36 , 43 , 106 , 18 , 0 , 0 , 0,
      127. Data 0 , 99 , 19 , 8 , 100 , 99 , 0 , 0,
      128. Data 0 , 54 , 73 , 86 , 32 , 80 , 0 , 0,
      129. Data 0 , 0 , 7 , 3 , 0 , 0 , 0 , 0,
      130. Data 0 , 0 , 62 , 65 , 0 , 0 , 0 , 0,
      131. Data 0 , 0 , 65 , 62 , 0 , 0 , 0 , 0,
      132. Data 0 , 8 , 62 , 28 , 62 , 8 , 0 , 0,
      133. Data 0 , 8 , 8 , 62 , 8 , 8 , 0 , 0,
      134. Data 0 , 0 , 224 , 96 , 0 , 0 , 0 , 0,
      135. Data 0 , 8 , 8 , 8 , 8 , 8 , 0 , 0,
      136. Data 0 , 0 , 96 , 96 , 0 , 0 , 0 , 0,
      137. Data 0 , 32 , 16 , 8 , 4 , 2 , 0 , 0,
      138. Data 0 , 62 , 81 , 73 , 69 , 62 , 0 , 0,
      139. Data 0 , 0 , 66 , 127 , 64 , 0 , 0 , 0,
      140. Data 0 , 98 , 81 , 73 , 73 , 70 , 0 , 0,
      141. Data 0 , 34 , 73 , 73 , 73 , 54 , 0 , 0,
      142. Data 0 , 24 , 20 , 18 , 127 , 16 , 0 , 0,
      143. Data 0 , 47 , 73 , 73 , 73 , 49 , 0 , 0,
      144. Data 0 , 60 , 74 , 73 , 73 , 48 , 0 , 0,
      145. Data 0 , 1 , 113 , 9 , 5 , 3 , 0 , 0,
      146. Data 0 , 54 , 73 , 73 , 73 , 54 , 0 , 0,
      147. Data 0 , 6 , 73 , 73 , 41 , 30 , 0 , 0,
      148. Data 0 , 0 , 108 , 108 , 0 , 0 , 0 , 0,
      149. Data 0 , 0 , 236 , 108 , 0 , 0 , 0 , 0,
      150. Data 0 , 8 , 20 , 4 , 65 , 0 , 0 , 0,
      151. Data 0 , 36 , 36 , 36 , 36 , 36 , 0 , 0,
      152. Data 0 , 0 , 65 , 34 , 20 , 8 , 0 , 0,
      153. Data 0 , 2 , 1 , 89 , 9 , 6 , 0 , 0,
      154. Data 0 , 62 , 65 , 93 , 85 , 30 , 0 , 0,
      155. Data 0 , 126 , 17 , 17 , 17 , 126 , 0 , 0,
      156. Data 0 , 127 , 73 , 73 , 73 , 54 , 0 , 0,
      157. Data 0 , 62 , 65 , 65 , 65 , 34 , 0 , 0,
      158. Data 0 , 127 , 65 , 65 , 65 , 62 , 0 , 0,
      159. Data 0 , 127 , 73 , 73 , 73 , 65 , 0 , 0,
      160. Data 0 , 127 , 9 , 9 , 9 , 1 , 0 , 0,
      161. Data 0 , 62 , 65 , 73 , 73 , 122 , 0 , 0,
      162. Data 0 , 127 , 8 , 8 , 8 , 127 , 0 , 0,
      163. Data 0 , 0 , 65 , 127 , 65 , 0 , 0 , 0,
      164. Data 0 , 48 , 64 , 64 , 64 , 63 , 0 , 0,
      165. Data 0 , 127 , 8 , 20 , 34 , 65 , 0 , 0,
      166. Data 0 , 127 , 64 , 64 , 64 , 64 , 0 , 0,
      167. Data 0 , 127 , 2 , 4 , 2 , 127 , 0 , 0,
      168. Data 0 , 127 , 2 , 4 , 8 , 127 , 0 , 0,
      169. Data 0 , 62 , 65 , 65 , 65 , 62 , 0 , 0,
      170. Data 0 , 127 , 9 , 9 , 9 , 6 , 0 , 0,
      171. Data 0 , 62 , 65 , 81 , 33 , 94 , 0 , 0,
      172. Data 0 , 127 , 9 , 9 , 25 , 102 , 0 , 0,
      173. Data 0 , 38 , 73 , 73 , 73 , 50 , 0 , 0,
      174. Data 0 , 1 , 1 , 127 , 1 , 1 , 0 , 0,
      175. Data 0 , 63 , 64 , 64 , 64 , 63 , 0 , 0,
      176. Data 0 , 31 , 32 , 64 , 32 , 31 , 0 , 0,
      177. Data 0 , 63 , 64 , 60 , 64 , 63 , 0 , 0,
      178. Data 0 , 99 , 20 , 8 , 20 , 99 , 0 , 0,
      179. Data 0 , 7 , 8 , 112 , 8 , 7 , 0 , 0,
      180. Data 0 , 113 , 73 , 69 , 67 , 0 , 0 , 0,
      181. Data 0 , 0 , 127 , 65 , 65 , 0 , 0 , 0,
      182. Data 0 , 2 , 4 , 8 , 16 , 32 , 0 , 0,
      183. Data 0 , 0 , 65 , 65 , 127 , 0 , 0 , 0,
      184. Data 0 , 4 , 2 , 1 , 2 , 4 , 0 , 0,
      185. Data 128 , 128 , 128 , 128 , 128 , 128 , 128 , 128,
      186. Data 0 , 0 , 3 , 7 , 0 , 0 , 0 , 0,
      187. Data 0 , 32 , 84 , 84 , 84 , 120 , 0 , 0,
      188. Data 0 , 127 , 68 , 68 , 68 , 56 , 0 , 0,
      189. Data 0 , 56 , 68 , 68 , 68 , 40 , 0 , 0,
      190. Data 0 , 56 , 68 , 68 , 68 , 127 , 0 , 0,
      191. Data 0 , 56 , 84 , 84 , 84 , 8 , 0 , 0,
      192. Data 0 , 8 , 126 , 9 , 9 , 0 , 0 , 0,
      193. Data 0 , 24 , 164 , 164 , 164 , 124 , 0 , 0,
      194. Data 0 , 127 , 4 , 4 , 120 , 0 , 0 , 0,
      195. Data 0 , 0 , 0 , 125 , 64 , 0 , 0 , 0,
      196. Data 0 , 64 , 128 , 132 , 125 , 0 , 0 , 0,
      197. Data 0 , 127 , 16 , 40 , 68 , 0 , 0 , 0,
      198. Data 0 , 0 , 0 , 127 , 64 , 0 , 0 , 0,
      199. Data 0 , 124 , 4 , 24 , 4 , 120 , 0 , 0,
      200. Data 0 , 124 , 4 , 4 , 120 , 0 , 0 , 0,
      201. Data 0 , 56 , 68 , 68 , 68 , 56 , 0 , 0,
      202. Data 0 , 252 , 68 , 68 , 68 , 56 , 0 , 0,
      203. Data 0 , 56 , 68 , 68 , 68 , 252 , 0 , 0,
      204. Data 0 , 68 , 120 , 68 , 4 , 8 , 0 , 0,
      205. Data 0 , 8 , 84 , 84 , 84 , 32 , 0 , 0,
      206. Data 0 , 4 , 62 , 68 , 36 , 0 , 0 , 0,
      207. Data 0 , 60 , 64 , 32 , 124 , 0 , 0 , 0,
      208. Data 0 , 28 , 32 , 64 , 32 , 28 , 0 , 0,
      209. Data 0 , 60 , 96 , 48 , 96 , 60 , 0 , 0,
      210. Data 0 , 108 , 16 , 16 , 108 , 0 , 0 , 0,
      211. Data 0 , 156 , 160 , 96 , 60 , 0 , 0 , 0,
      212. Data 0 , 100 , 84 , 84 , 76 , 0 , 0 , 0,
      213. Data 0 , 8 , 62 , 65 , 65 , 0 , 0 , 0,
      214. Data 0 , 0 , 0 , 119 , 0 , 0 , 0 , 0,
      215. Data 0 , 0 , 65 , 65 , 62 , 8 , 0 , 0,
      216. Data 0 , 2 , 1 , 2 , 1 , 0 , 0 , 0,
      217. Data 0 , 60 , 38 , 35 , 38 , 60 , 0 , 0
      Display All

      Nun bin ich aber prinzipiell so ein Laie, dass ich die einfachsten Änderung nicht auf die Reihe kriege.
      Wie schaffe ich es den Text In Anführungszeichen ( z.B. " Text " Zeile 30 ) durch eine Variable zu ersetzen?
      Wäre für eure Hilfe sehr dankbar.


      Jörg
    • Der Tip war schon mal super... Danke.

      Leider füllt er den Rest der Zeile mit merkwürdigen Zeichen?

      b03.jpg

      Und warum zählt er meine Schleife nicht durch.... ?

      Source Code

      1. Dim A As Byte
      2. Dim S As String * 16
      3. Do
      4. For A = 0 To 255
      5. S = Str(A)
      6. If Resetflag < 1 Then
      7. Call Rstoled
      8. Resetflag = 1
      9. Call Oled( S, 0 , 1)
      10. Call Oled( "abcdefghijklmnop" , 0 , 2)
      11. 'Call Oled( "1234567890123456" , 0 , 3)
      12. 'Call Oled( "ABCDEFGHIJKLMNOP" , 0 , 4)
      13. Call Oled( "1234567890123456" , 0 , 5)
      14. 'Call Oled( " " , 0 , 6)
      15. 'Call Oled( " " , 0 , 7)
      16. 'Call Oled( " " , 0 , 8)
      17. 'Call Oled( " Test " , 0 , 9)
      18. End If
      19. waitms 300
      20. Next A
      21. Loop
      22. End
      Display All
      Verstehe ich nicht !
    • Dann wird dein flag nicht schnell genug auf 0 gesetzt und deine Ausgabe übersprungen. Mach mal ein do:loop until resetflag=0 als Bremse rein.

      Edit: für ein Zurücksetzten des resetflags besteht ja auch keine Möglichkeit. Ich nehme an, es wird mit call restoled gemacht, das wird nach dem Setzen des flags nicht mehr ausgeführt.
      Raum für Notizen

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

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

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

    • Super Tip...
      der Resetflag wurde im orginal Code gar nicht wieder auf "0" gesetzt. ( hab ich zumindest nicht entdeckt..)

      Somit war nach einem Durchgang schluß.

      Hat einer ne Idee wie man die merkwürdigen Zeichen weg bekommt?

      Auf alle Fälle erst mal ein großes Danke für die Hilfe !

      Jörg
    • QEK-75 wrote:

      Wie mache ich das ?
      da gibt es mehrere Varianten, hier ein Beispiel mit einer Variable, die die Länge erfasst:

      BASCOM Source Code

      1. Dim A As Byte
      2. Dim S As String * 16
      3. Dim L As Byte
      4. Do
      5. For A = 0 To 255
      6. S = Str(A)
      7. Do
      8. L = Length(s)
      9. If L < 16 Then
      10. S = S + " "
      11. Else
      12. Exit Do
      13. End If
      14. Loop
      15. If Resetflag < 1 Then
      16. Call Rstoled
      17. Resetflag = 1
      18. Call Oled( S, 0 , 1)
      19. Call Oled( "abcdefghijklmnop" , 0 , 2)
      20. 'Call Oled( "1234567890123456" , 0 , 3)
      21. 'Call Oled( "ABCDEFGHIJKLMNOP" , 0 , 4)
      22. Call Oled( "1234567890123456" , 0 , 5)
      23. 'Call Oled( " " , 0 , 6)
      24. 'Call Oled( " " , 0 , 7)
      25. 'Call Oled( " " , 0 , 8)
      26. 'Call Oled( " Test " , 0 , 9)
      27. End If
      28. waitms 300
      29. Next A
      30. Loop
      31. End
      Display All