Forum: Mikrocontroller und Digitale Elektronik Osram OLED Pictiva


von Tino N. (tino)


Lesenswert?

Hallo ,ws gibt zwar schon einen Beitrag über diese Displays aber nicht
explizit für die PIC Controller .

Zunächst einmal heiße ich Tino und bin Elektroniker .
Leider hab ich von Programmierung noch so garkeine Ahnung und suche
Leute die mit helfen da hinein zu kommen .

Ich habe mir oben besagtes Display bei Reichelt gekauft und in Hardware
gegossen :-)
Es ist das 1" Color hab das jetzt zusammen mit nem PIC16F877 auf
meinem Experimentrieboard aufgebaut .
Ich habe hier den CCS Compiler und wollte die GLCD Routine so
umschreiben dass man damit auch das OLED ansteuern kann .
Jetzt weiß ich dank meiner Programmierkenntnisse garnicht wo ich da was
ändern muss .
Habe bisher nur Sachen mit 2 Zeiligen Textdisplays gemacht , da gabs
(fast) immer was fertiges .

Kann mir von euch vielleicht jemand helfen wi eich am besten anfange
oder kann mir vielleicht jemand das so umschreiben dass ich es
verstehe?

Hab das Display im 6800 paralelmodus angeschlossen  . D0-D7 liegen auf
Port D , Enable liegt auf B5 , R/W auf B4 , DC auf B2 , CS auf B0 und
Reset auf C0 .Der Rest ist so wie im Schaltungsbeispiel auf Seite 46
des SSD1332 angeschlossen


Vcc ist an 12V VSS auf GND und VDD an 3,3v , den Pic betreibe ich auch
mit 3,3V .


Hoffe ich habe nicht zu viel Mist geschrieben...



Mfg Tino aus dem wunderschönen Halle an der Saale

von Martin (Gast)


Lesenswert?

Hi,

die GLCD routinen basieren alle auf der Funktion setpixel(x,y,color).

wenn du diese auf dem pic einsetzen willst, musst du den glcd routinen
diese funktion zur verfügung stellen.

im datenblatt des displays sind die timings für die bedienung der von
dir oben aufgezählten leitungen.

jetzt musst du nur( am  einfachsten mit einer wait schleife und den
befhlen zum setzen der portpins) die signale aus dem datenblatt
"nachbauen".

es gibt mehrere konzepte des zugriffes. meisten wird byteweise
geschrieben. du musst also eine lösung finden wie du ein pixel setzt
oder rücksetzt ohne die restlichen 7 eines bytes aus dem display zu
verändern.

als erstes würde ich jedoch versuchen ein geziehltes byte im display zu
beschreiben, mit einem beliebigen wert.... dazu ist schon die
adressierung dieses bytes und der zugriff notwendig...

ist dies geschafft, sollte ein geziehltes byte gelesen werden...read
write timings wie gesagt im datenblatt...

anschließend kannst du dirkonzepte überlegen wie man am besten nur
einen pixel verändert, da sonst eventuell displaybereiche überschrieben
werden, beim schreiben eines neuen wertes...

ich hoffe das hilft ein wenig....

Martin

ps.: ach ja, solltes du die möglichkeit haben assemblertext einzubinden
erleichtert das die sache eventuell....

von Dieter Werner (Gast)


Lesenswert?

Mit dem Controller könnte es noch ein anderes Problem geben:

Die 16F Typen sind erst ab 4V spezifiziert, darunter sollte man
tunlichst 16LF nehmen.
Aber aufpassen wegen der maximal zulässigen Taktfrequenz, die geht auch
oft mit der Spannung runter.

von Franzis (Gast)


Lesenswert?

Hallo, Tino, wie hast du den Display mechanisch an der Platine
befestigt?

von Tino N. (tino)


Angehängte Dateien:

Lesenswert?

Also ich habe einen PIC16F877 genommen der läuft ab 2Volt und ich
betreibe ihn mit 3,3V . Habe ein 4Mhz Quarz für den Takt genommen .

Ich habe mir eine Platine geätzt auf der der 3,3V Wandler das Display
und eben die einzelnen Pins drauf sind .

@Martin

vielen Dank für deine Beschreibung doch leider kann ich damit so
garnichts anfangen .
Wie schon gesagt ich habe mit der ganzen Programmiererei bisher nicht
wirklich viel gearbeitet .
Bisher hat mich immer unser Programmierer unterstützt wenn ich mal was
privates programmiert haben wollt , der ist aber leider nicht mehr da
.
Jetzt steh ich halt auf dem Schlauch was die speziellen Sachen angeht.
Kann zwar die fertigen Module die es ja im CCS gibt in meine Programme
gut einbinden ,steige aber leider bei allem anderen nicht durch .

Mal ne Init zu ändern ist sicher nicht das Problem aber wenns dann
schon wieder mit auslesen geht hörts schon auf .
Vielleicht kann sich das ja einer von euch mal anschauen bei
Gelegenheit .


Danke Tino

von Martin (Gast)


Lesenswert?

hmmm komisch, du schriebst:

-Ich habe hier den CCS Compiler und wollte die GLCD Routine so
-umschreiben dass man damit auch das OLED ansteuern kann .
-Jetzt weiß ich dank meiner Programmierkenntnisse garnicht wo ich da
-was
-ändern muss .

und jetzt das du garnicht programmieren kannst/willst!?, verstehe ich
nicht, dann hätte ich mir das ja auch sparen können.

Martin

von Tino N. (tino)


Lesenswert?

Dann lies dir mal den ersten Satz durch den ich oben geschrieben habe .
Ist ja kein Vorwurf aber habe immer betont dass ich es nicht so kann
dass ich es selber änder könnte . Dann hätte ich ja auch nicht gefragt
.

von Martin (Gast)


Lesenswert?

hmm ok, ruhig bleiben:

es hörte sich so an, als hättest du schonmal programmiert, wenig ahnung
davon, und weißt nicht wo du eingreifen sollst.

Also du hast den compiler, kannst den pic mit einem pc programmieren,
hast die nötige hardware und das display, programmierst in c...

wo liegt denn jetzt dein problem???
das programm in den pic zu bekommen, oder den compiler richtig zu
nutzen, oder kannst du kein c programmieren - c hat ja nichts direkt
mit dem pic zu tun??

verstehst du jetzt das Problem! das wiederspricht sich alles etwas!

Martin

von Tino N. (tino)


Lesenswert?

Das Problem liegt darin dass ich von Programmierung nicht viel verstehe
.
Hab so einige Sachen schon gemacht mit C und Pic Controllern nur immer
sehr leichte Sachen .
Jetzt wollte ich halt mal was schwereres machen ,nur sehe ich dass mir
da einfach die nötigen Kenntnisse fehlen .
Bevor ich die Lust bzw Geduld verlier dachte ich mir kann das mal
jemand erklären bzw umschreiben . Ich würde mir das dann anschauen und
anhand des gehende Codes andere Sachen lernen und ausprobieren .


Mfg Tino

von Sebastian Eckert (Gast)


Lesenswert?

In vielen Fällen ist Umschreiben meiner Erfahrung nach komplizierter als
neu schreiben. Da es insbesondere in C viele Wege gibt, das gleiche
Problem zu lösen, variieren Programme unterschiedlicher Programmierer
im Stil sehr stark, was es nicht unbedingt vereinfacht, fremden Code zu
verstehen, zumindest, wenn man Anfänger ist.

Ich würde empfehlen, lieber die besagte setpixel() Funktion komplett
nachzubilden, d.h. eine eigene Funktion zu schreiben, die die gleichen
Parameter benutzt, anstatt die vorhandene zu ändern. Dazu sind die
Displays doch zu unterschiedlich. Falls es eine Funktion zur
Display-Initislisierung gibt, muß diese natürlich auch ersetzt werden.

Sollte ich mal das Kleingeld übrig haben, mir ein Musterexemplar eines
solchen Displays zu kaufen (reizvoll ist es ja schon, läuft für mich
aber trotzdem nicht unter "wichtige Anschaffungen", sorry) und damit
auch noch etwas sinnvolles programmieren, stelle ich die Routinen gern
zur Verfügung. Aber so wie ich mich kenne, ist da unter 2 Monaten
nichts zu erwarten.

von Tino N. (tino)


Lesenswert?

Also , wenn mir jemand wenigstens sagen könnte in welcher Reihenfolge
ich die Init senden muss würde mir das schon weiter helfen . ich finfe
mich in der Fülle an Informationen im Datenblatt nicht durch .

von Jörg S. (Gast)


Lesenswert?

Da gab es auch Application Notes von Osram sowas drin steht.

von Tino N. (tino)


Lesenswert?

Ja das hab ich gesehen dass es da was gab nur leider immer für ihr
beklopptes Development Kit was 200 Euro kostet und mit ner
Windowssoftware anzusteuern ist .

Ich find mich da nicht raus .
Naja wenn mir da niemand helfen kann werd ich es wohl besser selber
kaputt machen ....


Mfg Tino

von Jörg S. (Gast)


Lesenswert?


von Thorsten (Gast)


Lesenswert?

ohne viel Worte


#define COLADR      0x15   // Spaltenadresse 0-95
#define ROWADR      0x75   // Reihenadresse  0-63
#define COSETA      0x81   // Kontrast für Farbe A Standart 0x80
#define COSETB      0x82   // Kontrast für Farbe B Standart 0x80
#define COSETC      0x83   // Kontrast für Farbe C Standart 0x80
#define MACUCO      0x87   // Master Current Control Standart 0x0F
#define DISSET      0xA0   // Displaysettings für PICTIVIA 0x40 für 65K
Farben
#define DISTLI      0xA1   // Display Start Linie 0-63 Standart 0x00
#define DIOSET      0xA2   // Startreihe zum scannen Standart 0x00
#define DISMOD      0xA4   // Normal Display (0xA7 Inverse Display)
#define MULRAT      0xA8   // Multiplexratio Standart 0x3F
#define MASCON      0xAD   // Mastercontrol für PICTIVIA 0x06
#define DISPON      0xAF   // Display an
#define DISOFF      0xAE   // Display aus
#define POWSAV      0xB0   // Powersave 0x00 = Standart 0x0C =
Powersavemodus
#define PHAADJ      0xB1   // Phase Justierung 0x74
#define CLKDIV      0xB3   // Clockteiler Standart 0xD0
#define GRAYSC      0xB8   // Graustufeneinstellung
#define BINGRA      0xB9   // Interne Graustufentabelle verwenden
#define VPAREF      0xBB   // VPA Referenz 0x80
#define VPBREF      0xBC   // VPB Referenz 0x80
#define VPCREF      0xBD   // VPC Referenz 0x80
#define SETVCO      0xBE   // VCOMH einstellen 0x3F
#define DISNOP      0xE3   // Nop befehl



void init_oled()

{

output_bit(RST,FALSE);
delay_ms(10);
output_bit(RST,TRUE);
delay_ms(1);





send_command(MACUCO) ;
send_command(0x08)   ;

send_command(COSETA) ;
send_command(0x80)   ;

send_command(COSETB) ;
send_command(0x80)   ;

send_command(COSETC) ;
send_command(0x80)   ;

send_command(DISSET) ;
send_command(0x70)   ;

send_command(DISTLI) ;
send_command(0x00)   ;

send_command(DIOSET) ;
send_command(0x00)   ;

send_command(DISMOD) ;

send_command(MULRAT) ;
send_command(0x3F)   ;

send_command(CLKDIV) ;
send_command(0xD0)   ;

send_command(PHAADJ) ;
send_command(0x74)   ;

send_command(MASCON) ;
send_command(0x8E)   ;

send_command(DISNOP) ;

send_command(DISPON) ;


send_command(COLADR) ;
send_command(0x00)   ;
send_command(0x5F)   ;

send_command(ROWADR) ;
send_command(0x00)   ;
send_command(0x3F)   ;


}



void clear_oled(int x1, int y1, int x2, int y2)
{
send_command(CLEARWIN);
send_command(x1)      ;
send_command(y1)      ;
send_command(x2)      ;
send_command(y2)      ;
delay_ms(1);
}



void set_pixel(int x, int y, int16 color)
{
send_command(COLADR)       ;
send_command(x)            ;
send_command(oled_width)   ;
send_command(ROWADR)       ;
send_command(y)            ;
send_command(oled_height)  ;
send_data(color >> 8  )      ;
send_data(color )           ;
}

void main()
{

// PIC EINSTELLUNG



   init_oled();
   send_command(DISNOP);
   clear_oled(0,0,95,63);




while(1)
{
set_pixel(10,10,0xF8C2);
}
}

von Tino N. (tino)


Lesenswert?

Genau das war es was ich gesucht habe .
Viele Dank !


Mfg Tino

von Tino N. (tino)


Lesenswert?

So es läuft ... bin ich froh .

Kann es sein dass die Zeichenfunktion einen Fehler hat ?
Im Datenblatt ist angegeben dass man das Rechteck auch ausfüllen kann .
Leider zeichnet mit das Teil immer nur die Umrandung in der gewünschten
Farbe und nicht die Füllung .

Hat da vielleicht jemand ne Idee ?


Mfg Tino

von Tino N. (tino)


Lesenswert?

OK ich habs muss man mit 0x26 erst enablen....

von Jens (Gast)


Lesenswert?

Hallo,
habe mir auch solch ein einfarbiges 128*64 OLED Teil von Reichelt
kommen lassen und versucht Kabel an die kleinen Zungen anzulöten.
Leider ist es nun Schrott. Woher kann man passende Anschlussleisten
bekommen?
Gruß Jens

von Jörg S. (Gast)


Lesenswert?


von Tartara M. (icaro)


Lesenswert?

Hi guys

I saw the nice sample code of Thorsten, unfortunately I'm working with
other controller (SSD0323, the gray scale version), so that code
doesn't work. I have checked all register in the code of Thorsten and
there are only little differences. I have corrected these differences
and the inizializzation commands, but the OLED remains however out.
Perhaps the problem is the gray scale rather than the color.
Unfortunately I have a very simple manual of my controller and I have
not the manual of SSD1303. (In my manual, for example, there are not
the commands related to the lines or rectangles, or also as to turn on
a single pixel.)

There and someone that has experience with SSD0323 controller? I'm
working with PIC16F4550 and CCS PICC compiler.

Thank to all and I'm sorry if I speak English.
M.

von Rudi (Gast)


Lesenswert?

Hi M.

please send your email-adress and I can send you the manual.

Rudi

von Tartara M. (icaro)


Lesenswert?

Thank you! M. Info@mft.it

von Arjun Chakravarthy (Gast)


Lesenswert?

Dear Sir,

i am working on the SSD0323 based Pictiva OLED, can you please guide me 
through the code. Thank YOu

von Arjun Chakravarthy (Gast)


Lesenswert?

My mail ID is arjun@orizin.net

von sun (Gast)


Lesenswert?

ich habe auch ein Pictiva OLED 128x64 mit SSD0323 Driver IC und möchte 
gern mit ein PIC teueren (analoge Signal graphisch anzeigen). Gibt es 
lib in C dazu?

von andy (Gast)


Lesenswert?

Hallo!

Timo bist du noch aktiv? Ist das Projekt abgeschlossen? kannst du mir 
evtl. Infos zukommmen lassen?

Gruß
evtl. auch die Applikation? (nur mal zum ansehen, habe noch nie was mit 
PICs gemacht) all-finder at gmx dot net, danke

von andy (Gast)


Lesenswert?

Sorry - Tino ;)

von communicator (Gast)


Lesenswert?

Hallo,

letzte Woche hat Osram die Einstellung der Produktion der Pictiva OLED 
Displays mitgeteilt ! Last Time Buy ist der 01.10.07.

Gruß

von Rudi (Gast)


Lesenswert?

...soll aber nicht heißen, dass nicht noch welche zu bekommen sind... 
auch nach dem 01.01.07...

Rudi

von Tino N. (tino)


Lesenswert?

Hallo , ist denn noch jemand an Projekten mit dem OLED dran ? Ich werde 
mich demnächst mal wieder damit beschäftigen .


Mfg Tino

von Jörg S. (Gast)


Lesenswert?

Hab meine Entwicklungen eingestellt, da ja leider die 1" nicht mehr zu 
bekommen sind :(

von Tino N. (tino)


Lesenswert?

Das ist nicht ganz richtig . Es gibt immernoch Restbestände . Z.B. RS 
hat noch welche zu recht günstigen Preisen .
Bei Farnell gibt es welche die auch recht günstig sind und vor allem 
größer als 1" in RGB . Vielleicht bestell ich mir davon mal eins und 
schaue was das taugt .

Lg Tino

von Jörg S. (joerg-s)


Lesenswert?

Bei RS gibt's die ja tatsächlich noch... Hatte in erinnerung das sich da 
auch geschaut hatte als es bei Reichelt vorbei war. Seltsam...

von Tino N. (tino)


Lesenswert?

Es gibt also auch nach Anfrage bei RS noch Restbestände zu bestellen 
.Leider nicht in der Auswahl wie es sie bei Reicht mal gab .
Ich werd dann doch gleich mal 2-3 Stück bestellen .
Hab mir parallel auch bei Farnell mal ein OLED einer anderen Firma 
bestellt . Bin mal gespannt ob die mur das 128x160 Pixel RGB OLED 
wirklich liefern können.
INteressant sind diese Dinger aber allemal . Zumal der Preis von nur 23 
Euro für ein 1,5" RGB recht gerung ist .
Es gibt von Densitron auch OLED`s bis glaub ich 3,1" in RGB .
Wenn der Preis da ähnlich niedrig liegt werd ich mich auf jeden Fall mal 
damit beschäftigen .
Die 1" die ich hier habe sind recht wenig und man erkennt da ja fast 
nichts drauf .

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.