Forum: Mikrocontroller und Digitale Elektronik Oled Initialisierungsproblem


von Peter (Gast)


Lesenswert?

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

von Jobst M. (jobstens-de)


Lesenswert?

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

von Peter (Gast)


Lesenswert?

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:
1
lcd_out(data>>4);   // Höheres Nibble senden
2
lcd_out(data);      // Niedriges Nibble senden


Vielen Dank
Peter

von Peter (Gast)


Lesenswert?

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

von Peter (Gast)


Lesenswert?

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

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.