Forum: Mikrocontroller und Digitale Elektronik Pcitiva Oled 128x64


von Haider K. (raza)


Lesenswert?

Hallo,

hat jemand mit der Pictiva Oled von Osram 128x64 2,7 inch Pnr. 
OS128064PK27MxxA00 gearbeitet bzw. aus dem winterschlaf wecken können. 
Mir gelingt das nämlich nicht, ich versuche die Initialisierung Sequenz 
aus dem von Osram zur Verfügung gestellte Dok. "Calgary 4 Bits OLED 
Module Application Instruction,: AN018" aber anscheint muss ich ein paar 
Werte umändern, aber welche???
Ich weiss es gibt reichlich Beiträge über Pictiva und sogar eine Routine 
von Thorsten, aber es war für SPI und ich mache es mit Parallel 
Interface und das war auch für eine andere Model.
Naja wenn jemand (Thorsten, Let, Tino......) helfen könnte waäre super.
Dank in vorraus
Raza

von Jörg S. (joerg-s)


Lesenswert?

Erst mal einfach nur das "Display On" Kommando senden. Wenn er das 
akzeptiert, solltest du schon etliche Pixel leuchten sehen. Evt. auch 
mal versuchen das Status Register zu lesen. Dann siehst du ob dir das 
Display überhaupt antwortet.

von Otto (Gast)


Lesenswert?

www.icplan.de (piciva)

Da ist sowohl der Anschluss beschrieben als auche in Programmbeispiel...

Gruss Otto

von let (Gast)


Lesenswert?

Etwas länglich aber irgendwo gibt es da Anschlußbelegung + Code:
Beitrag "[Q]Erfahrungen mit (Reichelt) Pictiva OLED Displays"

von Otto (Gast)


Lesenswert?

Hallo Haider,

hast Du auch "BS1" und "BS2" auf high gesetzt ?

Andernfalls hast Du seriell (SPI) angewählt.

Das Programmbeispiel von "ICPLAN" ist auch für Dich verwendbar, wenn Du 
anstelle "sende_SPI" einfach an den Port ausgibst - zusätzlich muss "CS" 
und "WR" auf Low gezogen werden und "RD" High sein....

Gruss Otto

von Otto (Gast)


Lesenswert?

Hallo Haider,

die Wahl des 80 / 68 - Interface ist nur dann wichtig, wenn Du das OLED 
als externen Speicher anschliessen möchtest.

Wenn Du alles über Ports realisierst, ist es Wurst.

Ich hatte "8080" gewählt, daher meine Angabe.

In welcher Sprache schreibst Du (ich nehme an C)?

Und denke daran: das Display hat 3,3V !

Gruss Otto

von let (Gast)


Lesenswert?

Ich bin mir sicher das es ein Beispiel für die parallele Ansteuerung
im erwähnten Beitrag gibt. Es ist nämlich von mir.

von Jörg S. (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal mein Code für das 96x36 1Bit Display mit parallel Ansteuerung 
für MSP430F169.

von Jörg S. (Gast)


Angehängte Dateien:

Lesenswert?

h-Datei

von Jörg S. (Gast)


Angehängte Dateien:

Lesenswert?

MSP Hardware

von raza (Gast)


Lesenswert?

@ Jörg-s

Danke

von Otto (Gast)


Lesenswert?

Hallo Haider,

Du musst das Display initialisieren (siehe www.icplan.de) und 
einschalten, sonst tut sich da nichts !!!!

Gruss Otto

von Otto (Gast)


Lesenswert?

hast Du auch die 12V angeschlossen ?

von Otto (Gast)


Lesenswert?

Hallo Haider,

die obere Grenze ist 15V - also OK. Wie hast Du das Display aktuell 
angschlossen und welche Betriebsart verwendest Du mittlerweile ?

Beim "8080" Modus sind die Signale wie folgt zu beschalten:

Reset für 200 ms low, dann high
RD = 1
CS = 0

Daten schreiben:

DC = 0
WR = 0

Zeichen schreiben:

DC = 1
WR = 0

Die Display-Spannung sollte erst nach erfolgter Initialisierung 
zugeschaltet und auch vor dem Abschalten der Logik-Versorgung 
ausgeschaltet werden.

Du solltest das Programmbeispiel von "icplan" 1:1 übernehmen und nur 
"sende_spi" durch eine direkte Portausgabe ersetzen - dann sollte es 
laufen (wenn Dein Display noch ok ist).

Anschliessend kannst Du die Ansteuerung umstellen, wie Du möchtest.

Gruss Otto

von let (Gast)


Lesenswert?

Was mir am Code auf dem ersten Blick auffällt ist die WriteCommand()
Funktion. Da wird erst E getoggelt und dann die Daten geschrieben.
Es müssen zuerst die Daten anliegen und mit einem Wackler an E
werden die dann vom Display übernommen.

Die Init-Sequenz sieht bei mir auch ganz anders aus.

von Otto (Gast)


Lesenswert?

Hallo Haider,

nein, Du kannst die Portpins nicht einfach "offen" lassen, sondern musst 
diese aud definierte Pegel legen:

D0-D7-------Port4

CS----------Port 6.2 kann fest auf Masse
E(RD#)------Port 6.4 kann fest auf 3,3V
R/W(WR#)----Port 6.5 auf "Low", nachdem Daten anliegen
D/C---------Port 5.4 umschalten Kommando/Daten
Res#--------Port 5.5 nach Einschalten low, dann 3,3V
BS2---------Port 5.6 3,3V 8080
BS1---------Port 5.7 3,3V 8080

Mit "1:1" meinte ich natürlich nur die Ansteuerung und nicht die 
"includes".

Dus solltest die Auswahl des Interface fest beschalten und nicht über 
Portpins.

Gruss Otto

von Jörg S. (Gast)


Lesenswert?

> P5SEL = 0xF0;   // Port 5

> P5OUT = 0x40; // BS1 = 0, BS2 = 1

Wenn du P5 als I/O nutzen willst, muss da natürlich P5SEL = 0x00; 
stehen.

von let (Gast)


Lesenswert?

Wenn du den Motorola Mode benutzt ist dein WriteCommand() immer noch
kaputt. Die Daten werden bei steigender Flanke an E übernommen. Zu
diesem Zeitpunkt müssen die Daten stabil anliegen und dürfen nicht
geändert werden solange E high ist. Die CS Leitung ist so wie ich
das sehe ständig low. Damit hatte ich Probleme.

Und hast du mal die Init-Sequenz aus meinem Code probiert? Ich habe es
nicht Byte für Byte verglichen aber er sieht anders aus. Die von
dir erwähnte AppNote sagt mir jetzt nichts, doch wenn es nicht genau
für das 2.7" Display ist muß es nicht unbedingt funktionieren weil
das OLED intern möglicherweise anders verdrahtet ist.

Wie schnell läuft denn der MSP? Hälst du damit das Timing ein? Und was
für eine Anzeige erwartest du?

von Jörg S. (Gast)


Lesenswert?

> muss erstmal auch wissen wie druckt man die Schnelleigkeit einer Mc
> aus??
In MHz. Was hast du denn für einen Quarz an XT2 hängen?

von let (Gast)


Lesenswert?

So, habe mal kurz das Datenblatt überflogen. Das Display verträgt
offenbar max. 3Mhz an seinem Datenbus. Die übrigen Zeiten scheinen
mir zu kurz als das ein MSP da zu schnell wäre.
Das dort angegebene Busprotokoll für den Motorola Modus verwirrt
mich etwas. Ich glaube nicht das ich mal versucht habe mit dem
OLED auf diese Art zu reden.

Ich kenne das so:
1. R/W und D/C je nach Bedarf setzen (naja, R/W gehört hier auf low)
2. Daten auf Port schreiben
3. CS low
4. E high
5. E low
6. CS high

CS kann man auch ganz am Anfang setzen. Das hat aber den Nachteil das
wenn R/W high ist, die Datenleitungen des Displays Ausgänge sind.
Hat man um einen Byte zu schreiben vorher schon am µC umgeschaltet
könnte man sich das Display zerschießen.

Bei vielen Displays kann man CS auch ständig auf low lassen, was
beim Pictiva bei mir aber nicht richtig funktioniert hat.

Ach ja, das Display-RAM wird nach dem Einschalten wahrscheinlich
irgendeinen Müll enthalten. Von daher sollte nach der Initialisierung
irgendetwas zu sehen sein. Ist es aber gelöscht, siehst du nichts.
Gar nichts. Nicht mal ein Glimmen. Ehrlich ;)

von Jörg S. (Gast)


Lesenswert?

> Bei vielen Displays kann man CS auch ständig auf low lassen, was
> beim Pictiva bei mir aber nicht richtig funktioniert hat.
Bei meinem Pictiva ist CS fest auf low.

von Jörg S. (Gast)


Lesenswert?

Wie gesagt weiss ich nicht wie es beim 128x64 ist, bei meinen 96x36 
reicht es aus das Display-On CMD zu senden. Dann sollten schon zufällige 
Pixel angesteuert werden.
Hast du mal versucht das Status Byte zu lesen?

von raza (Gast)


Lesenswert?

Hallo,
ja habe ich versucht status Byte zu lesen aber jedes mal hat er 
irgendine andere Wert geliefert.
Wie ich den empfangene Byte richtig interpretiere habe ich nicht zu ganz 
koppiert. z.B. wenn ich 0xA0 empfange was heißt das.
Muss ich nur der linke Nibble lesen (A), und jeder Bit hat da zwei 
Bedeutung (jenachdem ob 0 oder 1) sehe ich das so richtig?
Gruß
raza

von raza (Gast)


Lesenswert?

Hallo,

So die Platine ist repariert und ich konnte ohne Probleme Display 
einschalten. Jetzt versuche ich Character anzuzeigen und dazu habe ich 
folgende Fragen.
Braucht man unbedingt ein Fontgenerator oder Font um diverse charachter 
anzuzeigen wenn ja dann welche kämmen in Frag für MSP430 und was muss 
ich bei der Auswahl einer Font beachten.
Kann ich für Oled 128x64 2,7 Inch  bit-mapped Fonts (5x7 matrix) 
benutzen?
Hab auch versucht in eure Programme verwendete Fonts zu benutzen aber 
halt ohne Erfolg, sehr viele Compiler Fehler.

danke
Gruß

von Otto (Gast)


Lesenswert?

Hallo Haider,

wenn Du Zeichen anzeigen willst, benötigst Du auch einen Zeichensatz.
Nimm den von "ICPLAN" für Deinen Controller - der funktioniert.

Setze Zeile und Startspalte, lade das erste Pixelmuster mit dem Offset 
des ASCII-Zeichens (x6) und beschreibe die Spalten nacheinander mit den 
Pixeln, die für ein bestimmtes Zeichen benötigt werden.

Der Displaycontroller erhöht die Spaltennummer automatisch.

Gruss Otto

von raza (Gast)


Lesenswert?

Hallo,

hab versucht Zeichensatz von Icplan zu benutzen aber leider auch ohne 
Erfolg, Ich früchte ich brauche bisschen Nachhilfe um das richtig 
benutzen zu könen.

erstens kriege ich bei alle Zeichensätze diese folgende Compiler 
Fehlermeldung
Error[Pe065]: expected a ";"
an folgende stelle:
const unsigned char z_code[]PROGMEM = {

und zweitens in Code von ICPlan für normale Zeichenausgabe steht
a = pgm_read_byte(&z_code[stelle]);
Der MSP430 kennt diese pgm_Read_Byte nicht oder? Das ist doch um Flash 
zu lesen oder?

Außerdem hast du geschrieben:
"Setze Zeile und Startspalte, lade das erste Pixelmuster mit dem Offset
des ASCII-Zeichens (x6) und beschreibe die Spalten nacheinander mit den
Pixeln, die für ein bestimmtes Zeichen benötigt werden."

hab leider das auch nicht so ganz koppiert was du hier gemeint hast. 
Könntest du bitte das nochmal erklären.

Danke
Gruß
Raza

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.