Forum: Mikrocontroller und Digitale Elektronik Probleme mit OLED Display C0240QGLA-T


von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

vielleicht kann mir jemand einen Tip geben was ich falsch mache. Habe 
ein OLED Display von Densitron und zwar das C0240QGLA-T, welches es bei 
Farnell gibt. Habe eine Platine nach der Beschaltung in der Application 
note erstellt, natürlich mit den entsprechenden Korrekturen die ich hier 
im Forum gefunden habe, sowie die Anmerkungen im Datenblatt, falsch 
bezeichnete PINs und der Gleichen!

Soweit so gut Display, erhält alle Spannungen Platine hat keinen Kurzen, 
Alle Signale kommen zumindest am Stecker der Platine an. Das Display 
scheint auch auf Kommandos wie z.B. Display on und off zu reagieren, 
also scheint die Kommunikation auch zu funktionieren. Jedoch erhalte ich 
bei einem eigentlich schwarzen Display ein Display das mit einem extrem 
hellen braun gefüllt ist, alle anderen Farben mit denen ich das Display 
fülle sind von dunklen Streifen durchzogen. Diese Dunklen Streifen sind 
immer an der gleichen stelle, selbst nach ausschalten des Displays und 
neustarten der gesamten Schaltung nach einer gewissen zeit.

Fülle ich das Display nicht mit irgendwelchen inhalten so erhalte ich 
unzählige verscheidenfarbige Streifen die Horizontal das Display 
durchziehen, also kein Farbrauschen im Sinne von Farbrauschen.
Habe auch son ein anderes Display probiert, leider das gleiche 
Ergebniss.

Controller ist ein s6e36d6.

Hier ist mein Initialisierung:
1
 
2
//Clear Reset
3
  AVR32_GPIO.port[1].ovrc = DSP_RESET;
4
  //Wait some Time
5
  WaseTime();
6
  //Set Reset
7
  AVR32_GPIO.port[1].ovrs = DSP_RESET;
8
9
  DSPWriteIndex(0x23);
10
  DSPWriteIndex(0x02);
11
  DSPWriteParameter(0x0000);
12
  DSPWriteIndex(0x03);
13
  DSPWriteParameter(0x6030); //E130
14
  //Standby off
15
  DSPWriteIndex(0x10);
16
  DSPWriteParameter(0x0000);
17
18
19
  DSPWriteIndex(0x18);
20
  DSPWriteParameter(0x0028);// X1.352(Max.) 80Hz
21
22
  DSPWriteIndex( 0x00F8 );                   // Reg. ??
23
  DSPWriteParameter(0x000f );                // Vgh=+6v
24
  DSPWriteIndex( 0x00F9 );                   // Reg. ??
25
  DSPWriteParameter(0x000f );                // Vgl=-6v
26
27
28
29
  //- Gamma Register Setting:
30
    DSPWriteIndex( GOLED_GAMMA_TOP_BOTTO_CONTROL_R );
31
      DSPWriteParameter( 0x2580 );        //
32
      DSPWriteIndex( GOLED_GAMMA_TOP_BOTTO_CONTROL_G );
33
      DSPWriteParameter( 0x2780 );        //
34
      DSPWriteIndex( GOLED_GAMMA_TOP_BOTTO_CONTROL_B );
35
      DSPWriteParameter( 0x3380 );        //
36
      DSPWriteIndex( GOLED_GAMMA_CONTROL_R_1_2 );
37
      DSPWriteParameter( 0x1D18 );        //
38
      DSPWriteIndex( GOLED_GAMMA_CONTROL_R_3_4 );
39
      DSPWriteParameter( 0x1F11 );        //
40
      DSPWriteIndex( GOLED_GAMMA_CONTROL_G_1_2 );
41
      DSPWriteParameter( 0x2419 );        //
42
      DSPWriteIndex( GOLED_GAMMA_CONTROL_G_3_4 );
43
      DSPWriteParameter( 0x1A14 );        //
44
      DSPWriteIndex( GOLED_GAMMA_CONTROL_B_1_2 );
45
      DSPWriteParameter( 0x211A );        //
46
      DSPWriteIndex( GOLED_GAMMA_CONTROL_B_3_4 );
47
      DSPWriteParameter( 0x2013 );
48
49
     // DSPWriteIndex(0x80);
50
     // DSPWriteParameter(0x0003);
51
unsigned int x=0;
52
53
  unsigned int H_Start_add = 0x0;
54
   unsigned int H_End_add = 0xF0+H_Start_add;
55
   unsigned int V_Start_add = 0x00;
56
   unsigned int V_End_add = 0xDF;
57
58
   unsigned int Temp = (H_Start_add << 8) | H_End_add;
59
60
   DSPWriteIndex(0x35);
61
   DSPWriteParameter(V_Start_add);
62
   DSPWriteIndex(0x36);
63
   DSPWriteParameter(V_End_add);
64
   DSPWriteIndex(0x37);
65
   DSPWriteParameter(Temp);
66
   DSPWriteIndex(0x20);
67
   DSPWriteParameter(H_Start_add);
68
   DSPWriteIndex(0x21);
69
   DSPWriteParameter(V_Start_add);
70
71
   DSPWriteIndex(0x22);
72
73
   for(x = 0; x < (220 * 320 ); x++ )
74
   {
75
        DSPWriteParameter(0x0000);       // Clear Display
76
        DSPWriteParameter(0x0000);       // Clear Display
77
   }
78
79
  //Display off
80
   DSPWriteIndex(0x05);
81
   DSPWriteParameter(0x0000);
82
83
   WaseTime2();
84
85
   //Enable DCDC converter
86
   AVR32_GPIO.port[1].ovrs = DSP_DCDC_CONV;
87
   DSPWriteIndex(0x05);
88
   DSPWriteParameter(0x0001);
89
   DSPWriteIndex(0x22);

An den Timings glaube ich liegt es nicht, da das Ergebnis das gleiche 
ist wenn alles extrem langsam abläuft als wenn es schneller betrieben 
wird.

gruß
Stefan

von Dennis (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

also ich vermute Deine Initialisierung funktioniert nicht richtig.
Was passiert denn mit dem OLED wenn Du den Inhalt vorerst mal nicht 
löschst?
Sieht das dann so wie auf dem Bild aus?

Desweitern hat auch das 2.4" OLED doch 240x320 und nicht 220x320, oder?

Wieso machst Du Dir denn so ein Aufwand mit den 2 Übertragungen, nimm 
doch den 5:6:5 - 65K Farben Modus, ist auch schneller und reicht Dir 
sicher auch.

Soweit erstmal.

Dennis

von Stefan (Gast)


Lesenswert?

Hallo Dennis,

Danke für die schnelle Antwort. Stimmt display hat 240x320 hab das 
irgendwie übersehen.

Jedoch sieht mein display ohne Inhalt löschen nicht so aus wie das auf 
deinem Bild. Ich habe Streifen in verschiedenen Farben, kein Rauschen 
wie man es erwarten würde.

Kannst du mal deine Initialisierung posten?
16bit Modus würde auch ausreichen.

Gruß
Stefan

von P. S. (Gast)


Lesenswert?

Hast du alle Spannungen ueberprueft (also auch die, die das Display zur 
Verfuegung stellt)?

von Dennis S. (pantheron)


Lesenswert?

Also das hier ist mein Code, der ist zwar nicht mehr aktuell, hat sich 
am Entry mode was verändert, aber der hat funktioniert.
1
        FIO1CLR = RESET;
2
  wait_ms(40);
3
  FIO1SET = RESET;  
4
5
  
6
     LCD_Index(0x23);
7
8
  LCD_Index(0x02);
9
  LCD_Parameter(0x0000);
10
11
  LCD_Index(0x03);           
12
  LCD_Parameter(0x0030);     
13
14
  LCD_Index(0x10);
15
  LCD_Parameter(0x0000);
16
17
        LCD_Index(0x18);
18
        LCD_Parameter(0x28);       
19
  
20
  LCD_Index(0x05);
21
  LCD_Parameter(0x0001);
22
  
23
  LCD_Index(0x20);
24
  LCD_Parameter(0x00);
25
26
  LCD_Index(0x21);
27
  LCD_Parameter(0x00);
28
    
29
  LCD_Index(0x22);
30
  
31
32
  // GAMMA
33
  LCD_Index(0x70);
34
  LCD_Parameter(0x2B80);       
35
        LCD_Index(0x71);
36
        LCD_Parameter(0x2780);
37
        LCD_Index(0x72);
38
        LCD_Parameter(0x3380);       
39
        LCD_Index(0x73);
40
        LCD_Parameter(0x1D18);        
41
        LCD_Index(0x74);
42
        LCD_Parameter(0x1F11);        
43
        LCD_Index(0x75);
44
        LCD_Parameter(0x2419);        
45
        LCD_Index(0x76);
46
        LCD_Parameter(0x1A14);        
47
        LCD_Index(0x77);
48
        LCD_Parameter(0x211A);       
49
        LCD_Index(0x78);
50
        LCD_Parameter(0x2013);

Also unsere Initialisierungen unterscheiden sich im großen und ganzen 
vom Entry mode und festlegen des Windows.
Lass das mal weg und übernehm den Entry mode dann sollte das gehen.

Hoffe es hilft Dir, ansonsten wäre mal deine Anschlussbelegung 
interessant, vielleicht ist das doch noch etwas.

Gruß Dennis

von Stefan (Gast)


Lesenswert?

Danke für die sequenz werde die nachher mal ausprobieren und auch noch 
mal die vom Display generierten Spannungen prüfen.

von Ralf (Gast)


Lesenswert?

Hi,

ich habe hier das C0283 also den großen Bruder am Laufen mit einem Board 
von Glyn.
Bin gerade dran hier für eine Platine zu entwerfen könntest du als 
inpsiration/hilfe Bilder, Board (Eagle) und Schematic Files posten.
Sieht nämlich nicht schlecht aus was man da so erkennen kann.

von Wolfi (Gast)


Lesenswert?

Grüß euch!

Wo kann man den dieses Display als Otto- normal- Verbraucher kaufen?

LG

von Ralf (Gast)


Lesenswert?

Keine Ahnung ich kann dir nur sagen es gibt es einmal bei Glyn und 
einmal bei Farnell wo es allerdings scheiß teuer ist.
An deiner Stelle würde ich einfach mal eine nette mail an Glyn 
schrieben.

von Wolfi (Gast)


Lesenswert?

Na da bin ich mal neugierig ob die ein offenes Ohr für mich haben :)

LG

von Markus (GLYN) (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

ich vermute, dass du die Initialisierung nicht richtig machst.
Anbei meine Initialisierung:

/**************************************************************
***  Operating Instruction  ***********************************
**************************************************************/

void Index_out(unsigned char wert)
{
DB_OUT;

DB=wert;
RDB=1;
RS=0;
NCS_L;
WRB=0;
WRB=1;
NCS_H;
}

/**************************************************************
***  Display Datenausgabe   ***********************************
**************************************************************/

void Parameter_out(unsigned int wert)
{
DB_OUT;
RDB=1;
DB=wert>>8;
RS=1;
NCS_L;
WRB=0;
WRB=1;
NCS_H;

//Niederwertiges Byte
DB=wert;
NCS_L;
WRB=0;
WRB=1;
NCS_H;
}

/**************************************************************
***  Initialisierung des OLED Displays   **********************
**************************************************************/

void init_S6E63D6_240X320_8Bit_80Mode(void)
{
 unsigned long i;
 Init; //DDR06 = 0xFF;
 WRB=1;
 RDB=1;
 NCS_H;
 NRESET_L;
 for(i=0;i<0x20000;i++)asm("\tNOP");
 NRESET_H;
 for(i=0;i<0x20000;i++)asm("\tNOP");

 Index_out(0x24);
 Index_out(0x02);
 Parameter_out(0x0000);

 Index_out(0x03);
 Parameter_out(0x4120);    // 262k colour mode (3Bytes))  SS=1 0x4031
 Index_out(0x18);
 Parameter_out(0x0028);
 Index_out(0xF8);
 Parameter_out(0x000F);
 Index_out(0xF9);
 Parameter_out(0x000F);
 Index_out(0x10);
 Parameter_out(0x0000);
 Index_out(0x05); // display on
 Parameter_out(0x0001);
 Index_out(0x22);
 }

Des Weiteren ist unbedingt die richtige Einschaltreihenfolge der 
Spannungen zu beachten.

a) switch on VDD & VCI first
b) initialize the driver IC of the OLED
c) switch on the OLED voltages (AR_VDD & AR_VSS)

Spannungswerte beim 2.4" OLED:
2.4" OLEDs need four different voltages:
1. VDD & VCI (typ 3.3V)
- supply voltage for logic block and booster charge pump (VCI)
2. ARVDD (4.6V)
- positive OLED voltage
3. ARVSS (-4.4V)
- negative OLED voltage

Mit den Pins 21 & 22 werden die Ansteuer-Modi hardwaremäßig eingestellt.
Auch dort auf die korrekte Beschaltung achten.
The modes are selected by pin “SPB” (Pin 21) & “ID_MIB” (Pin 22)

Und natürlich die richtige externe Beschaltung vornehmen!!! (siehe 
Anhang)

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.