OLED 0.91" Schriftgröße

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

    • OLED 0.91" Schriftgröße

      Hallo zusammen,

      ich habe 2 Fragen zur Programmierung der kleinen Displays.

      Ich setze das 0,91" Display mit I2C Bus mit 128X32 Zeichen ein.
      Es soll max eine 4stellige Zahl dargestellt werden. Diese Zahl soll natürlich das ganze Display füllen.

      Leider bekomme ich beim Font von 8x8 nur einen Bruchteil der Zahl dargestellt.
      Auch bei einem anderen Font klappt es nicht.

      Wo liegt hier mein Fehler?

      Ich setze das Programm Creativ Font-Studio for Bascom zur Erstellung der Fontdatei ein.
      Zur Reduzierung des Speicherbedarfes habe ich nur die Zahlen von 0-9 in eine eigene Fotdatei übernommen.
      Binde ich diese Datei ( Zahlen.font ) mit in mein Projekt ein, werden die Zahlen auch nicht größer und werden auch nicht dargestellt.

      Kann man die Font-Datei auf das wesentliche begrenzen oder was muss ich besonderes dabei beachten?

      Danke im Voraus

      Grüße
      Thomas

      Hier mein Test Programm:


      '-------------------------------------------------------------------------------
      ' OLED.bas
      '-------------------------------------------------------------------------------
      $regfile = "m328pdef.dat"
      $crystal = 16000000
      $baud = 19200
      Config Clockdiv = 1

      $swstack = 32
      $framesize = 32

      Config Scl = Portc.0
      Config Sda = Portc.1

      Config Twi = 400000

      Waitms 200

      I2cinit

      $lib "i2c_twi.lbx"
      $lib "glcdSSD1306-I2C.lib"


      Config Graphlcd = Custom , Cols = 128 , Rows = 32 , Lcdname = "SSD1306"

      Cls


      Setfont Font8x8
      'Setfont Zahlen
      Lcdat 4 , 2 , "444"

      End

      $include "font8x8.font"
      '$include "Zahlen.font"



      Und hier meie Font Datei Zahlen:

      Zahlen:
      $asm
      .db 2 , 10 , 20 , 0
      .db 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ;
      .db 0 , 240 , 24 , 8 , 24 , 240 , 0 , 0 , 0 , 0 , 0 , 15 , 24 , 16 , 24 , 15 , 0 , 0 , 0 , 0 ; 0
      .db 0 , 0 , 32 , 48 , 248 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 31 , 0 , 0 , 0 , 0 , 0 ; 1
      .db 0 , 48 , 8 , 8 , 8 , 240 , 0 , 0 , 0 , 0 , 16 , 24 , 20 , 18 , 17 , 16 , 0 , 0 , 0 , 0 ; 2
      .db 0 , 16 , 8 , 136 , 136 , 112 , 0 , 0 , 0 , 0 , 0 , 8 , 16 , 16 , 16 , 15 , 0 , 0 , 0 , 0 ; 3
      .db 0 , 0 , 64 , 48 , 248 , 0 , 0 , 0 , 0 , 0 , 6 , 5 , 4 , 4 , 31 , 4 , 0 , 0 , 0 , 0 ; 4
      .db 0 , 224 , 152 , 136 , 136 , 8 , 0 , 0 , 0 , 0 , 0 , 9 , 16 , 16 , 16 , 15 , 0 , 0 , 0 , 0 ; 5
      .db 0 , 240 , 152 , 136 , 136 , 16 , 0 , 0 , 0 , 0 , 0 , 15 , 16 , 16 , 16 , 15 , 0 , 0 , 0 , 0 ; 6
      .db 0 , 8 , 8 , 136 , 104 , 24 , 0 , 0 , 0 , 0 , 0 , 0 , 28 , 3 , 0 , 0 , 0 , 0 , 0 , 0 ; 7
      .db 0 , 112 , 136 , 136 , 136 , 112 , 0 , 0 , 0 , 0 , 0 , 15 , 16 , 16 , 16 , 15 , 0 , 0 , 0 , 0 ; 8
      .db 0 , 240 , 8 , 8 , 8 , 240 , 0 , 0 , 0 , 0 , 0 , 8 , 17 , 17 , 25 , 15 , 0 , 0 , 0 , 0 ; 9
      $end Asm
    • Die lib erwachtet eine Font die mit einem Leerzeichen (32) beginnt und zählt jeden weiteren Eintrag. Die 0 ist dann an 17. Stelle (48) bis 9 sind dann 28 Einträge nötig. Sollen nun die ersten 16 wegbleiben bräuchte es eine eigene Routine, eine Modifikation der lib oder Umrechnung der Zeichen/des Strings.
      Lcdat 4 , 2 , "%%%" sollte 444 ausgeben
      Zahlen ist 10x16 in dem nur 6x10 verwand werden. Könntest Du Dich mit einem 6x8 anfreunden wäre er nur 2/3 so groß bei normaler Verarbeitung.

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

    • Hallo, ich stell hier mal mein Testprogamm für diese Display ein.

      BASCOM Source Code

      1. ' Insanity
      2. ' Test mit OLED
      3. ' Verschiedene Fonts
      4. $regfile = "m328pdef.dat"
      5. $crystal = 18432000
      6. $hwstack = 64
      7. $swstack = 64
      8. $framesize = 64
      9. 'I2C Config
      10. Config Scl = PortD.7
      11. Config Sda = PortD.6
      12. 'Display Config
      13. $lib "glcdSSD1306-I2C.lib" ' SSD1306 LIB einbinden
      14. Config I2cdelay = 1
      15. I2cinit
      16. Waitms 10
      17. Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1106" 'SSD1106 oder SSD1306
      18. Dim I As Word
      19. Dim Text As String * 5
      20. Do
      21. Setfont My6_8
      22. Cls
      23. Lcdat 1 , 1 , "Test"
      24. Lcdat 2 , 1 , "Versuch "
      25. Lcdat 3 , 1 , "Schaumamal"
      26. Lcdat 4 , 1 , "Schaumamal"
      27. Lcdat 5 , 1 , "012345678901234567890"
      28. Lcdat 6 , 1 , "Schaumamal"
      29. Lcdat 7 , 1 , "abcdefghijklmnopqrstu"
      30. Lcdat 8 , 1 , "Font 6_8"
      31. Wait 2
      32. Setfont Digital20x32
      33. Cls
      34. Lcdat 1 , 1 , "012345"
      35. Lcdat 5 , 1 , "67890"
      36. Wait 2
      37. Setfont Font_32x56
      38. Cls
      39. For I = 0 To 99
      40. Text = Str(i)
      41. Text = Trim(text)
      42. Text = "0" + Text
      43. Text = Right(text , 2)
      44. Lcdat 2 , 1 , Text
      45. Lcdat 2 , 64 , "*"
      46. Next
      47. Setfont My6_8
      48. Lcdat 8 , 100 , "15" + Chr(127)
      49. Wait 3
      50. Loop
      51. 'LCD-Font
      52. $include "Font_32x56.font"
      53. $include "My6_8.font"
      54. $include "Digital20x32.font"
      Display All
      und hier die Fontdateien dazu.
      müssen nartürlich umbenannt werden.
      :D
      Files
    • Hallo zusammen,

      Ich habe es heute Morgen hin bekommen.

      Danke Pluto für Deine Info.

      Isanity, danke für das tolle Beispielprogramm. Jetzt sind einige Sachen viel klarer.

      Noch eine Frage ist heute hoch gekommen. Wie kann ich eine Linie zeichnen die prop. zumeinem Anzeigewert ist?
      Der angezeigte Wert hat eine Range von 0 bis 3100.

      Viele Grüße Thomas
    • Leider gibt es keine Line Anweisung. Wie schön solls denn werden? Reicht eine Reihe Buchstaben/Blocks 8x8 ? Oder Pixelgenau ? Bedenke es kann über I2C nicht ausgelesen werden und es nimmt immer mindestens ein Byte. Steh das hochkant (?) würde es die Zeichen löschen die ihm "im Weg" stehen.
      Ich hab da zwei subs gefunden vielleicht wäre das was

      Source Code

      1. Dim Dat As Byte , Yp As Byte , Xp As Byte , Page As Byte , Temp As Byte
      2. Dim Sh As Byte , Sl As Byte , A As Byte , Lp As Byte
      3. Declare Sub Oled_hline(byval Xp As Byte , Byval Yp As Byte , Byval Lp As Byte)
      4. Declare Sub Oled_vline(byval Xp As Byte , Byval Yp As Byte , Byval Lp As Byte)
      5. Sub Oled_hline(byval Xp As Byte , Byval Yp As Byte , Byval Lp As Byte)
      6. Dat = 0
      7. Page = Yp / 8
      8. Page = Page + $b0
      9. Temp = Yp Mod 8
      10. Dat.temp = 1
      11. Sl = Xp And $f
      12. Sh = Xp
      13. Shift Sh , Right , 4
      14. Sh = Sh Or $10
      15. I2cstart : I2cwbyte $78 'Adresse
      16. I2cwbyte $80 : I2cwbyte Page
      17. I2cwbyte $80 : I2cwbyte Sl 'lower Nible 0-7
      18. I2cwbyte $80 : I2cwbyte Sh 'higer nible=10-17
      19. I2cwbyte $40 'Data follow
      20. For A = 1 To Lp
      21. I2cwbyte Dat
      22. Next
      23. #if _sim = 0
      24. I2cstop
      25. #endif
      26. End Sub
      27. Sub Oled_vline(byval Xp As Byte , Byval Yp As Byte , Byval Lp As Byte)
      28. Local Spage As Byte , Epage As Byte
      29. Dat = 0
      30. Spage = Yp / 8
      31. Temp = Yp Mod 8
      32. Lp = Lp + Yp
      33. If Lp > 63 Then Lp = 63
      34. Epage = Lp / 8
      35. Epage = Epage + $b0
      36. Page = Spage
      37. For A = 7 To Temp Step -1
      38. Dat.a = 1
      39. Next
      40. Sl = Xp And $f
      41. Sh = Xp
      42. Shift Sh , Right , 4
      43. Sh = Sh Or $10
      44. Page = Page + $b0
      45. Do 'For Page = Spage To Epage
      46. I2cstart : I2cwbyte $78 'Adresse
      47. I2cwbyte $80 : I2cwbyte Page
      48. I2cwbyte $80 : I2cwbyte Sl 'lower Nible 0-7
      49. I2cwbyte $80 : I2cwbyte Sh 'higer nible=10-17
      50. I2cwbyte $40 'Data follow
      51. I2cwbyte Dat
      52. #if _sim = 0
      53. I2cstop
      54. #endif
      55. Incr Page
      56. If Page > Epage Then Exit Do
      57. If Page < Epage Then
      58. Dat = 255
      59. Else
      60. Dat = 0
      61. Temp = Lp Mod 8
      62. For A = 0 To Temp
      63. Dat.a = 1
      64. Next
      65. End If
      66. Loop
      67. End Sub
      Display All

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