Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 30 von 30

Thema: SPI Code für das schöne OLED fehlt

  1. #21
    Moderator Avatar von Trexis5
    Registriert seit
    02.11.2016
    Ort
    Neu-Ulm
    Beiträge
    112
    Das hat nix mit Fede zu tun.
    Das ist Forum Gesetz in allen Foren.

    https://de.wikipedia.org/wiki/Crossposting
    Gruß Holger
    link zu mir..

  2. #22
    Kabelträger
    Registriert seit
    14.12.2016
    Alter
    48
    Beiträge
    14
    na, meinetwegen.
    Dann werde ich eben überlegen, wo ich in Zukunft was poste...

  3. #23
    Kabelträger
    Registriert seit
    08.12.2016
    Beiträge
    2
    Darf ich noch mal zu dem Thema nachfragen?
    Ich habe hier ein Waveshare 1.3 inch 128x64 OLED SPI/I2C Interfaces vertical pinheader SSD1306 von Eckstein.
    Wäre jemand von euch so nett und hilft mir das Display an einem 20 Mhz ATMEGA 1284 über SPI (Bascom AVR 2.0.7.5) in Betrieb zu nehmen?
    Was ist das beste Programm um Grafiken und Fonts für das Display zu konvertieren?
    Muss ich noch die CPUsignale von 5V auf 3,3V wandeln (geplante VCC am OLED = 3,3V) oder schluckt das Display bei 3,3V VCC das trotzdem?
    Das CPU-Board ist fertig aufgebaut, Ports B/C/D sind frei verfügbar, es ist das erste mal, daß ich mich an die OLED's wage.
    Danke!
    Overkill

  4. #24
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    455
    Muss ich noch die CPUsignale von 5V auf 3,3V wandeln (geplante VCC am OLED = 3,3V) oder schluckt das Display bei 3,3V VCC das trotzdem?
    Power positive (3.3~5V power input)
    grafiken kannst du über den Font-Satz machen oder mit bascom mitteln Bilder convertieren.
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


  5. #25
    Moderator Avatar von Trexis5
    Registriert seit
    02.11.2016
    Ort
    Neu-Ulm
    Beiträge
    112
    Unter Bascom Werkzeuge findest du den Converter.

    Code:
    '------------------------------------------------------------------
    '                           GRAPHIC FONT
    '     Use the Bascom font file's for all the graphic display's,
    '              include inverted and/or rotated text.
    '        By Evert Dekker 2007 GraphicFont@Evertdekker dotje com
    '                   Created with Bascom-Avr: 1.11.8.8
    '------------------------------------------------------------------
    
    $regfile = "m128def.DAT"
    $crystal = 7372800
    $baud = 19200
    $hwstack = 100
    $swstack = 120
    $framesize = 100
    
    Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portc , Ce = 3 , Cd = 0 , Wr = 2 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6
    Cursor Off
    Cls
    
    
    Declare Sub Lcdtext(byval S As String , Byval Xoffset As Byte , Byval Yoffset As Byte , Byval Fontset As Byte , Byval Inverse As Byte , Byval Rotation As Byte)
    'SYNTAX  Lcdtest String , Xoffset , Yoffset , Fontset , Inverse , Rotation
    '
    '* Xoffset and Yoffset is in pixels, so you can place text on every spot on the display
    '* You determin yourself in the subroutine witch font belongs to the fontset
    
    
    '=== Your main prog here ====
    Do
    Lcdtext "5X5 Font" , 10 , 2 , 4 , 0 , 0
    Lcdtext "8X8 Font" , 2 , 120 , 2 , 1 , 3
    Lcdtext "6X8 Font" , 10 , 20 , 3 , 0 , 0
    Lcdtext "16X16 font" , 10 , 30 , 2 , 0 , 0
    Lcdtext "Inverted" , 10 , 85 , 2 , 1 , 0
    Lcdtext "If you can't read this then incr. Swstack" , 1 , 120 , 4 , 0 , 0
    Wait 10
    Cls
    Lcdtext "0 deg.Rotation" , 10 , 10 , 1 , 0 , 0
    Lcdtext "90 deg.Rotation" , 170 , 1 , 1 , 0 , 1
    Lcdtext "180 deg.Rotation" , 120 , 20 , 1 , 0 , 2
    Lcdtext "270 deg.Rotation" , 200 , 120 , 1 , 0 , 3
    Lcdtext "Also inverted" , 150 , 80 , 1 , 1 , 2
    Lcdtext "Every font" , 150 , 100 , 2 , 0 , 2
    Wait 10
    Cls
    Loop
    End
    
    
    
    '=== Sub Routines ===
    Sub Lcdtext(byval S As String , Xoffset As Byte , Yoffset As Byte , Fontset As Byte , Inverse As Byte , Rotation As Byte)
    Local Tempstring As String * 1 , Temp As Byte               'Dim local the variables
    Local A As Byte , Pixels As Byte , Count As Byte , Carcount As Byte , Lus As Byte
    Local Row As Byte , Byteseach As Byte , Blocksize As Byte , Dummy As Byte
    Local Colums As Byte , Columcount As Byte , Rowcount As Byte , Stringsize As Byte
    Local Xpos As Byte , Ypos As Byte , Pixel As Byte , Pixelcount As Byte
    If Inverse > 1 Then Inverse = 0                             'Inverse can't be greater then 1
    If Rotation > 3 Then Rotation = 0                           'There are only 4 rotation's
    Stringsize = Len(s) - 1                                     'Size of the text string -1 because we must start with 0
    For Carcount = 0 To Stringsize                              'Loop for the numbers of caracters that must be displayed
    
     If Fontset = 1 Then Restore Font8x8                        'Add or remove here fontset's that you need or not,
     If Fontset = 2 Then Restore Font16x16                      'this is the name that you gave to the font, NOT the filename
     If Fontset = 3 Then Restore Font6x8                        'If you dont know the name, open the font file in wordpad, and there it is,
     If Fontset = 4 Then Restore Font5x5                        'right on top.
    
     Temp = Carcount + 1                                        'Cut the text string in seperate caracters
    Tempstring = Mid(s , Temp , 1)
    Read Row : Read Byteseach : Read Blocksize : Read Dummy     'Read the first 4 bytes from the font file
    Temp = Asc(tempstring) - 32                                 'Font files start with caracter 32
    For Lus = 1 To Temp                                         'Do dummie read to point to the correct line in the fontfile
       For Count = 1 To Blocksize
        Read Pixels
       Next Count
    Next Lus
    Colums = Blocksize / Row                                    'Calculate the numbers of colums
    Row = Row * 8                                               'Row is always 8 pixels high = 1 byte, so working with row in steps of 8.
    Row = Row - 1                                               'Want to start with row=0 instead of 1
    Colums = Colums - 1                                         'Same for the colums
    Select Case Rotation
        Case 0                                                  '0 degrees rotation
                For Rowcount = 0 To Row Step 8                  'Loop for numbers of rows
                      A = Rowcount + Yoffset
                      For Columcount = 0 To Colums              'Loop for numbers of Colums
                          Read Pixels : If Inverse = 1 Then Toggle Pixels       'Read the byte from the file and if inverse = true then invert de byte
                          Xpos = Columcount                     'Do some calculation to get the caracter on the correct Xposition
                          Temp = Carcount * Byteseach
                          Xpos = Xpos + Temp
                          Xpos = Xpos + Xoffset
                              For Pixelcount = 0 To 7           'Loop for 8 pixels to be set or not
                                 Ypos = A + Pixelcount          'Each pixel on his own spot
                                 Pixel = Pixels.0               'Set the pixel (or not)
                                 Pset Xpos , Ypos , Pixel       'Finaly we can set the pixel
                                 Shift Pixels , Right           'Shift the byte 1 bit to the right so the next pixel comes availible
                              Next Pixel
                      Next Columcount
                Next Rowcount
        Case 1                                                  '90 degrees rotation
                For Rowcount = Row To 0 Step -8                 'Loop is now counting down
                      A = Rowcount + Xoffset
                      A = A - 15                                'Correction to set Xpos on Xoffset with rotation
                      For Columcount = 0 To Colums
                          Read Pixels : If Inverse = 1 Then Toggle Pixels
                          Xpos = Columcount
                          Temp = Carcount * Byteseach
                          Xpos = Xpos + Temp
                          Xpos = Xpos + Yoffset                 'We want that Xoffset is still Xoffset, so we need here the change from x to y
                                 For Pixelcount = 7 To 0 Step -1
                                    Ypos = A + Pixelcount
                                    Pixel = Pixels.0
                                    Pset Ypos , Xpos , Pixel
                                    Shift Pixels , Right
                                 Next Pixel
                      Next Columcount
                Next Rowcount
        Case 2                                                  '180 degrees rotation
                For Rowcount = Row To 0 Step -8
                      A = Rowcount + Yoffset
                      A = A - 7                                 'Correction to set Xpos on Xoffset with rotation
                      For Columcount = Colums To 0 Step -1
                          Read Pixels : If Inverse = 1 Then Toggle Pixels
                          Xpos = Columcount
                          Temp = Carcount * Byteseach
                          Xpos = Xpos - Temp
                          Xpos = Xpos - 8                       'Correction to set Xpos on Xoffset with rotation
                          Xpos = Xpos + Xoffset
                              For Pixelcount = 7 To 0 Step -1
                                 Ypos = A + Pixelcount
                                 Pixel = Pixels.0
                                 Pset Xpos , Ypos , Pixel
                                 Shift Pixels , Right
                              Next Pixel
                      Next Columcount
                Next Rowcount
        Case 3                                                  '270 degrees rotation
                For Rowcount = 0 To Row Step 8
                      A = Rowcount + Xoffset
                        For Columcount = Colums To 0 Step -1
                          Read Pixels : If Inverse = 1 Then Toggle Pixels
                          Xpos = Columcount
                          Temp = Carcount * Byteseach
                          Xpos = Xpos - Temp
                          Xpos = Xpos - 8                       'Correction to set Xpos on Xoffset with rotation
                          Xpos = Xpos + Yoffset
                                 For Pixelcount = 0 To 7
                                    Ypos = A + Pixelcount
                                    Pixel = Pixels.0
                                    Pset Ypos , Xpos , Pixel
                                    Shift Pixels , Right
                                 Next Pixel
                      Next Columcount
                Next Rowcount
    End Select
    Next Carcount
    End Sub                                                     'End of this amazing subroutine
    
    
    '=== Includes ===
    $include "Font8x8.font"                       'Includes here your font files
    $include "Font16x16.font"                     'If you don't need the files in your program, don't include them,
    $include "Font6x8.font"                       'these are flash memory eaters.
    $include "Font5x5.font"
    Geändert von Trexis5 (27.12.2016 um 08:08 Uhr)
    Gruß Holger
    link zu mir..

  6. #26
    Platinenputzer
    Registriert seit
    02.11.2016
    Beiträge
    39
    "Muss ich noch die CPUsignale von 5V auf 3,3V wandeln"
    Unbedingt.

  7. #27
    Kabelträger
    Registriert seit
    08.12.2016
    Beiträge
    2
    Hallo Holger und Elektron.
    ok, ich sitze hier mit heißem Lötkolben und bedanke mich schon mal zu der Starthilfe mit dem Sourche.
    zuerst habe ich mal Holgers Quelltext in die Bascom-IDE kopiert und beginne mit der Anpassung auf das Display.
    Bisher noch ein paar Fragezeichen mit dem Display-Pinout und dem Config Graphlcd......das knobele ich jetzt mal aus.

    Ich kann auf 3-Wire und 4-wire SPI (default) oder I2c konfigurieren. Ports und Platz habe ich genug.
    Was auf jeden Fall noch fehlt, sind die Fonts 6x8 und 5x5, hab gestern schon einige *.FONT-Dateien im Netz runtergeladen, aber die beiden waren da nicht dabei.
    Habt Ihr schon einen erprobten Spannungsteiler für den Bus (ich präferiere was passives) oder muss ich das erst ausprobieren ?

  8. #28
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    455
    "Muss ich noch die CPUsignale von 5V auf 3,3V wandeln"
    Unbedingt.
    bei mir gehts ohne
    Arduino UNO R3 Entwickelnsboard ATmega328P
    das display an 3,3 v gehängt.
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


  9. #29
    Platinenputzer
    Registriert seit
    02.11.2016
    Beiträge
    39
    Zitat Zitat von DON Beitrag anzeigen
    bei mir gehts ohne
    Arduino UNO R3 Entwickelnsboard ATmega328P
    das display an 3,3 v gehängt.
    Ja, ich sehe gerade:
    Display technology: OLED
    Size: 0.96"
    Resolution: 128x64
    Protocol: SPI
    Power supply range: 3V-5V
    Chipset: SSD1306, Datasheet

  10. #30
    Moderator Avatar von Trexis5
    Registriert seit
    02.11.2016
    Ort
    Neu-Ulm
    Beiträge
    112
    font.zip
    Hier die Fonts
    Gruß Holger
    link zu mir..

Ähnliche Themen

  1. ESP8266 + OLED Display
    Von DON im Forum ESP 8266
    Antworten: 0
    Letzter Beitrag: 03.01.2017, 18:34
  2. Netztausfallerkennung, Beschaltung und code
    Von tschoeatsch im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 28.11.2016, 21:45
  3. Mir fehlt das Unterforum "Elektronik"
    Von mac5150 im Forum offtopic
    Antworten: 1
    Letzter Beitrag: 12.11.2016, 09:45

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •