Hallo,
ich verwende mehrere Oleds 2x16 Zeichen von Wisechip und habe bei
einigen ein Problem mit der Initialisierung.
So sieht die Init aus:
1
delay_ms(200msec);// 200msec Wartezeit
2
lcd_out(0x03);// 4 bit Modus init
3
delay_ms(10);// 10msec Wartezeit
4
lcd_out(0x03);// 4 bit Modus init
5
delay_ms(10);// 10msec Wartezeit
6
lcd_out(0x03);// 4 bit Modus init
7
delay_ms(10);// 10msec Wartezeit
8
9
lcd_out(0x02);// 4 bit Modus init
10
delay_ms(100);// 10msec Wartezeit
11
12
lcd_command(0x08);
13
lcd_command(0x01);
14
lcd_command(0x06);// Entry Mode Set RE = 0
15
lcd_command(0x2A);// Function Set RE wird 1
16
lcd_command(0x08);// Extended Function Set, RE = 1
17
lcd_command(0x2A);// Function Set RE wird 1
18
lcd_command(0x79);// OLED Characterization, SD wird 1
19
lcd_command(0xDA);// Set SEG Pins Hardware Configuration
20
lcd_command(0x10);// Set SEG Pins Hardware Configuration
21
lcd_command(0x78);// OLED Characterization, SD wird 0
22
lcd_command(0x28);// Function Set RE wird 0
23
lcd_command(0x02);// Return Home
24
25
lcd_command(0x0C);// Display ON
Wie ihr seht, sende ich zu Beginn dreimal 0x03 (nur ein Nibble), einige
Oleds funktionieren damit perfekt, bei anderen "darf" ich nur zweimal
0x03 (Nibble) senden damit sie funktionieren.
Die Oleds sind alle vom gleichen Typ und laut Hersteller von der
gleichen Charge.
Die Delays habe ich testweise schon jeweils auf das zehnfache gesetzt,
hat keine Veränderung gebracht.
Ich teste alle Oleds (10 Stück) mit einer Hardware (Oled ist steckbar,
keine Kabel, direkt auf der Platine mit Stiftleiste verbunden), ein
Hardwarefehler der Platine kann also ausgeschlossen werden (denke ich).
Hat jemand eine Idee was da falsch läuft?
Vielen Dank
Peter
Peter schrieb:> Wie ihr seht, sende ich zu Beginn dreimal 0x03 (nur ein Nibble), einige> Oleds funktionieren damit perfekt, bei anderen "darf" ich nur zweimal> 0x03 (Nibble) senden damit sie funktionieren.
Nein. Es hängt einfach von dem Zustand ab, in dem sich das Display
befindet.
> Die Delays habe ich testweise schon jeweils auf das zehnfache gesetzt,> hat keine Veränderung gebracht.
Bei den Befehlen hast Du ja gar kein Delay ...
Was machst Du da eigentlich? Bit setzen, Bit wieder löschen. Hin, her
...
Gruß
Jobst
Hallo,
laut Beitrag "Sind LCDs taub und müssen alles dreimal gesagt kriegen?"
muss man dreimal 0x03 senden, unabhängig davon in welchem Zustand sich
das LCD befindet. Nur habe ich Oleds, die nur dann korrekt
funktionieren, wenn ich 0x03 nur zweimal sende.
Jobst M. schrieb:> Bei den Befehlen hast Du ja gar kein Delay ...>> Was machst Du da eigentlich? Bit setzen, Bit wieder löschen. Hin, her>> ...
Sorry, die Funktion lcd_out(data); macht mir die Ausgabe sowie die
Enable Leitung high/low.
Und zwischen diesen Befehlen verwende ich delays, die meinte ich.
lcd_command(data); sieht dann so aus:
Jobst M. schrieb:> Was machst Du da eigentlich? Bit setzen, Bit wieder löschen. Hin, her
Das Oled hat zwei Zusatzregister, auf die man erst Zugriff hat, wenn man
bestimmte Codefolgen sendet, daher RE wird 1, SD wird 1 etc.
Z.B.: auf das SD Register hat man erst Zugriff, wenn RE auf 1 ist und
man noch den Befehl 0x79 sendet.
Diese Register muss man nachher wieder verlassen, daher SD wird 0 und RE
wird 0.
Das soll dich nicht weiter stören.
Vielen Dank
Peter
Hallo,
das dreimalige (bzw. zweimalige) Senden von 0x03 kommt in keinem
Datenblatt vor, dass ich bisher gefunden habe.
Wenn ich die Power Up Sequence mit der Initialisierung aus dem
Datenblatt an das Oled sende, wird der richtige Text angezeigt,
allerdings steht der Text auf dem Kopf und ist um einige Zeichen nach
rechts verschoben.
Gut, wäre ja kein großes Problem, allerdings zeigen andere Oleds nur
irgendwelche Zeichen an, die Init ist also auch nicht korrekt.
Wie kann es sein, dass mehrere Oleds mit der gleichen Hardware und
Software etwas anderes tun?
Hat jemand noch eine Idee?
Vielen Dank
Peter
Eine eigene Frage?
Dieser Thread ist über 14 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.