Forum: Mikrocontroller und Digitale Elektronik NHD-0420CW-AY3 4x20 Zeilen OLED in Betrieb nehmen


von Holger D. (hodoe)


Angehängte Dateien:

Lesenswert?

Hallo, ich habe nun schon viele LCD/OLED zum laufen gebracht. Aber 
dieses Mal will es nicht so. Ich habe ein NHD-0420CW-AY3 4x20 Zeilen 
OLED, als Ersatz für ein EA W204-XLG.

Es soll mit vier Bit parallel betrieben werden. So wie ich das 
Datenblatt interpretiere, ist das dann 4-Bit-6800, wenn E zur Übernahme 
der Daten/Commandos benutzt werden soll.

Demnach sind dann die Pins 1-2, 4-6 und 11-14 wie sonst auch beschaltet. 
Pin 5 lege ich immer nach Masse, da ich nie lese.

Nun gibt es einige Pins mehr als üblich. Für 5 V Betrieb muss ich wohl 
an Pin 3 5 V anlegen und dann auch Pin 17 und Pin 19.

Schaue ich mir das Timing an, dann ist das Timing von EA W204-XLG 
identisch mit dem vom NHD-0420CW-AY3 Condition 2. Seltsamerweise hat EA 
dort /CS eingezeichnet, welches bei 4 Bit not connected ist .... Ich 
habe den Pin 15 bisher immer offen gelassen.

Wenn ich mir die Beispiellistings ansehe, dann kann ich

Pin 15 /CS dauerhaft auf Masse und
Pin 16 /RES dauerhaft an +5 V legen.

Das war es wohl. Allerdings macht das Teil mit dem selben Code, der beim 
EAW204-XLG ohne Probleme läuft, nicht einen Mucks.

Es gibt da ein Code void init()-Beispiel. Dort wird 4-Bit eingeschaltet 
und auch der Regulator für 5 V. Was ist denn nun richtig? Per Software 
oder die Pins wie oben beschalten?

Gruß
Holger

von Holger D. (hodoe)


Lesenswert?

Hallo, ich habe inzwischen eine Lösung gefunden. Vieleicht kann jemand 
die Infos gebrauchen. Es sind auf jeden Fall sehr kontrastreiche und von 
der Darstellung sehr schöne OLEDs. Und vor allem sind die PCBs deutlich 
kleiner als Konkurrenzprodukte.

1. /CE und /RES können fest verdrahtet werden. Reset sollte man aber 
besser programmgesteuert schalten, da sonst das Display bei einem Reset 
des ATMEGA wilde Zeichen anzeigt. Eher ein optisches Problem.

2. Im vier-Bit-Modus sollte die nicht benötigten Datenbits auf GND 
gelegt werden.

3. Ich kann die 5 V wie folgt anlegen. Es macht keinen Unterschied.
- 5 V an VDD und REGVDD
- 5 V nur an VDD
- 5 V nur an REGVDD

4. Timing. Pausen von 10 ms bei der Initialisierung und 10 µS für Enable 
reichen. Noch weniger habe ich nicht ausprobiert. Breadboard, ATMEGA644, 
16 MHz.

5. Ja, man muss die gesamte abgedruckte Initialisierungsroutine 
durchlaufen. Grmmmpf.

6. Zur Initialisierung:
1
  void init(){
2
3
     RES = 1;//reset HIGH - inactive
4
     delayms(1);//delay
5
     command(0x2A);//function set (extended command set)
6
     command(0x71);//function selection A
7
     data(0x00);//disable internal VDD regulator (2.8V I/O). data(0x5C) = enable regulator (5V I/O)

Ob ich hier data(0x00) oder data(0x5C) sende, macht auch mit den oben 
genannten Kombinationen keinen Unterschied.


Schönes Eiersuchen.

Holger

: Bearbeitet durch User
von Holger D. (hodoe)


Lesenswert?

Moin, zum Abschluss habe ich noch I2C bzw. TWI in Assembler realisiert. 
Hier zeigt sich, dass dann auch Reset pauschal auf 5 V gelegt werden 
kann. Die optischen Störungen sind verschwunden. Also reichen vier 
Adern.

Eine Frage bleibt noch: Was haben die Leute beim Erstellen der 
Datenblätter geraucht?

Gruß
Holger

von Andreas S. (Gast)


Lesenswert?

Hier im Forum:
https://forum.arduino.cc/index.php?topic=714727.15
ist eine Lib veröffendlicht (Arduino und I2C).
Ich habe die mal vor längerer Zeit probiert - scheint aber
noch "buggy" zu sein. Sprodisch wird nach dem Einschalten des
Display nur wirres Zeug angezeigt.
Ich denke es liegt an der init Sequenz.
Oder ist besser über die SW ein Reset durch zu führen ?
Im Datenblatt habe ich dazu aber nichts finden können.
Hast Du die init Sequenz unverändert aus den Datenblatt übernommen oder
noch weiter angepasst ?
Ich habe schon einiges selbst versucht - auch die init Sequenz
aus den Datenblatt, leider ist die korrekte Anzeige nach wie vor ein 
Glücksspiel.
Du programmierts ja in Assembler - also irgend etwas in C zu
"Vergleichszwecke" hast Du nicht da ?

Gruß Andreas

von Holger D. (hodoe)


Lesenswert?

Moin Andreas, ich programmiere seit Z80 alles in Assembler.

Ich sende direkt diese drei Sequenzen.
1
1.
2
Befehle: 0x2A, 0x71
3
Daten: 0x5C
1
2.
2
Befehle: 0x28, 0x08, 0x2A, 0x79, 0xD5, 0x70, 0x78, 0x09, 0x06, 0x72
3
Daten: 0x00
1
3.
2
Befehle: 0x2A, 0x79, 0xDA, 0x10, 0xDC, 0x00, 0x81, 0x7F, 0xD9, 0xF1, 0xDB, 0x40, 0x78, 0x28, 0x01, 0x80, 0x0C
Pin 3 ist nicht verbunden. An +5V hängen Pin 2, 16, 18. I2C an die Pins 
7, 8+9, jeweils 4,7K Widerstände gegen +5V. Rest an Masse.

Wenn ich Zeit habe, werde ich mal gucken, was aus den Sequenzen raus 
kann. Allerdings wird das Display derart schnell befüllt, dass ich mit 
der Slow-Motion-Videoaufzeichnung meines Blödmann-Telefons nichts sehen 
kann.


Gruß
Holger

von Andreas S. (Gast)


Lesenswert?

Danke für die Antwort.
Ich habe noch eine weitere Library für den Arduino und für dieses
Display gefunden :
https://github.com/dcityorg/i2c-char-display-library-arduino
Die Library untertsützt das OLED Display und auch "normale" LCD.
Damit läuft das Display unter Arduino - vieleicht hilft es den einen
oder anderen bei seinen Projekte.
Bei mir war die Verdrahtung nicht so wie bei Dir - danke für die
Untertützung.
Und mit der o.g. Libs läuft es jetzt auch so wie es sein soll.
Also noch einmal herzlichen Dank !

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.