Forum: Mikrocontroller und Digitale Elektronik Brauche Hilfe Oled Display 2x16 EA W162-X3LG


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jörn P. (jonnyp)


Lesenswert?

Hallo allerseits. Es gab hier schon mehrere Artikel, hat aber leider 
nichts genützt.
Ich betreibe das Oled im 4-bit Modus.
Mal vorab: Wenn ich meinen LCD Test-Treiber auf das Oled los lasse wird 
das Oled initialiseirt und ein Teil des Test Text wird richtig 
angezeigt,
aber nur die erste Zeile und nur die ersten 8 Zeichen. Der Cursor blink 
dabei in Spalte 9. Der Rest ist dunkel.

Beim Oled komme ich Offensichtlich nicht in den 2-Zeilen Modus.
Die Initialisierung von Electronic Assembly im 4-Bit Modus funktioniert 
nicht. Da geht gar nichts. Alle meine timings sind sehr großzügig 
gehalten und das Busy Flaag wird abgefragt.
Mir wäre schon geholfen, wenn mir jemand die Initialisierungs nibbles 
nennen würde, oder welcher Controller im Display verbaut ist.
Ähnlich HD44780 ist eben NICHT gleich :-(
https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&ved=2ahUKEwjVq9-F6a3wAhX_g_0HHbUnCtAQFjABegQIBBAD&url=https%3A%2F%2Fwww.lcd-module.de%2Ffileadmin%2Feng%2Fpdf%2Fdoma%2Folede.pdf&usg=AOvVaw00hDa3wUy6WMkEwnp5sRCb
Hier (hoffentlich) der Link zum Datenblatt. Der init ist auf seite 2.
Vielen Dank

von Jörg R. (solar77)


Lesenswert?

Jörn P. schrieb:
> Mal vorab: Wenn ich meinen LCD Test-Treiber auf das Oled los lasse wird
> das Oled initialiseirt und ein Teil des Test Text wird richtig
> angezeigt,
> aber nur die erste Zeile und nur die ersten 8 Zeichen. Der Cursor blink
> dabei in Spalte 9. Der Rest ist dunkel.

Dann ist deine Initiallisierung falsch. Ob Du sonst Fehler gemacht hast 
kann niemand wissen, denn weder sieht man den Code noch einen 
Schaltplan.

von OSchlaffel (Gast)


Lesenswert?

Den Code für ein normales HD44780-kompatibles Display verwendet?

von Jörn P. (jonnyp)


Lesenswert?

Jörg R. schrieb:
> Dann ist deine Initiallisierung falsch.

Das habe ich ja geschrieben.
Das Oled ist schon richtig angeschlossen, sonst würde gar nichts gehen.

von Jörn P. (jonnyp)


Lesenswert?

OSchlaffel schrieb:
> Den Code für ein normales HD44780-kompatibles Display verwendet?

Wenn ich den Code verwende kommt es zu dem erwähnten Effekt: Nur 1ste 
Zeile und nur 8 Zeichen Text.

von Hugo H. (hugo_hu)


Lesenswert?

Jörn P. schrieb:
> Mir wäre schon geholfen, wenn mir jemand die Initialisierungs nibbles
> nennen würde,

So etwas steht üblicherweise im Datenblatt (Seite 5):

https://www.mouser.de/datasheet/2/127/olede-971.pdf

Komischerweise hast Du das gleiche DB verlinkt - was willst Du denn 
eigentlich? Soll Dir jemand fertigen Code liefern?

Kannst ja auch hier mal schauen - Goggle / Chrome etc. übersetzen das 
gerne für Dich :-)

http://www.avr-asm-tutorial.net/avr_en/apps/lcd/lcd.html

: Bearbeitet durch User
von Jörn P. (jonnyp)


Lesenswert?

Hugo H. schrieb:
> So etwas steht üblicherweise im Datenblatt (Seite 5):
Das datenblatt habe ich, und es sogar gelesen;-)
nachstehend eine Copy der Initialisierung.
Wie ich bereits geschrieben habe, funktioniert diese Reihenfolge nicht.
Dein Link zielt auf ein LCD, ich jabe ein Oled, das ist  leider nicht 
ganz das gleiche.

RS_DD=1; //RS-Pin as Output
EN_DD=1; //EN-Pin as Output
RW_DD=1; //RW-Pin as Output
RS = 0; //RS-Pin to low
RW = 0; //RW-Pin to low
EN = 0; //EN-Pin to low
send_nibble(0x03); //Be sure to
send_nibble(0x03); //be in
send_nibble(0x03); //8-Bit-Mode
send_nibble(0x02); //Switch to 4 Bit
Wait(50); //Wait 5us
WriteIns(0x28);//4-Bit-Mode
WriteIns(0x08);//display off
WriteIns(0x06);//entry mode set increment cursor by 1 not shifting 
display
WriteIns(0x17);//Character mode and internel power on
WriteIns(0x01);//clear display
WriteIns(0x02);//return home
WriteIns(0x0C); //display on
Auszug Ende.

Es kann durchaus sein, das die Reihenfolge falsch ist. Ich habe im 
Funktion Set, wo Interface und Zeilenanzahl festgelegt werden, schon 
viele Kombinationen ohne Erfolg durchprobiert.
Wenn also jemand das Oled am laufen hat und mir die richtige Reihenfolge 
der nibbles nennen könnte wäre  schon alles paletti.
Ansonsten muss ich wohl davon ausgehen, das das Display defekt ist.

Danke  für Hinweise

von Hard Werker (Gast)


Lesenswert?

Jörn P. schrieb:
> Ansonsten muss ich wohl davon ausgehen, das das Display defekt ist.

Ich wette dass dein Display nicht defekt ist.
Der Fehler sitz vor deinem Bildschirm und Tastatur.

Wenn es nicht die Software/Firmware ist kann es auch an der
(deiner steuernden) Hardware liegen. Das scheint dir nicht in
den Sinn zu kommen. Auch der Gesamtaufbau kann eine Rolle
spielen.

Insofern bleibt nur auf Jörg hinzuweisen:

Jörg R. schrieb:
> denn weder sieht man den Code noch einen Schaltplan.

Ja und ich habe "Gesamtaufbau" geschrieben der nochmals einen
grossen Unterschied zum Schaltplan machen kann.

von Axel R. (axlr)


Lesenswert?

Jörn P. schrieb:
> Wenn ich meinen LCD Test-Treiber auf das Oled los lasse

na - dann zeig doch mal "deinen" Test-Treiber...

von Hugo H. (hugo_hu)


Lesenswert?

Jörn P. schrieb:
> Dein Link zielt auf ein LCD, ich jabe ein Oled, das ist  leider nicht
> ganz das gleiche.

Wie wäre es, wenn Du mal auf jeder Seite links oder rechts oben 
hinschaust? Da steht unübersehbar "OLED-DISPLAYS". Warum wohl?

Jörn P. schrieb:
> Alle meine timings sind sehr großzügig
> gehalten und das Busy Flaag wird abgefragt.

Lass das mit dem Busy Flag mal sein, wenn die Timings wirklich großzügig 
sind.

Jörn P. schrieb:
> Es kann durchaus sein, das die Reihenfolge falsch ist.

Es kann durchaus sein, dass Dein Programm falsch ist, dass Deine 
Verdrahtung falsch ist, dass Abblockkondensatoren fehlen, dass ...

Wenn Du nichts offen legst kann Dir auch nicht geholfen werden.

von P. P. (klatschnass)


Angehängte Dateien:

Lesenswert?

Hallo Jörn,
ich habe das EA W202-XLG 2x20 OLED Display an meinem Internetradio 
angeschlossen.
Das läuft über einen Raspberry -> I2C -> MCP23017 -> Display 
angeschlossen und der Einfachheit halber in Python programmiert. Die 
Initialisierung sollte aber die gleiche sein. Es hat relativ problemlos 
funktioniert und läuft bis heute täglich.
Die Klasse habe ich hier angehängt.
Hier der Teil mit der Initialisierung:
1
    setPortMasked(0x03)
2
    self.__eToggle__();
3
    setPortMasked(0x03)
4
    self.__eToggle__();
5
    setPortMasked(0x03)
6
    self.__eToggle__();
7
    setPortMasked(0x02)  #4bit
8
    self.__eToggle__();
9
    __usleep__(50.0)
10
    
11
    self.writeDataByte(0, 0x28)  #4 bit mode, N=1
12
    self.writeDataByte(0, 0x08)  #display off
13
    self.writeDataByte(0, 0x06)  #entry mode set inc cursor by 1 not shifting display
14
    self.writeDataByte(0, 0x17)  #character mode and internal power on
15
    self.writeDataByte(0, 0x01)  #clear display
16
    #self.writeDataByte(0, 0x02)  #return home
17
    self.returnHome()
18
    self.writeDataByte(0, 0x0c)  #display on

von Axel R. (axlr)


Lesenswert?

Wie kommst du denn, deiner Meinung nach, in Zeile2?
Wie hast du vor, dorthinzugelangen?
Alles andere geht ja wohl
0x28 sendest du? als Kommentar "4-bit-mode"
Hmm
1
Function Set 
2
8 | 4 | 2 | 1 || 8 | 4 | 2 |  1 
3
--+---+---+---++---+---+---+---
4
0 | 0 | 1 | DL|| N | F |FT1|FT0 
5
6
Sets interface data length (DL). Sets number of display lines (N). Sets Character
7
Font (F). Sets Font Table (FT).
Hier wird ja wohl der 2zeilen Mode mitaktiviert.
Sieh Dir stattdessen mal das memory-Mapping an, WO die zweite Zeile 
losgeht.
Deine Initialisierung stimmt soweit

von Jörn P. (jonnyp)


Lesenswert?

Hallo Klatschnass,
vielen Dank für die Info.
Du verwendest die gleiche Initialisierung wie im Datenblatt.
Da es bei dir funzt, aber bei mir nicht, gehe ich von einem defekten 
Display aus.
Ich werde mir ein neues Display bestellen. Dann sehen wir weiter.
Vielen Dank ;-)

von Axel R. (axlr)


Lesenswert?

Sichwort ist Display Cursor Location

Hier für ein 8x2 Zeichen OLED. Auszug aus:

https://os.mbed.com/users/swe_skytem/code/Oled_Driver/docs/tip/Display_8h_source.html
1
//V1.1 Changes:
2
//Added 2ms delay for clear display function
3
//Added Return home in clear display function
4
 
5
 
6
//INFO
7
 
8
//Made for MBED LPC1768
9
//Made for EA W082-XLG In SPI mode (8x2 Oled display)
10
//Also works with other Oled displays
11
 
12
//Default Ports: (For LPC1768)
13
//p5 = mosi
14
//p6 = miso
15
//p7 = sck
16
//p8 = cs
17
 
18
//  8x2 display cursor location
19
// |---------------------------------------|
20
// |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |
21
// |---------------------------------------|
22
// | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 |
23
// |---------------------------------------|
24
 
25
//IF Degree Symbol is desired, write DEG instead of the symbol, it will display the ° symbol. Example: DispCharacter(DEG); //Writes ° to display

Wann zeigst Du uns deinen Testcode, wo du konkret an die zweite Zeile 
nicht drannkommst?!?

von Hugo H. (hugo_hu)


Lesenswert?

Axel R. schrieb:
> Wann zeigst Du uns deinen Testcode, wo du konkret an die zweite Zeile
> nicht drannkommst?!?

Never ever - viel zu geheim :-)

von Axel R. (axlr)


Lesenswert?

Also nochmal:
der verwendete Controller bei den Dingern verhält sich zwar wie ein 
44780, ist aber keiner.
er kann/könnte 64 Zeichen Pro Zeile. Stellt aber nur 8 dar. Soweit 
richtig. Das hängt einfach damit zusammen, dass die 2 x 16 aus 2 x 2 x 8 
"zusammengesetzt" sind.
Das Speichermapping ist nicht linear.
Das neunte Zeichen erreichst du mit Adresse 0x20, das erste Zeichen in 
der zweiten zeile mit 0x40 und das wiederum 9te Zeichen in der zweiten 
Zeile dann wohl wieder mit 0x60.
Hättest Du etwas mehr Code gepostet, hätte man Dir ne Schleife 
'entworfen', die alle RAM-Adressen anspricht. Dann hättest Du das selbst 
überprüfen können.
Beiträge allerdings komplett ignorieren kommt hingegen nich so gut.
Aber: Eagle - mach ich auch manchmal.
man kann solch ein Display auch gut als zusätzlichen Speicher 
missbrauchen, weil eben nicht alle Zeichen angezeigt werden. Dazu müsste 
man's natürlich auch abfragen, sonst ja doof --> siehe Write-Only-Memory 
(WOM)
Der CCC hatte mal iwie Leih-Fahrräder der Bahn gehäggt und 
Display-Speicher als zusätzlichen RAM verwendet.
(25€ son Display - okay ...)

ich häng# Dir mal noch den Display-Controller mit an. Vllt kannst Du 
damit was anfangen. Dann bin ich hier raus.
Muss mich um mein Bierbrauprojekt kümmern, sonst schläft das ein.
https://www.buydisplay.com/download/ic/SPLC780.pdf

von Jörn P. (jonnyp)


Lesenswert?

Hallo axlr,
danke mal für deinen Beitrag und damit die Hinweise auf die Display 
Adressen. Und den Link für den Controller. Danach hatte ich schon 
gegoogelt,  aber nix gefunden. (Hab vergessen das im posting zu 
erwähnen)

Axel R. schrieb:
> Beiträge allerdings komplett ignorieren kommt hingegen nich so gut.

Das tue ich absolut nicht. Ich bin "von Haus aus" nicht jeden Tag im 
Forum.
Es gibt ja auch noch Anderes zu tun, z.B. Bier brauen ;-)
Ich sagte ja, das ich das Display für defekt halte un imo macht es wenig 
Sinn dann darin Zeit zu verplempern.
Nächste Woche soll ein neues Display kommen, dann kann man mal sehen, 
was Sache ist.

von Spess53 (Gast)


Lesenswert?

Hi

>danke mal für deinen Beitrag und damit die Hinweise auf die Display
>Adressen. Und den Link für den Controller. Danach hatte ich schon
>gegoogelt,  aber nix gefunden. (Hab vergessen das im posting zu
>erwähnen).

Soweit mir bekannt ist befindet sich auf den EA-Modulen ein RS0012 von 
Raystar. Aus dem Datenblatt des RS0012 stammen auch einige Darstellungen 
in

http://www.lcd-module.de/fileadmin/downloads/development%20service/OLED_Char/OLED%20application%20note.pdf

MfG Spess

von c-hater (Gast)


Lesenswert?

Jörn P. schrieb:

> Ich sagte ja, das ich das Display für defekt halte

Ist es mit an Sicherheit grenzender Wahrscheinlichkeit aber nicht. 
Defekt bist nur du.

Es fehlt halt jegliche einschlägige Kompetenz und jeglicher Wille, daran 
etwas zu ändern.

> Es gibt ja auch noch Anderes zu tun, z.B. Bier brauen ;-)

Naja, das ist auch nicht so ganz einfach. Hauptsache, du kannst das 
besser als Programmieren...

von Klugscheißer (Gast)


Lesenswert?

Schau mal hier:
https://www.buydisplay.com/i2c-16x2-oled-serial-character-display-module-screen-yellow-on-black
müsste identisch sein-Chipsatz ist US2066.
Auf der Seite gibt es auch Beispielcode - somit kannst du Dein angeblich 
defektes Display testen.
Ich habe unter Arduino mit der passenden Lib meins zum "laufen" 
bekommen.

von Spess53 (Gast)


Angehängte Dateien:

Lesenswert?

Hi

>Schau mal hier:
>https://www.buydisplay.com/i2c-16x2-oled-serial-character-display-module-screen-yellow-on-black
>müsste identisch sein-Chipsatz ist US2066.

Der Controller hat aber nur 3 Zeichensätze. Die EA-Module aber 4, genau 
wie der RS0012.

MfG Spess

von Klugscheißer (Gast)


Lesenswert?

Danke für den Hinweis !
Ich habe noch etwas gesucht-es gibt auch den RS0010 (mit vier 
Zeichensätze):
https://www.tme.eu/Document/746174d0ddac05c785c5271afce6c05c/RS0010.pdf
U.u. ist der auch zu den RS0012 (teilweise) kompatibel.
Für einen Test gibt es bei: https://github.com/iwi1/iwi_SPI_RS0010
einen entsprechenden Beitrag.
Ich weiß, ist für SPI und nicht 4 Bit - aber vieleicht hilft es 
trotzdem.
Wenn das Display mit diesen Versuchsaufbau läuft, kann aus der Lib
auch die Initialisierung entnommen werden.
Schau auch mal hier:Beitrag "DEP16201-Y auch 4-Bit?"

von Axel R. (axlr)


Lesenswert?

bin ich ja gespannt...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.