OLED-Display am Arduino Mega

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

    • OLED-Display am Arduino Mega

      Hallo,vielleicht kann mir jemand helfen.Ich hatte am Arduino ein 20x4-Display von Elecronic Assembly(DEM 20486 SBH-PW-N) über ein I2C-Backpack angeschlossen. Das funktionierte mit dem vorliegenden Code hervorragend.Nun wollte ich die gleiche Konfiguration mit einem OELD-Display der gleichen Firma (EA-W2014-XLG) ausprobieren. Das funktioniert nicht.Der Bascom-Code als auch die dazugehörige Library (YwRobot_LCD_i2.lib) ist gleich geblieben.Die Bildfolge zeigt, dass nur jedes 4. Bild korrekt wiedergegeben wird.Mache ich hier etwas falsch...?Kann hier jemand unterstützen?Danke !
      Files
      • Bildfolge.pdf

        (555.53 kB, downloaded 32 times, last: )
      • IMG_0288.JPG

        (434.73 kB, downloaded 10 times, last: )
      • IMG_0290.JPG

        (311.12 kB, downloaded 5 times, last: )
      • Test I2C Display.bas

        (1.97 kB, downloaded 14 times, last: )
    • Falls DJMSCs Tip nicht die Lösung war;
      Lcd_backlight=0 wäre ein Versuch wert.Sein Ausgang zieht SPI CS hoch was evt Probleme verursachen könnte obwohl er in einer Lötbrücke endet.
      Dann ist der PCF lt. Datenblatt für 100kHz gebaut. Das er mit 1MHz noch fast perfekt arbeitet a_57_04ef5ee8
      Config I2cdelay = 10 würde ihn beruhigen.
      Die Pinns D0 und 1 sind (zufällig)? auch die Hardware TWI Pins des AVR. Daher ist es möglich das der Compiler die Hardware benützt (selbst ohne $lib "i2c_twi.lbx" Anweisung) Dann wäre ein Config Twi = 400000 (oder 100000) nötig.

      Denkbar das ein Waitus 5 zwischen Locate... und Lcd... hilft.
    • Hallo Pluto25 und djmsc,

      vielen Dank für Eure Hinweise und Tipps !!!

      Zu djmsc: Ja, das Display kann beides. Habe hier das Display im 8-Bit Datenbusmode laufen.
      Sein kleinerer Bruder, das Display DEM 20486 SBH-PW-N läuft damit einwandfrei.
      Da die Kontaktbelegung beim OLED identisch ist, dacht ich, dass eine Veränderung nicht nötig ist.

      Auch der Controller ist der gleiche (HD44780)....

      Die LIB dafür habe ich von dieser Seite: forum.g-heinrichs.de/viewtopic.php?t=73
      Es handelt sich um eine modifizierte Version der Bascom-Lib von Kent Andersson.
      Auf dem Adapter werkelt ein PCF8574T (Portexpander).

      Zu Pluto25: OK, gute Tipps
      1. BackLight habe ich auf 0 gesetzt. Keine Änderung sichtbar.
      2. Config I2cdelay = 10 habe ich gesetzt. Keine Änderung sichtbar.
      3. In den BASCOM AVR-Options habe ich die I2C-Bits entsprechend gesetzt: PortD.0 = SCL
      PortD.1 = SDA

      Habe allerdings Deinen Nachsatz nicht ganz verstanden: Dann wäre ein Config Twi = 400000 (oder 100000) nötig.

      Ansonsten Euch beiden einen schönen "Rest"-Sonntag.

      Ich werde mal am Montag bei der Firma Electronic Assembly anrufen. Vielleicht gibt es ja irgendwelche Änderungen
      zu dem "normalen" Nicht-OLED Display.
      Ich berichte, sobald ich fündig geworden bin.

      Frage: das Display lässt sich durch umsetzen von Lötbrücken auch im SPI-Mode betreiben. Wie steuere ich das Display dann von Bascom aus an...?
    • Kurzer Auszug:
      Zur Beachtung,die PCF8574 oder PCF8574A haben unterschiedliche Adressen.

      BASCOM Source Code

      1. Config Scl = Portb.5 'SCL I2C
      2. Config Sda = Portb.4 'SDA I2C
      3. Config Twi = 100000 '100 Khz
      4. 'Config Lcdpin = Pin , Db4 = Porta.6 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0
      5. Config Lcd = 20x4
      6. $lib "YwRobot_Lcd_i2c.lib" 'YwRobot Lib für LCD
      7. Const Pcf8574_lcd = 126 'Adresse des I2C-LCDs
      8. 'Pcf8574_lcd = 78
      9. 'Pcf8574A_lcd = 126
      10. Dim Lcd_backlight As Byte '1 = an; 0 = aus. Wird erst durch einen LCD-Befehl umgesetzt!
      11. Config I2cdelay = 1 '1=1Mhz,5=200Khz,10=100Khz,15=66,66Khz
      12. 'Wenn in Lcd keine Anzeige muß der Delaywert erhöht werden.Mit Wert 15 beginnen und dann langsam verringern.
      13. Waitms 500 'warte bis Kondensator bei Ta0 geladen, auch für LCD-Init!
      14. Cursor Off , Noblink
      15. Cls
      Display All
    • Vielen Dank, ftelektro für die ausführliche Darstellung !

      Hat leider nicht ganz zum Erfolg geführt. Erst beim 4. Durchgang erscheint das volle Bild.
      Habe versucht ein kleines Video zu erstellen, um dies zu zeigen. leider hat das nicht funktioniert, d.h.
      ich bin trotz Komprimierung nicht auf die max. 2MB Dateigröße gekommen.
      Deshalb noch einmal als Bildsequenz das angehängte PDF. Die einzelnen Bilder entstehen nacheinander alle 3 Sekunden.
      Den Code (inkl. Deiner Ergänzungen) habe ich ebenfalls beigefügt.

      Anbei auch die "Versuchsanordnung".

      Sind wir nun schon nahe an der Lösung dran....?

      Ich würde mich wirklich sehr freuen :)
      Files
      • Bildfolge.pdf

        (555.53 kB, downloaded 7 times, last: )
      • Test I2C Display.bas

        (1.97 kB, downloaded 3 times, last: )
      • IMG_0317.JPG

        (446.36 kB, downloaded 16 times, last: )

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

    • Christoph wrote:

      Habe hier das Display im 8-Bit Datenbusmode laufen.
      Im 4Bit der Expander hat 8 Pins wovon 1xBacklight, 1xRS, 1xEnable,und einer R/W ist da bleiben nur noch vier für die Daten. Adresse stimmt sicher sonst käm nichts raus. Er scheint nur Probleme mit den Befehlen zu haben. Funktioniert CLS? Lower/Upperline? Eigene Zeichen definieren? Eine Pause zwischen Locate und Test hilft auch nicht?
      Config Twi = 100000 stehlt den Teiler des Hardware I2C. Könnte helfen.
      Oder mal Versuchsweise die Bascom-lib Wo war da noch der Unterschied? Die YwRobot war schneller weil sie ein drittel der Schritte unterläßt?
    • Danke für die letzten Hinweise !

      Zu Pluto25: 1. Ja klar.... 4-Bit (Tipfehler).
      2. Eine Pause zwischen Locate und Test hilft nicht (ausprobiert)
      3. Config Twi = 100000 war in der letzten Version eingebaut. Keine Änderung
      4.CLS funktioniert
      5. Erst jeder 4. Durchgang bildet das komplette Bild ab....



      Const Pcf8574_lcd = 78 'Adresse des I2C-LCDs Pcf8574
      Const Pcf8574A_lcd = 126 'Adresse des I2C-LCDs Pcf8574A
      Dim Lcd_backlight As Byte '1 = an; 0 = aus. Wird erst durch einen LCD-Befehl umgesetzt!

      '****************** Config von I2C ***********************

      Config Sda = Portd.1
      Config Scl = Portd.0
      Config Twi = 200000 '100 Khz
      Config Lcd = 20 * 4 'nicht unbedingt nötig
      Config I2cdelay = 1

      Waitms 500 'warte bis Kondensator bei Ta0 geladen, auch für LCD-Init!

      Cursor Off , Noblink

      Cls



      '******************** Hauptprogramm ***********************


      Do

      Locate 1 , 1
      Lcd " This is the 1. Row "

      Locate 2 , 1
      Lcd " This is the 2. Row "

      Locate 3 , 1
      Lcd " This is the 3. Row "

      Locate 4 , 1
      Lcd " This is the 4. Row "

      Wait 2

      CLS


      Loop



      zu ftelektro: 1. siehe den Code oben (immer 20 zeichen pro Zeile)
      2. Ausführung ohne Doppelpunkt
      3. Leerzeichen statt cls hat nichts geändert.


      Trotzdem nochmals vielen Dank für die Hilfestellungen.

      Kann ich eine andere Lib verwenden?
      Wo bekomme ich diese her ?
      Wie lauten dann die entsprechenden Befehle ?


      MfG

      C. Maass
    • Christoph wrote:

      Kann ich eine andere Lib verwenden?
      Wo bekomme ich diese her ?
      Wie lauten dann die entsprechenden Befehle ?
      Die orginale Bascom lib

      Sollte im Verzeichnis lib stehen - leider gibt es da keine Tabelle welche lib für was da ist (lcd_i2c.lib vom 05.04.02??)

      Gleich

      PS Ein Initlcd sollte eigendlich immer oben im Progamm (vor der Hauptschleife) stehen. Vielleicht hilft das.
      Ist die erste Zeile nach dem Einschalten auch falsch?
      Notfalls die Locate Befehle selber erzeugen. Sind die im Datenblatt gleich dem der herkömlichen?
    • Hallo Christoph,

      habe das bei meiner Umstellung auf OLED-Display gemäß Datenblatt so gelöst!

      Nach der Konfigurierung der LCD-Pins folgende Zeilen eingefügt- und alles war GUT.

      Alles ganz ohne lib!!!

      Habe übrigens auch das EA-W204-XLG in Verwendung. Habe meines aber im 4-Bit Modus in Betrieb.
      Für den 8-Bit Modus sieht das ganze natürlich etwas anders aus. Steht aber auch im Datenblatt!


      'LCD konfigurieren
      '=======================================================================
      Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , _
      Db7 = Portd.0 , E = Portd.3 , Rs = Portd.2
      Config Lcd = 20 * 4

      Waitms 3

      'OLED-Initialisierung
      '=======================================================================
      Lcdcmd &H28
      Lcdcmd &H08
      Lcdcmd &H06
      Lcdcmd &H17
      Lcdcmd &H01
      Waitms 3
      Lcdcmd &H02
      Lcdcmd &H0C

      Cls

      Waitms 3
      Cursor Off Noblink
    • Pluto25 wrote:

      = InitlcdEs hätte neun Zeilen erspart.
      Jetzt ist es nicht mehr am i2c ?
      Das "alte" Lcd hat ohne Initialisierung funktioniert -
      dann OLED eingebaut und danach stundenlange suche in Foren und schließlich im Datenblatt fündig geworden.
      Dabei wirklich nur "initlcd" a_67_e210de67

      Mein Display war nie am i2c....habe gedacht für die Initialisierung ist das egal.

      Nur wer nichts macht macht keine Fehler