ADAFRUIT OLED (SSD1306) per I2C betreiben

gpsklaus

Neues Mitglied
17. Apr. 2009
11
0
0
Sprachen
Hi,
habe mir auch gerade zwei von ADAFRUIT hergestellte 128x64-Pixel-OLED-Displays ( 0.96er-Version ) bestellt und möchte sie unter BASCOM betreiben. Dabei hoffe ich, dass bereits der von KNICKOHR bereitgestellte Programmcode erste Erfolge zeigt.

Vorab habe ich auch schon etwas zumThema recherchiert und bin auf folgende ( vielleicht noch nicht bekannte ) Seiten gestossen. Dabei scheint die Erste Informationen zu enthalten, die über diejenigen aus dem offiziellen Datenblatt hinausgehen, während über die zweite Seite ein Video zu sehen ist, welches u.a. das Display im Einsatz zeigt:

http://www.geekonfire.com/wiki/index.php?title=I2C_OLED_Panel(128x64)
http://www.pial.net/post/Experiment-with-TEA5767-FM-radio-module-and-128x64-OLED-display-module.aspx

Klaus
 
Hallo Klaus!

Willkommen im AVR-Praxis Forum! :ciao:


Vielleicht solltest du für dein Display doch besser einen eigenen Thread verwenden.... :hmmmm:
Wir können deinen Beitrag hier ja mal abkoppeln und dafür ein eigenes Thema erstellen.
Was meinst du dazu? :)


Generell würde ich auch sagen, dass dein Display funktionieren wird.
Alle wichtigen Infos zum Ansteuern via I2C steht ja im WIKI.
Ich habe aber leider noch keine fertige LIB oder INCLUDE-Datei dafür gesehen.
Vielleicht nimmst du dich ja der Sache jetzt mal an. :wink:


Grüße,
Cassio



EDIT:
Ich habe dir jetzt doch mal einen eigenen Thread draus gemacht. :wink:
 
Aufpassen Leute !

Es gibt verschiedene Versionen von dem Display.

Der Code, den ich gepostet habe, funktioniert nur mit den Kozig-Displays und auch dort gibt es (momentan) 3 verschiedene :

ZT.SC-I2CM1 und ZT.SC-I2CM2 -> Diese beiden sind vom Befehlssatz wahrscheinlich identisch mit dem Arduino
ZT.SC-I2CMx -> für dieses Modul habe ich einen eigenen selbstentwickelten Befehlssatz

Die Kozig-Dinger aus der Bucht funktionieren prima :yes4:

Thomas
 
Hallo Klaus!

Willkommen im AVR-Praxis Forum! :ciao:

Vielleicht solltest du für dein Display doch besser einen eigenen Thread verwenden.... :hmmmm:
Wir können deinen Beitrag hier ja mal abkoppeln und dafür ein eigenes Thema erstellen.
Was meinst du dazu? :)

Generell würde ich auch sagen, dass dein Display funktionieren wird.
Alle wichtigen Infos zum Ansteuern via I2C steht ja im WIKI.
Ich habe aber leider noch keine fertige LIB oder INCLUDE-Datei dafür gesehen.
Vielleicht nimmst du dich ja der Sache jetzt mal an. :wink:

Grüße,
Cassio

EDIT:

Ich habe dir jetzt doch mal einen eigenen Thread draus gemacht. :wink:

OK, nachdem ich die Dinger nun einmal bestellt habe und nach dem was KNICKOHR dazu geschrieben hat, davon ausgehen muss, dass die ADAFRUIT-Displays mit seinem Code noch nicht funzen, werde ich mich der Sache natürlich annehmen und dann hier auch berichten.
Ggf. können dabei auch Inhalte der in meinem vorherigen Posting genanten Seite weiterhelfen.

Klaus
 
Hallo,
wie eigentlich zu befürchten war, funzt das Adafruit-OLED-Modul nicht mit dem "Knickohr-Code", wobei auch eine versuchsweise Verwendung der in den Unterlagen angegebenen I2C-Adresse "0x3D" nicht weiterhalf. Gemäss Begleitunterlagen ist für den I2C-Betrieb allerdings auch noch die RESET-Funktion des Moduls zu benutzen, was offenbar in Abweichung zu dem von KOZIG ist.
Vermutlich wird man somit nicht darum herumkommen, auf Basis der für die ADAFRUIT-OLED's bereitgstellten SSD1306-ARDUINO-Libraries auch solche für BASCOM zu erstellen, wofür meine Programmierkenntnisse aber leider nicht ausreichen. Vielleicht findet sich aber irgendwann doch noch ein netter Mensch, der diese Aufgabe übernehmen kann.

Klaus
 
Hallo,
hast Du auch die Adresse auf 8bit umgesetzt ?
0x3D -> 0x7A
Thomas

Ne, aber obwohl ich inzwischen einigermassen pessimistisch bin, werde ich das auch noch einmal probieren.

NEU: Das Ergebnis war ebenfalls negativ!

Wie ist Dein KOZIG-Display genau angschlossen ( nur SCL, SDA, Masse und Versorgung oder noch etwas ) und gibt es von dem Ding irgendwo eine Datenblatt?

Gruss
Klaus
 

Danke für den Hinweis, habe ich schon gemacht. Vorläufiges Fazit für mich: Auch wenn die KOZIG- und die ADAFRUIT-OLEDs beide den SSD1306 verwenden, so scheint sich der Zugriff doch unterschiedlich zu gestalten.
Nachdem aber die ADAFRUIT-Typen im MCS-Forum offenbar noch kein Thema waren, denke ich, dass es nichts schaden kann, auch dort noch einmal einen Ruf nach einer geeigneten Softwareversion loszulassen.

Gruß
Klaus
 
Angeblich soll der oben gepostete Code, auf dem auch meine Modifikation basiert, original von den Sternfrucht-Dingern stammen.

Hier ein funktionierender Code für die Kozig ...CMx Module. Es ist ein 1-Wire Thermometer mit bis zu 9 Sensoren realisiert. Es können verschiedene Dallas-Sensoren verwendet werden. Der Code sucht sich selbst die Anzahl und die passenden Sensoren zusammen. Außerdem ist noch ein Voltmeter integriert, das beim Aufleuchten der Batteriewarnlampe angezeigt wird. Die Temperaturen werden im 10s-Takt durchgescrollt und in einer von mir abgelegten Schrift angezeigt.

Code:
$regfile = "m644def.dat"
$crystal = 8000000
$hwstack = 128
$swstack = 128
$framesize = 128
$lib "i2c_twi.lbx"

Dim I As Byte
Dim J As Byte
Dim V As Single
Dim W As Word
Dim X As Single
Dim Y As Byte
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim Dsid3(8) As Byte
Dim Dsid4(8) As Byte
Dim Dsid5(8) As Byte
Dim Dsid6(8) As Byte
Dim Dsid7(8) As Byte
Dim Dsid8(8) As Byte
Dim Dsid9(8) As Byte
Dim Dsid0(8) As Byte
Dim Dsid1scratchpad(9) As Byte
Dim Dsid2scratchpad(9) As Byte
Dim Anzahlsensoren As Byte
Dim Dg0 As Integer
Dim Dg1 As Integer
Dim Dg2 As Single
Dim Index(5) As Byte
Dim Temp As String * 7
Dim Tmpstring As String * 16

Const Oled_address = &H4E                                                       ' &H27 7bit -> &H4E 8bit
Const Write_cmd = &H01
Const Oled_reset = &H03
Const Oled_8x16str = &H52
Const Fill_area = &H61
Const Set_brightness = &H0A
'Const Set_vcomh = &H05

Declare Sub Ds18xauslesen
Declare Sub Oledtxt(byval S As String , Byval Yoffset As Byte , Byval Xoffset As Byte)
Declare Sub Resetdisplay
Declare Sub Setbrightness(byval Brightness As Byte)
'Declare Sub Setvcomh(byval Vcomh As Byte)
'Declare Sub Deactivatescroll
'Declare Sub Scrollingvertical(byval Rowsfixed As Byte , Byval Rowsscroll As Byte , Byval Scrollstep As Byte , Byval Stepdelay As Byte)
'Declare Sub Scrollinghorizontal(byval Lr As Byte , Byval Spage As Byte , Byval Epage As Byte , Byval Frames As Byte)
Declare Sub Display8x16str(byval Page As Byte , Byval Column As Byte , Byval Char As String * 16)
Declare Sub Fillarea(byval Spage As Byte , Byval Epage As Byte , Byval Scolumn As Byte , Byval Ecolumn As Byte , Byval Filldata As Byte)

' A.0 - 1wire
' A.1 - Spannungsmessung
' A.2 - Reset OLED
' A.3 - Licht an
' A.4 - Motorkontrolllampe
' A.5 - OLED Busy

Config Adc = Single , Prescaler = Auto , Reference = Internal_2.56
Config 1wire = Porta.0
Config Scl = Portc.0
Config Sda = Portc.1
Config Twi = 444444
Config Porta = &B00000100
Porta = &B00011000

Enable Interrupts
I2cinit

Porta.2 = 1
Wait 1
Porta.2 = 0                                                                     ' Reset OLED
Waitms 100
Porta.2 = 1
Wait 1
Resetdisplay

Fillarea 3 , 7 , 0 , 127 , 0                                                    ' Clear Display
Display8x16str 0 , 0 , "Suche Sensoren  "

'--------- 1Wire 1. Sensor suchen ----------------------------------------------
Dsid1(1) = 1wsearchfirst()
If Err = 0 Then
   Tmpstring = ""
   For I = 1 To 8
      Tmpstring = Tmpstring + Hex(dsid1(i))
   Next I
   Index(1) = Lookdown(dsid1(1) , Data2 , 3)
   Display8x16str 4 , 0 , Tmpstring
   Tmpstring = Lookupstr(index(1) , Data1)
   If Dsid1(8) = Crc8(dsid1(1) , 7) Then
      Tmpstring = Tmpstring + "   CRC OK"
   Else
      Tmpstring = Tmpstring + "  CRC BAD"
   End If
   Display8x16str 6 , 0 , Tmpstring
   Wait 1

'--------- 1Wire 2. Sensor suchen ----------------------------------------------
   Dsid2(1) = 1wsearchnext()
   If Err = 0 Then
      Tmpstring = ""
      For I = 1 To 8
         Tmpstring = Tmpstring + Hex(dsid2(i))
      Next I
      Index(2) = Lookdown(dsid2(1) , Data2 , 3)
      Display8x16str 4 , 0 , Tmpstring
      Tmpstring = Lookupstr(index(2) , Data1)
      If Dsid2(8) = Crc8(dsid2(1) , 7) Then
         Tmpstring = Tmpstring + "   CRC OK"
      Else
         Tmpstring = Tmpstring + "  CRC BAD"
      End If
      Display8x16str 6 , 0 , Tmpstring
      Wait 1

'--------- 1Wire 3. Sensor suchen ----------------------------------------------
      Dsid3(1) = 1wsearchnext()
      If Err = 0 Then
         Tmpstring = ""
         For I = 1 To 8
            Tmpstring = Tmpstring + Hex(dsid3(i))
         Next I
         Index(3) = Lookdown(dsid3(1) , Data2 , 3)
         Display8x16str 4 , 0 , Tmpstring
         Tmpstring = Lookupstr(index(3) , Data1)
         If Dsid3(8) = Crc8(dsid3(1) , 7) Then
            Tmpstring = Tmpstring + "   CRC OK"
         Else
            Tmpstring = Tmpstring + "  CRC BAD"
         End If
         Display8x16str 6 , 0 , Tmpstring
         Wait 1

'--------- 1Wire 4. Sensor suchen ----------------------------------------------
         Dsid4(1) = 1wsearchnext()
         If Err = 0 Then
            Tmpstring = ""
            For I = 1 To 8
               Tmpstring = Tmpstring + Hex(dsid4(i))
            Next I
            Index(4) = Lookdown(dsid4(1) , Data2 , 3)
            Display8x16str 4 , 0 , Tmpstring
            Tmpstring = Lookupstr(index(4) , Data1)
            If Dsid4(8) = Crc8(dsid4(1) , 7) Then
               Tmpstring = Tmpstring + "   CRC OK"
            Else
               Tmpstring = Tmpstring + "  CRC BAD"
            End If
            Display8x16str 6 , 0 , Tmpstring
            Wait 1

'--------- 1Wire 5. Sensor suchen ----------------------------------------------
            Dsid5(1) = 1wsearchnext()
            If Err = 0 Then
               Tmpstring = ""
               For I = 1 To 8
                  Tmpstring = Tmpstring + Hex(dsid5(i))
               Next I
               Index(5) = Lookdown(dsid5(1) , Data2 , 3)
               Display8x16str 4 , 0 , Tmpstring
               Tmpstring = Lookupstr(index(5) , Data1)
               If Dsid5(8) = Crc8(dsid5(1) , 7) Then
                  Tmpstring = Tmpstring + "   CRC OK"
               Else
                  Tmpstring = Tmpstring + "  CRC BAD"
               End If
               Display8x16str 6 , 0 , Tmpstring
               Wait 1

'--------- 1Wire 6. Sensor suchen ----------------------------------------------
               Dsid6(1) = 1wsearchnext()
               If Err = 0 Then
                  Tmpstring = ""
                  For I = 1 To 8
                     Tmpstring = Tmpstring + Hex(dsid6(i))
                  Next I
                  Index(5) = Lookdown(dsid6(1) , Data2 , 3)
                  Display8x16str 4 , 0 , Tmpstring
                  Tmpstring = Lookupstr(index(5) , Data1)
                  If Dsid6(8) = Crc8(dsid6(1) , 7) Then
                     Tmpstring = Tmpstring + "   CRC OK"
                  Else
                     Tmpstring = Tmpstring + "  CRC BAD"
                  End If
                  Display8x16str 6 , 0 , Tmpstring
                  Wait 1

'--------- 1Wire 7. Sensor suchen ----------------------------------------------
            Dsid7(1) = 1wsearchnext()
                  If Err = 0 Then
                     Tmpstring = ""
                     For I = 1 To 8
                        Tmpstring = Tmpstring + Hex(dsid7(i))
                     Next I
                     Index(5) = Lookdown(dsid7(1) , Data2 , 3)
                     Display8x16str 4 , 0 , Tmpstring
                     Tmpstring = Lookupstr(index(5) , Data1)
                     If Dsid7(8) = Crc8(dsid7(1) , 7) Then
                        Tmpstring = Tmpstring + "   CRC OK"
                     Else
                        Tmpstring = Tmpstring + "  CRC BAD"
                     End If
                     Display8x16str 6 , 0 , Tmpstring
                     Wait 1

'--------- 1Wire 8. Sensor suchen ----------------------------------------------
                     Dsid8(1) = 1wsearchnext()
                     If Err = 0 Then
                        Tmpstring = ""
                        For I = 1 To 8
                           Tmpstring = Tmpstring + Hex(dsid8(i))
                        Next I
                        Index(5) = Lookdown(dsid8(1) , Data2 , 3)
                        Display8x16str 4 , 0 , Tmpstring
                        Tmpstring = Lookupstr(index(5) , Data1)
                        If Dsid8(8) = Crc8(dsid8(1) , 7) Then
                           Tmpstring = Tmpstring + "   CRC OK"
                        Else
                           Tmpstring = Tmpstring + "  CRC BAD"
                        End If
                        Display8x16str 6 , 0 , Tmpstring
                        Wait 1

'--------- 1Wire 9. Sensor suchen ----------------------------------------------
                        Dsid9(1) = 1wsearchnext()
                        If Err = 0 Then
                           Tmpstring = ""
                           For I = 1 To 8
                              Tmpstring = Tmpstring + Hex(dsid9(i))
                           Next I
                           Index(5) = Lookdown(dsid9(1) , Data2 , 3)
                           Display8x16str 4 , 0 , Tmpstring
                           Tmpstring = Lookupstr(index(5) , Data1)
                           If Dsid9(8) = Crc8(dsid9(1) , 7) Then
                              Tmpstring = Tmpstring + "   CRC OK"
                           Else
                              Tmpstring = Tmpstring + "  CRC BAD"
                           End If
                           Display8x16str 6 , 0 , Tmpstring
                           Wait 1

'--------- 1Wire weitere Sensoren suchen ---------------------------------------
                           Do
                              Dsid0(1) = 1wsearchnext()
                           Loop Until Err = 1
                        End If
                     End If
                  End If
               End If
            End If
         End If
      End If
   End If
End If

Anzahlsensoren = 1wirecount()

If Anzahlsensoren = 0 Then
   Display8x16str 0 , 0 , "Kein Sensor !   "
Else
   Tmpstring = Str(anzahlsensoren) + " Sensor(en)    "
   Display8x16str 0 , 0 , Tmpstring

   Ds18xauslesen

   Do
      If Pina.3 = 0 Then                                                        ' Licht eingeschaltet ?
         Setbrightness 7
      Else
         Setbrightness 0
      End If

'--------- Spannungsmessung ----------------------------------------------------
      While Pina.4 = 0
            Start Adc
            W = Getadc(1)
            V = W * 0.0264
            Temp = Fusing(v , "#.#")
            V = Val(temp)
            Stop Adc
            If V <> X Then
               Display8x16str 0 , 0 , "Batteriespannung"
               Temp = Temp + "/"
               Oledtxt Temp , 3 , 63
               X = V
            End If
            Wait 1
      Wend

'--------- Sensor 1 ------------------------------------------------------------
      If Anzahlsensoren > 0 And J = 10 Then
         1wverify Dsid1(1)
         If Err = 0 Then
            If Dsid1(1) = 34 Or Dsid1(1) = 40 Then Gosub Temp_ds1822
            If Dsid1(1) = 16 Then Gosub Temp_ds1820
            Temp = Fusing(dg2 , "#.#")
            If Dg2 < -19.94 Or Dg2 > 99.94 Then
               Y = Round(dg2)
               Temp = Str(y)
            Else
               Temp = Fusing(dg2 , "#.#")
            End If
            Temp = Temp + "+,"
            Display8x16str 0 , 0 , "Innentemperatur "
            Oledtxt Temp , 3 , 63
         End If
         Incr J
      End If

'--------- Sensor 2 ------------------------------------------------------------
      If Anzahlsensoren > 1 And J = 20 Then
         1wverify Dsid2(1)
         If Err = 0 Then
            If Dsid2(1) = 34 Or Dsid2(1) = 40 Then Gosub Temp_ds1822
            If Dsid2(1) = 16 Then Gosub Temp_ds1820
            If Dg2 < -19.94 Or Dg2 > 99.94 Then
               Y = Round(dg2)
               Temp = Str(y)
            Else
               Temp = Fusing(dg2 , "#.#")
            End If
            Temp = Temp + "+,"
            Display8x16str 0 , 0 , "Aussentemparatur"
            Oledtxt Temp , 3 , 63
         End If
         Incr J
      End If

'--------- Sensor 3 ------------------------------------------------------------
      If Anzahlsensoren > 2 And J = 30 Then
         1wverify Dsid3(1)
         If Err = 0 Then
            If Dsid3(1) = 34 Or Dsid3(1) = 40 Then Gosub Temp_ds1822
            If Dsid3(1) = 16 Then Gosub Temp_ds1820
            If Dg2 < -19.94 Or Dg2 > 99.94 Then
               Y = Round(dg2)
               Temp = Str(y)
            Else
               Temp = Fusing(dg2 , "#.#")
            End If
            Temp = Temp + "+,"
            Display8x16str 0 , 0 , "Sensor 3:       "
            Oledtxt Temp , 3 , 63
         End If
         Incr J
      End If

'--------- Sensor 4 ------------------------------------------------------------
      If Anzahlsensoren > 3 And J = 40 Then
         1wverify Dsid4(1)
         If Err = 0 Then
            If Dsid4(1) = 34 Or Dsid4(1) = 40 Then Gosub Temp_ds1822
            If Dsid4(1) = 16 Then Gosub Temp_ds1820
            If Dg2 < -19.94 Or Dg2 > 99.94 Then
               Y = Round(dg2)
               Temp = Str(y)
            Else
               Temp = Fusing(dg2 , "#.#")
            End If
            Temp = Temp + "+,"
            Display8x16str 0 , 0 , "Sensor 4:       "
            Oledtxt Temp , 3 , 63
         End If
         Incr J
      End If

'--------- Sensor 5 ------------------------------------------------------------
      If Anzahlsensoren > 4 And J = 50 Then
         1wverify Dsid5(1)
         If Err = 0 Then
            If Dsid5(1) = 34 Or Dsid5(1) = 40 Then Gosub Temp_ds1822
            If Dsid5(1) = 16 Then Gosub Temp_ds1820
            If Dg2 < -19.94 Or Dg2 > 99.94 Then
               Y = Round(dg2)
               Temp = Str(y)
            Else
               Temp = Fusing(dg2 , "#.#")
            End If
            Temp = Temp + "+,"
            Display8x16str 0 , 0 , "Sensor 5:       "
            Oledtxt Temp , 3 , 63
         End If
         Incr J
      End If

      If Anzahlsensoren > 5 Then

'--------- Sensor 6 ------------------------------------------------------------
         If Anzahlsensoren > 4 And J = 60 Then
            1wverify Dsid5(1)
            If Err = 0 Then
               If Dsid6(1) = 34 Or Dsid6(1) = 40 Then Gosub Temp_ds1822
               If Dsid6(1) = 16 Then Gosub Temp_ds1820
               If Dg2 < -19.94 Or Dg2 > 99.94 Then
                  Y = Round(dg2)
                  Temp = Str(y)
               Else
                  Temp = Fusing(dg2 , "#.#")
               End If
               Temp = Temp + "+,"
               Display8x16str 0 , 0 , "Sensor 5:       "
               Oledtxt Temp , 3 , 63
            End If
            Incr J
         End If

'--------- Sensor 7 ------------------------------------------------------------
         If Anzahlsensoren > 4 And J = 70 Then
            1wverify Dsid5(1)
            If Err = 0 Then
               If Dsid7(1) = 34 Or Dsid7(1) = 40 Then Gosub Temp_ds1822
               If Dsid7(1) = 16 Then Gosub Temp_ds1820
               If Dg2 < -19.94 Or Dg2 > 99.94 Then
                  Y = Round(dg2)
                  Temp = Str(y)
               Else
                  Temp = Fusing(dg2 , "#.#")
               End If
               Temp = Temp + "+,"
               Display8x16str 0 , 0 , "Sensor 5:       "
               Oledtxt Temp , 3 , 63
            End If
            Incr J
         End If

'--------- Sensor 8 ------------------------------------------------------------
         If Anzahlsensoren > 4 And J = 80 Then
            1wverify Dsid5(1)
            If Err = 0 Then
               If Dsid8(1) = 34 Or Dsid8(1) = 40 Then Gosub Temp_ds1822
               If Dsid8(1) = 16 Then Gosub Temp_ds1820
               If Dg2 < -19.94 Or Dg2 > 99.94 Then
                  Y = Round(dg2)
                  Temp = Str(y)
               Else
                  Temp = Fusing(dg2 , "#.#")
               End If
               Temp = Temp + "+,"
               Display8x16str 0 , 0 , "Sensor 5:       "
               Oledtxt Temp , 3 , 63
            End If
            Incr J
         End If

'--------- Sensor 9 ------------------------------------------------------------
         If Anzahlsensoren > 4 And J = 90 Then
            1wverify Dsid5(1)
            If Err = 0 Then
               If Dsid9(1) = 34 Or Dsid9(1) = 40 Then Gosub Temp_ds1822
               If Dsid9(1) = 16 Then Gosub Temp_ds1820
               If Dg2 < -19.94 Or Dg2 > 99.94 Then
                  Y = Round(dg2)
                  Temp = Str(y)
               Else
                  Temp = Fusing(dg2 , "#.#")
               End If
               Temp = Temp + "+,"
               Display8x16str 0 , 0 , "Sensor 5:       "
               Oledtxt Temp , 3 , 63
            End If
            Incr J
         End If

         If J > 99 Then
            Ds18xauslesen
            J = 0
         End If

      Else

         If J > 50 Then
            Ds18xauslesen
            J = 0
         End If

      End If

      Wait 1

      Incr J
   Loop
End If

End

Temp_ds1822:
   1wwrite &HBE
   Dsid1scratchpad(1) = 1wread(9)
   If Dsid1scratchpad(9) = Crc8(dsid1scratchpad(1) , 8) Then
      Dg0 = Makeint(dsid1scratchpad(1) , Dsid1scratchpad(2))
      Dg2 = Dg0 * 100
      Dg2 = Dg0 / 16
   End If
Return

Temp_ds1820:
   1wwrite &HBE
   Dsid2scratchpad(1) = 1wread(9)
   If Dsid2scratchpad(9) = Crc8(dsid2scratchpad(1) , 8) Then
      I = Dsid2scratchpad(1) And 1
      If I = 1 Then Decr Dsid2scratchpad(1)
      Dg0 = Makeint(dsid2scratchpad(1) , Dsid2scratchpad(2))
      Dg0 = Dg0 * 50
      Dg0 = Dg0 - 25
      Dg1 = Dsid2scratchpad(8) - Dsid2scratchpad(7)
      Dg1 = Dg1 * 100
      Dg1 = Dg1 / Dsid2scratchpad(8)
      Dg0 = Dg0 + Dg1
      Dg2 = Dg0 / 100
   End If
Return

Sub Ds18xauslesen
   1wreset
   1wwrite &HCC
   1wwrite &H44
   Wait 1
End Sub

Sub Oledtxt(byval S As String , Yoffset As Byte , Xoffset As Byte)
   Local Tempstring As String * 1 , Temp As Byte , Center As Byte
   Local Count As Byte , Carcount As Byte , Stringsize As Byte
   Local Breite As Byte , Versatz As Byte , Adresse As Word
   Local Row As Byte , Colum As Byte , Rowcount As Byte
   Local Xpos As Byte , Ypos As Byte , Xpost As Byte , Pixels As Byte
   Versatz = 0
   Center = 0
   Stringsize = Len(s)
   For Carcount = 1 To Stringsize
      Tempstring = Mid(s , Carcount , 1)
      Adresse = Asc(tempstring) - 43
      Adresse = Adresse * 126
      Breite = Lookup(adresse , Font1)
      Center = Center + Breite
      Center = Center + 2
   Next Charcount
   Center = Center - 2
   Temp = Center / 2
   Xoffset = Xoffset - Temp
   Fillarea Yoffset , 7 , 0 , 127 , 0
   For Carcount = 1 To Stringsize
      Tempstring = Mid(s , Carcount , 1)
      Adresse = Asc(tempstring) - 43
      Adresse = Adresse * 126
      Breite = Lookup(adresse , Font1)
      Temp = Breite + 2
      Xpos = Xoffset + Versatz
      For Rowcount = 1 To Breite
         Ypos = Yoffset
         For Count = 1 To 5
            Incr Adresse
            Pixels = Lookup(adresse , Font1)
            Xpost = Xpos + 1
            Fillarea Ypos , Ypos , Xpos , Xpost , Pixels
            Incr Ypos
         Next Count
         Incr Xpos
      Next Rowcount
      Versatz = Versatz + Temp
   Next Charcount
End Sub

Sub Setbrightness(byval Brightness As Byte)
   Do
      nop
   Loop Until Pina.5 = 1
   I2cstart
   I2cwbyte Oled_address
   I2cwbyte Set_brightness
   I2cwbyte Brightness
   I2cstop
End Sub

'Sub Setvcomh(byval Vcomh As Byte)
'   Do
'      nop
'   Loop Until Pina.5 = 1
'   I2cstart
'   I2cwbyte Oled_address
'   I2cwbyte Set_vcomh
'   I2cwbyte Vcomh
'   I2cstop
'End Sub

Sub Fillarea(byval Spage As Byte , Byval Epage As Byte , Byval Scolumn As Byte , Byval Ecolumn As Byte , Byval Filldata As Byte)
   Do
      NOP
   Loop Until Pina.5 = 1
   I2cstart
   I2cwbyte Oled_address
   I2cwbyte Fill_area
   I2cwbyte Spage
   I2cwbyte Epage
   I2cwbyte Scolumn
   I2cwbyte Ecolumn
   I2cwbyte Filldata
   I2cstop
End Sub

Sub Display8x16str(byval Page As Byte , Byval Column As Byte , Byval Char As String * 16)
   Local A As Byte , B As Byte , C As String * 1
   Do
      NOP
   Loop Until Pina.5 = 1
   I2cstart
   I2cwbyte Oled_address
   I2cwbyte Oled_8x16str
   I2cwbyte Page
   I2cwbyte Column
   For A = 1 To 16
      C = Mid(char , A , 1)
      B = Asc(c)
      I2cwbyte B
   Next
   I2cstop
End Sub

Sub Resetdisplay
   Do
      NOP
   Loop Until Pina.5 = 1
   I2cstart
   I2cwbyte Oled_address
   I2cwbyte Oled_reset
   I2cstop
End Sub

Data1:
   Data " " , "DS1822 " , "DS18S20" , "DS18B20"

Data2:
   Data 34 , 16 , 40

Thomas
 
Upps, das Codefensterchen reicht nicht ganz ;)

Das ist unten noch anzufügen :

Code:
Font1:
Data &H0F , &HE0 , &H03 , &H00 , &H00 , &H00 , &HF8 , &H0F , &H00 , &H00 , &H00 , &HFC , &H1F , &H00 , &H00 , &H00 , &HFE , &H3F , &H00 , &H00 , &H00 , &H3E , &H3E , &H00 , &H00 , &H00 , &H1F , &H7C , &H00 , &H00 , &H00 , &H0F
Data &H78 , &H00 , &H00 , &H00 , &H0F , &H78 , &H00 , &H00 , &H00 , &H0F , &H78 , &H00 , &H00 , &H00 , &H1F , &H7C , &H00 , &H00 , &H00 , &H3E , &H3E , &H00 , &H00 , &H00 , &HFE , &H3F , &H00 , &H00 , &H00 , &HFC , &H1F , &H00
Data &H00 , &H00 , &HF8 , &H0F , &H00 , &H00 , &H00 , &HE0 , &H03 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00       ' Code for char + -> °
Data &H17 , &H00 , &H00 , &HFC , &H01 , &H00 , &H00 , &H80 , &HFF , &H0F , &H00 , &H00 , &HF0 , &HFF , &H1F , &H00 , &H00 , &HF8 , &HFF , &H3F , &H00 , &H00 , &HFE , &H03 , &H7E , &H00 , &H00 , &HFF , &H00 , &HF8 , &H00 , &HC0
Data &H3F , &H00 , &HF0 , &H00 , &HE0 , &H0F , &H00 , &HF0 , &H01 , &HF0 , &H07 , &H00 , &HE0 , &H01 , &HF8 , &H01 , &H00 , &HE0 , &H01 , &HF8 , &H00 , &H00 , &HE0 , &H01 , &H7C , &H00 , &H00 , &HE0 , &H01 , &H3C , &H00 , &H00
Data &HE0 , &H01 , &H3E , &H00 , &H00 , &HF0 , &H01 , &H1E , &H00 , &H00 , &HF0 , &H00 , &H1E , &H00 , &H00 , &HF8 , &H00 , &H1E , &H00 , &H00 , &HF8 , &H00 , &H1E , &H00 , &H00 , &H7C , &H00 , &H3E , &H00 , &H00 , &H3C , &H00
Data &H7F , &H00 , &H00 , &H3E , &H00 , &HFF , &H00 , &H00 , &H1E , &H00 , &HFF , &H00 , &H00 , &H0C , &H00 , &H7E , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00       ' Code for char , -> C
Data &H0A , &H00 , &H00 , &H06 , &H00 , &H00 , &H00 , &H00 , &H0F , &H00 , &H00 , &H00 , &H00 , &H0F , &H00 , &H00 , &H00 , &H00 , &H0F , &H00 , &H00 , &H00 , &H00 , &H0F , &H00 , &H00 , &H00 , &H00 , &H0F , &H00 , &H00 , &H00
Data &H00 , &H0F , &H00 , &H00 , &H00 , &H00 , &H0F , &H00 , &H00 , &H00 , &H00 , &H06 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00       ' Code for char -
Data &H07 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &HC0 , &H01 , &H00 , &H00 , &H00 , &HE0 , &H03 , &H00 , &H00 , &H00 , &HE0 , &H03 , &H00 , &H00 , &H00 , &HE0 , &H03 , &H00 , &H00 , &H00 , &HC0 , &H01 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00       ' Code for char .
Data &H19 , &H1E , &H00 , &H00 , &H00 , &H00 , &HFF , &H01 , &H00 , &H00 , &H00 , &HFF , &H1F , &H00 , &H00 , &H00 , &HFC , &HFF , &H01 , &H00 , &H00 , &H80 , &HFF , &H1F , &H00 , &H00 , &H00 , &HFC , &HFF , &H00 , &H00 , &H00
Data &HE0 , &HFF , &H0F , &H00 , &H00 , &H00 , &HFE , &H7F , &H00 , &H00 , &H00 , &HE0 , &HFF , &H01 , &H00 , &H00 , &H00 , &HFF , &H03 , &H00 , &H00 , &H00 , &HF8 , &H03 , &H00 , &H00 , &H00 , &HFF , &H03 , &H00 , &H00 , &HC0
Data &HFF , &H00 , &H00 , &H00 , &HF0 , &H3F , &H00 , &H00 , &H00 , &HFE , &H0F , &H00 , &H00 , &H80 , &HFF , &H01 , &H00 , &H00 , &HF0 , &H7F , &H00 , &H00 , &H00 , &HFC , &H0F , &H00 , &H00 , &H80 , &HFF , &H01 , &H00 , &H00
Data &HE0 , &H7F , &H00 , &H00 , &H00 , &HFC , &H0F , &H00 , &H00 , &H00 , &HFE , &H03 , &H00 , &H00 , &H00 , &H7F , &H00 , &H00 , &H00 , &H00 , &H1F , &H00 , &H00 , &H00 , &H00 , &H06 , &H00 , &H00 , &H00 , &H00       ' Code for char / -> V
Data &H17 , &H00 , &HF8 , &H7F , &H00 , &H00 , &H00 , &HFF , &HFF , &H03 , &H00 , &HC0 , &HFF , &HFF , &H1F , &H00 , &HF0 , &HFF , &HFF , &H3F , &H00 , &HF8 , &H0F , &HC0 , &H7F , &H00 , &HFC , &H01 , &H00 , &HFC , &H00 , &H7C
Data &H00 , &H00 , &HF0 , &H01 , &H3E , &H00 , &H00 , &HE0 , &H01 , &H1E , &H00 , &H00 , &HE0 , &H03 , &H0F , &H00 , &H00 , &HC0 , &H03 , &H0F , &H00 , &H00 , &HC0 , &H03 , &H0F , &H00 , &H00 , &HC0 , &H03 , &H0F , &H00 , &H00
Data &HC0 , &H03 , &H0F , &H00 , &H00 , &HC0 , &H03 , &H0F , &H00 , &H00 , &HE0 , &H03 , &H1E , &H00 , &H00 , &HF0 , &H01 , &H3E , &H00 , &H00 , &HF8 , &H01 , &H7C , &H00 , &H00 , &HFE , &H00 , &HFC , &H03 , &HC0 , &H7F , &H00
Data &HF0 , &HFF , &HFF , &H3F , &H00 , &HE0 , &HFF , &HFF , &H0F , &H00 , &H80 , &HFF , &HFF , &H03 , &H00 , &H00 , &HFC , &H3F , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00       ' Code for char 0
Data &H0E , &H00 , &H00 , &H00 , &H00 , &H00 , &HE0 , &H00 , &H00 , &HC0 , &H00 , &HF0 , &H01 , &H00 , &HE0 , &H01 , &HF8 , &H00 , &H00 , &HE0 , &H01 , &H7C , &H00 , &H00 , &HE0 , &H01 , &HFE , &HFF , &HFF , &HFF , &H01 , &HFF
Data &HFF , &HFF , &HFF , &H01 , &HFF , &HFF , &HFF , &HFF , &H01 , &HFF , &HFF , &HFF , &HFF , &H01 , &H00 , &H00 , &H00 , &HE0 , &H01 , &H00 , &H00 , &H00 , &HE0 , &H01 , &H00 , &H00 , &H00 , &HE0 , &H01 , &H00 , &H00 , &H00
Data &HC0 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00       ' Code for char 1
Data &H14 , &H60 , &H00 , &H00 , &HFE , &H00 , &HF0 , &H00 , &H80 , &HFF , &H01 , &HF8 , &H00 , &HE0 , &HFF , &H01 , &HF8 , &H00 , &HF0 , &HFF , &H01 , &H7C , &H00 , &HF8 , &HE3 , &H01 , &H3E , &H00 , &HF8 , &HE0 , &H01 , &H1E
Data &H00 , &H7C , &HE0 , &H01 , &H1F , &H00 , &H3E , &HE0 , &H00 , &H0F , &H00 , &H1F , &HF0 , &H00 , &H0F , &H00 , &H1F , &HF0 , &H00 , &H0F , &H80 , &H0F , &HF0 , &H00 , &H0F , &HC0 , &H07 , &HF0 , &H00 , &H0F , &HC0 , &H07
Data &HF0 , &H00 , &H1F , &HE0 , &H03 , &HF0 , &H00 , &H1E , &HF0 , &H01 , &HF0 , &H00 , &H3E , &HFC , &H01 , &HF0 , &H00 , &HFC , &HFF , &H00 , &HF0 , &H01 , &HFC , &H7F , &H00 , &HF0 , &H01 , &HF8 , &H1F , &H00 , &HE0 , &H01
Data &HE0 , &H07 , &H00 , &HC0 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00       ' Code for char 2
Data &H14 , &H00 , &H00 , &H00 , &H38 , &H00 , &H38 , &H00 , &H00 , &H7C , &H00 , &H7C , &H00 , &H00 , &HFC , &H00 , &H7C , &H00 , &H00 , &HF8 , &H00 , &H3E , &H00 , &H00 , &HF0 , &H01 , &H3E , &HC0 , &H00 , &HE0 , &H01 , &H1F
Data &HC0 , &H01 , &HE0 , &H03 , &H0F , &HE0 , &H01 , &HC0 , &H03 , &H0F , &HE0 , &H01 , &HC0 , &H03 , &H0F , &HE0 , &H03 , &HC0 , &H03 , &H0F , &HF0 , &H03 , &HC0 , &H03 , &H0F , &HF0 , &H03 , &HC0 , &H03 , &H1F , &HF0 , &H07
Data &HC0 , &H03 , &H1E , &HF8 , &H07 , &HE0 , &H01 , &H3E , &H7C , &H0F , &HF0 , &H01 , &HFC , &H7F , &H3F , &HF8 , &H00 , &HFC , &H3F , &HFE , &HFF , &H00 , &HF8 , &H1F , &HFC , &H7F , &H00 , &HE0 , &H0F , &HF8 , &H1F , &H00
Data &H00 , &H00 , &HE0 , &H07 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00       ' Code for char 3
Data &H18 , &H00 , &H00 , &H70 , &H00 , &H00 , &H00 , &H00 , &HF8 , &H00 , &H00 , &H00 , &H00 , &HFE , &H00 , &H00 , &H00 , &H00 , &HFF , &H00 , &H00 , &H00 , &H80 , &HFF , &H00 , &H00 , &H00 , &HE0 , &HFF , &H00 , &H00 , &H00
Data &HF0 , &HFF , &H00 , &H00 , &H00 , &HFC , &HF3 , &H00 , &H00 , &H00 , &HFE , &HF1 , &H00 , &H00 , &H80 , &H7F , &HF0 , &H00 , &H00 , &HC0 , &H1F , &HF0 , &H00 , &H00 , &HF0 , &H0F , &HF0 , &H00 , &H00 , &HF8 , &H03 , &HF0
Data &H00 , &H00 , &HFC , &H00 , &HF0 , &H00 , &H00 , &H3E , &H00 , &HF0 , &H00 , &H00 , &HFF , &HFF , &HFF , &HFF , &H01 , &HFF , &HFF , &HFF , &HFF , &H03 , &HFF , &HFF , &HFF , &HFF , &H03 , &HFE , &HFF , &HFF , &HFF , &H01
Data &H00 , &H00 , &HF0 , &H00 , &H00 , &H00 , &H00 , &HF0 , &H00 , &H00 , &H00 , &H00 , &HF0 , &H00 , &H00 , &H00 , &H00 , &HF0 , &H00 , &H00 , &H00 , &H00 , &H60 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00       ' Code for char 4
Data &H15 , &H00 , &HF8 , &H03 , &H38 , &H00 , &HFE , &HFF , &H07 , &H7C , &H00 , &HFF , &HFF , &H07 , &HFC , &H00 , &HFF , &HFF , &H03 , &HF8 , &H01 , &HFF , &HFF , &H01 , &HF0 , &H01 , &H0F , &HF8 , &H00 , &HE0 , &H03 , &H0F
Data &H7C , &H00 , &HC0 , &H03 , &H0F , &H3C , &H00 , &HC0 , &H03 , &H0F , &H3E , &H00 , &HC0 , &H03 , &H0F , &H1E , &H00 , &HC0 , &H03 , &H0F , &H1E , &H00 , &HC0 , &H03 , &H0F , &H1E , &H00 , &HC0 , &H03 , &H0F , &H1E , &H00
Data &HE0 , &H03 , &H0F , &H1E , &H00 , &HF0 , &H01 , &H0F , &H3E , &H00 , &HF8 , &H01 , &H0F , &H7C , &H00 , &HFC , &H00 , &H0F , &HFC , &H01 , &H7F , &H00 , &H0F , &HF8 , &HFF , &H3F , &H00 , &H0F , &HF0 , &HFF , &H1F , &H00
Data &H06 , &HC0 , &HFF , &H0F , &H00 , &H00 , &H00 , &HFF , &H01 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00       ' Code for char 5
Data &H15 , &H00 , &H00 , &HFF , &H03 , &H00 , &H00 , &HE0 , &HFF , &H1F , &H00 , &H00 , &HF8 , &HFF , &H7F , &H00 , &H00 , &HFE , &HFF , &HFF , &H00 , &H00 , &HFF , &H07 , &HFE , &H00 , &H80 , &HFF , &H03 , &HF8 , &H01 , &HE0
Data &HCF , &H03 , &HE0 , &H01 , &HF0 , &HC3 , &H01 , &HE0 , &H03 , &HF8 , &HE1 , &H01 , &HC0 , &H03 , &HFC , &HE0 , &H01 , &HC0 , &H03 , &H7E , &HE0 , &H01 , &HC0 , &H03 , &H3E , &HE0 , &H01 , &HC0 , &H03 , &H1F , &HE0 , &H01
Data &HC0 , &H03 , &H0F , &HE0 , &H01 , &HE0 , &H03 , &H06 , &HE0 , &H03 , &HE0 , &H01 , &H00 , &HC0 , &H07 , &HF0 , &H01 , &H00 , &HC0 , &H0F , &HFC , &H00 , &H00 , &H80 , &HFF , &H7F , &H00 , &H00 , &H00 , &HFF , &H3F , &H00
Data &H00 , &H00 , &HFE , &H1F , &H00 , &H00 , &H00 , &HF8 , &H07 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00       ' Code for char 6
Data &H18 , &H0C , &H00 , &H00 , &H00 , &H00 , &H1E , &H00 , &H00 , &H00 , &H00 , &H1E , &H00 , &H00 , &H00 , &H00 , &H1E , &H00 , &H00 , &H00 , &H00 , &H1E , &H00 , &H00 , &H00 , &H00 , &H1E , &H00 , &H00 , &HF0 , &H00 , &H1E
Data &H00 , &H00 , &HFC , &H01 , &H1E , &H00 , &H80 , &HFF , &H01 , &H1E , &H00 , &HE0 , &HFF , &H00 , &H1E , &H00 , &HFC , &H1F , &H00 , &H1E , &H00 , &HFF , &H07 , &H00 , &H1E , &HC0 , &HFF , &H00 , &H00 , &H1E , &HF0 , &H3F
Data &H00 , &H00 , &H1E , &HFC , &H0F , &H00 , &H00 , &H1E , &HFE , &H03 , &H00 , &H00 , &H9E , &H7F , &H00 , &H00 , &H00 , &HDE , &H1F , &H00 , &H00 , &H00 , &HFE , &H0F , &H00 , &H00 , &H00 , &HFE , &H03 , &H00 , &H00 , &H00
Data &HFE , &H01 , &H00 , &H00 , &H00 , &H7E , &H00 , &H00 , &H00 , &H00 , &H3E , &H00 , &H00 , &H00 , &H00 , &H1E , &H00 , &H00 , &H00 , &H00 , &H0C , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00       ' Code for char 7
Data &H15 , &H00 , &H00 , &HE0 , &H0F , &H00 , &HC0 , &H0F , &HF8 , &H3F , &H00 , &HF0 , &H1F , &HFE , &H7F , &H00 , &HF8 , &H3F , &HFF , &HFF , &H00 , &HFC , &H7F , &H3F , &HF8 , &H01 , &H7E , &HF8 , &H0F , &HF0 , &H01 , &H1E
Data &HF0 , &H07 , &HE0 , &H03 , &H1E , &HF0 , &H03 , &HE0 , &H03 , &H0F , &HE0 , &H03 , &HC0 , &H03 , &H0F , &HE0 , &H01 , &HC0 , &H03 , &H0F , &HE0 , &H01 , &HC0 , &H03 , &H0F , &HE0 , &H01 , &HC0 , &H03 , &H0F , &HF0 , &H03
Data &HC0 , &H03 , &H0F , &HF0 , &H03 , &HC0 , &H03 , &H1F , &HF8 , &H07 , &HE0 , &H01 , &H3E , &HFC , &H0F , &HF0 , &H01 , &HFE , &HBF , &H1F , &HF8 , &H01 , &HFC , &H3F , &HFF , &HFF , &H00 , &HF8 , &H1F , &HFE , &H7F , &H00
Data &HE0 , &H0F , &HFC , &H3F , &H00 , &H00 , &H00 , &HF0 , &H0F , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00       ' Code for char 8
Data &H16 , &H00 , &H7F , &H00 , &H00 , &H00 , &HE0 , &HFF , &H01 , &H00 , &H00 , &HF0 , &HFF , &H07 , &H00 , &H03 , &HF8 , &HFF , &H0F , &H80 , &H07 , &HFC , &HC0 , &H0F , &H80 , &H07 , &H3E , &H00 , &H1F , &HC0 , &H07 , &H1E
Data &H00 , &H1E , &HC0 , &H03 , &H1E , &H00 , &H3E , &HC0 , &H03 , &H0F , &H00 , &H3C , &HE0 , &H03 , &H0F , &H00 , &H3C , &HE0 , &H01 , &H0F , &H00 , &H3C , &HF0 , &H01 , &H0F , &H00 , &H3C , &HF8 , &H00 , &H0F , &H00 , &H3C
Data &H78 , &H00 , &H1F , &H00 , &H1C , &H7E , &H00 , &H1F , &H00 , &H1E , &H3F , &H00 , &H3E , &H00 , &HDF , &H1F , &H00 , &HFE , &H00 , &HFF , &H0F , &H00 , &HFC , &H81 , &HFF , &H07 , &H00 , &HF8 , &HFF , &HFF , &H01 , &H00
Data &HF0 , &HFF , &H7F , &H00 , &H00 , &HC0 , &HFF , &H1F , &H00 , &H00 , &H00 , &HFF , &H01 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00       ' Code for char 9

Thomas
 
Hallo Thomas,
werde nächste Woche einmal sehen, ob mir Dein gestern geposteter Code auch bei meinen Adafruits irgendwie weiterhilft und ggf. auch auf einen 328er passt.
Inzwischen überlege ich mir aber auch noch einige der Kozig-Displays schicken zu lassen, wobei mich die vielen möglichen Lieferanten für äußerlich gleich aussehende Oleds allerdings doch etwas irritieren. Kannst Du mir deshalb bitte ( gern auch als PM ) die URL Deiner Bezugsquelle nennen.

Gruß
Klaus
 
Hallo knickohr

Habe eben erfolgreich mein Kozig-Display mit deinem OLED-Code in Betrieb genommen. Bei der
Verwendung deines Font1 blicke ich noch nicht durch. Hast du da ein paar Erklärungen dazu?
Hast du einen Font-Generator verwendet?

Grüsse aus der Schweiz
Thomas
 
Hi,

den Font generiere ich aus einem Fontcrator. Da kommt dann fast das passende schon raus :

http://www.mikroe.com/glcd-font-creator/

Ist aber nicht ganz 100%ig. Man muß das noch in ein BASCOM-Format bekommen und man muß, je nach Fontgroße die Sub Oledtxt anpassen.

Aber alles kein Hexenwerk.

Thomas
 
Hallo knickohr

Tja, vielen Dank, das bringt mich weiter. Habe meinen Airbrush eben angeworfen... aber wie du
erwähnt hast, kommen da nur 99% ruas.

Aber vielleicht doch noch im Ernst. Wie funktioniert das mit dem eigenen Font? Wird der als
Grafik angezeigt?

Vielen Dank für Deine Erklärungen!
Thomas
 
OK, danke, diesen Font-Generator habe ich schon installiert. Leider ist mir immer noch nicht klar,
wie der selbstgebastelte Font dann angewendet wird. Wäre da um etwas Nachhilfe dankbar.
Hast du ev. ein Bild, wie dein Font dann aussieht?

Nochmals Dank und Grüsse
Thomas
 
Die Schrift ist Comic Sans MS.

Bild1.gif

Es werden nur diese Ziffern (und Zeichen) dargestellt, nicht mehr.

Hier wird die Schrift in ein "Muster" umgewandelt :

Code:
Sub Oledtxt(byval S As String , Yoffset As Byte , Xoffset As Byte)
   Local Tempstring As String * 1 , Temp As Byte , Center As Byte
   Local Count As Byte , Carcount As Byte , Stringsize As Byte
   Local Breite As Byte , Versatz As Byte , Adresse As Word
   Local Row As Byte , Colum As Byte , Rowcount As Byte
   Local Xpos As Byte , Ypos As Byte , Xpost As Byte , Pixels As Byte
   Versatz = 0
   Center = 0
   Stringsize = Len(s)
   For Carcount = 1 To Stringsize                                           ' komplette Stringbreite in Pixel ermitteln
      Tempstring = Mid(s , Carcount , 1)
      Adresse = Asc(tempstring) - 43
      Adresse = Adresse * 126                                               ' Blockgröße (Zeichenhöhe in Bytes * Zeichenbreite in Pixel) + 1 (aus Font entnehmen !)
      Breite = Lookup(adresse , Font1)                                      ' Zeichenbreite variabel (TT-Font) (aus Font entnehmen !)
      Center = Center + Breite
      Center = Center + 2                                                   ' variable Zeichenbreite + 2 Pixel Kerning
   Next Charcount
   Center = Center - 2
   Temp = Center / 2                                                        ' Ausrichtung zentriert
   Xoffset = Xoffset - Temp
   Fillarea Yoffset , 7 , 0 , 127 , 0                                       ' Clear Display
   For Carcount = 1 To Stringsize                                           ' erst jetzt zeichnen
      Tempstring = Mid(s , Carcount , 1)
      Adresse = Asc(tempstring) - 43
      Adresse = Adresse * 126                                               ' Blockgröße (Zeichenhöhe in Bytes * Zeichenbreite in Pixel) + 1 (aus Font entnehmen !)
      Breite = Lookup(adresse , Font1)                                      ' Zeichenbreite variabel (TT-Font) (aus Font entnehmen !)
      Temp = Breite + 2                                                     ' variable Zeichenbreite + 2 Pixel Kerning
      Xpos = Xoffset + Versatz
      For Rowcount = 1 To Breite
         Ypos = Yoffset
         For Count = 1 To 5                                                 ' Zeichenhöhe 5 Byte (aus Font entnehmen !)
            Incr Adresse
            Pixels = Lookup(adresse , Font1)
            Xpost = Xpos + 1
            Fillarea Ypos , Ypos , Xpos , Xpost , Pixels
            Incr Ypos
         Next Count
         Incr Xpos
      Next Rowcount
      Versatz = Versatz + Temp
   Next Charcount
End Sub

Ich weiß nicht, wie ich das jetzt erklären soll. Hoffe, Du kommst damit zurecht.

Thomas
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)