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
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.