Forum: Mikrocontroller und Digitale Elektronik Densitron OLED DD-12864YO


von Jan (Gast)


Lesenswert?

Hallo,

ich habe hier ein Densitron OLED (DD-12864YO) und bekomme es nicht 
reproduzierbar initialisiert. Ich gehe genau nach den Anweisungen im 
Datenblatt vor daher denke ich dass das Timing irgendwo nicht wirklich 
passt.

Hat einer von Euch schon mal etwas mit diesem Display gemacht und weiß 
worauf man achten muss?

Sollte man VCC wirklich erst nach dem initialisieren einschalten wie es 
im Datenblatt steht? Ich habe früher mit einem Osram Display gearbeitet, 
da habe ich VCC davor eingeschaltet und hatte keinerlei Probleme.

Vielen Dank schon mal
Jan

von Henry (Gast)


Lesenswert?

S/P ?
DD-12864YO-?
Zeig Initialisierung

Der Einschaltzeitpunkt der OLED Spannung ist eigentlich egal. Man sollte 
nur vorher das Timing initialisieren sonst ist es nicht so perfekt für 
die Lebensdauer.

von Jan (Gast)


Lesenswert?

Ein DD-12864YO-1A parallel angeschlossen.
1
writeCommand(0xAE);            // x        // set off
2
  
3
  waitms(100);
4
5
  writeCommand(0xB3);            //         // clock divider
6
  writeCommand(0x91);            //         // clock divider
7
  
8
  writeCommand(0xA8);            //         // multiplex ratio
9
  writeCommand(0x3F);            //         // multiplex ratio
10
  
11
  writeCommand(0xA2);            //         // set offset
12
  writeCommand(0x44);            //         // set offset
13
  
14
  writeCommand(0xA1);            //         // start line
15
  writeCommand(0x00);            //         // start line
16
  
17
  writeCommand(0xA0);            //         // re-map
18
  writeCommand(0x41);            //         // re-map
19
  
20
  writeCommand(0xAD);            //         // set master config
21
  writeCommand(0x02);            //         // set master config
22
  
23
  writeCommand(0xCF);            //         // set bias current
24
  writeCommand(0xF0);            //         // set bias current
25
  
26
  writeCommand(0x86);            //         // set current range
27
  
28
  writeCommand(0x81);            //         // set contrast
29
  writeCommand(0x7F);            //         // set contrast
30
  
31
  writeCommand(0xB2);           //         // set row period
32
  writeCommand(0x46);           //         // set row period
33
  
34
  writeCommand(0xB1);            //         // set phase length
35
  writeCommand(0x28);            //         // set phase length
36
  
37
  writeCommand(0xBC);            //        // set precharge voltage
38
  writeCommand(0x10);            //        // set precharge voltage
39
40
  writeCommand(0xBE);            //         // set vcomh voltage
41
  writeCommand(0x02);            //       // set vcomh voltage
42
43
  writeCommand(0xBF);            //         // set vsl
44
  writeCommand(0x0D);            //        // set vsl
45
  
46
  writeCommand(0xA4);            //         // set display mode
47
48
  // clear screen  
49
  for (i = 0; i < 80; i++) {      
50
    uint8_t j;
51
    for (j = 0; j < 64; j++) {
52
      writeData(0x00);
53
    }
54
  }
55
56
  vcc_supply(ON);
57
  
58
  waitms(100);
59
60
  writeCommand(0xAF);                      // display on

von Henry (Gast)


Lesenswert?

Irgendwie ist deine Initialisierung des SSD1325T6 ganz anders als beim 
SSD1305 oder SH1101A. Den SSD1325T6 kenne ich aber nicht.

Schon der erste Befehl:

  writeCommand(0xB3);            //         // clock divider
  writeCommand(0x91);            //         // clock divider

ist beim SSD1305 und SH1101A “Set GDDRAM Page Start Address”.

Da kann ich nicht helfen, wundere mich aber, dass der Chiphersteller so 
die Kommandos geändert hat.

Beim SH1101A Controller mache ich das so:
1
  // Display ON/OFF
2
  OledCommand(0xAE, -1);      // (13) 0xAF: ON; 0xAE: OFF (Display off)
3
4
  // Segment Re-map
5
  OledCommand(0xA1, -1);      // (08) 0xA0: column address 0 is map to SEG0; 0xA1: column address 131 map to SEG0
6
7
  // Common Pads Hardware Configuration
8
  OledCommand(0xDA, 0x12);    // (19) common pads hardware: alternative
9
10
  // Common Output Scan Direction
11
  OledCommand(0xC8, -1);      // (15) 0xC0: COM0 to COMn; 0xC8: COMn to COM0
12
13
  // Multiplex Ratio
14
  OledCommand(0xA8, 0x3F);    // (11) multiplex ration: 64
15
16
  // Display Clock Divide
17
  OledCommand(0xD5, 0x50);    // (17) Osc. Freq.: 5; Display divide ration: 0 (ratio 1)
18
19
  // VCOMH
20
  OledCommand(0xDB, 0x40);    // (20) VCOM deselect level: 40H
21
22
  // VP
23
  OledCommand(0xD9, 0x1F);    // (18) discharge period: 1; precharge period: 15
24
25
  // Display Offset
26
  OledCommand(0xD3, 0x00);    // (16) Display offset: 0
27
28
  // Display Start Line
29
  OledCommand(0x40, -1);      // (06) Display start line: 0
30
31
  // Entire Display ON/OFF
32
  OledCommand(0xA4, -1);      // (09) 0xA4: normal diplay; 0xA5: entire display
33
34
  // Normal or Inverse Display
35
  OledCommand(0xA6, -1);      // (10) 0xA6: normal diplay; 0xA7: reverse display
36
37
  // Contrast Control Register
38
  OledCommand(0x81, ucContrast);  // (07) contrast control: 0 .. 255
39
40
  // Set DC-DC
41
  OledCommand(0xAD, 0x8A);    // (12) 0x8B: ON; 0x8A: OFF (external Vpp must be used)
42
43
  // clear OLED RAM
44
  OledUpdate(bDisplayEntire, bDisplayRotated, ucDisplayContrast);
45
46
  // Display ON/OFF
47
  OledCommand(0xAF, -1);      // (13) 0xAF: ON; 0xAE: OFF (Display on)

von Augenzeuge (Gast)


Lesenswert?

Hast du deine Clear Routine noch zur Hand? Wäre jetzt auf die schnelle 
praktischer zum testen...

von Henry (Gast)


Lesenswert?

Ich gehe über SPI und zumindest da muss man vor jeder der 8 Pages erst 
ein Kommando mit der Pagenummer schicken.

1
  OledCommand(0xA4, -1);    // (09) 0xA4: normal diplay; 0xA5: entire display
2
3
  // Segment Re-map
4
  OledCommand(0xA1, -1);    // (08) 0xA0: column address 0 is map to SEG0; 0xA1: column address 131 map to SEG0
5
6
  // Common Output Scan Direction
7
  OledCommand(0xC8, -1);    // (15) 0xC0: COM0 to COMn; 0xC8: COMn to COM0
8
9
  OledCommand(0x81, 127);  // (07) contrast control: 0 .. 255
10
11
12
  ESPITDCR |= ESPITDCR_SSV;          // activate Slave Select (SS)
13
14
  for (ucPage = 0; ucPage < DISP_ROW / 8; ucPage++)
15
  {
16
    PSet(OLED_DATA_COMM, FALSE);      // Command Mode
17
18
    ESPIDATA = 0xB0 + ucPage;        // (14) Page Address
19
20
    while (!(ESPISTAT & ESPISTAT_TDRE)) ;  // wait for: Transmit data register empty
21
    ESPIDATA = 0x00 + DISP_COL_FIRST;    // (01) Collumn Address (4 low bits)
22
23
    while (!(ESPISTAT & ESPISTAT_TDRE)) ;  // wait for: Transmit data register empty
24
    ESPIDATA = 0x10;            // (02) Collumn Address (4 high bits)
25
26
    while (ESPISTAT & ESPISTAT_TFST) ;    // wait for: No data transfer is currently in progress
27
    PSet(OLED_DATA_COMM, TRUE);        // Data Mode
28
29
    for (ucCol = DISP_COL; ucCol--; )
30
    {
31
      while (!(ESPISTAT & ESPISTAT_TDRE)) ;  // wait for: Transmit data register empty
32
      ESPIDATA = 0;
33
    }
34
35
    while (ESPISTAT & ESPISTAT_TFST) ;    // wait for: No data transfer is currently in progress
36
  }
37
38
  ESPITDCR &= ~ESPITDCR_SSV;          // deactivate Slave Select (SS)

von Jan (Gast)


Lesenswert?

Mit deiner Initialisierung bekomme ich immerhin VCOM jedes mal auf ca. 
10V. Von daher sollte das Display ja zumindest noch funtionieren.

Beim 1325 ist 0xB3 definitiv der clock divider. Steht so im Datenblatt 
vom SDD1325 und auch die initialisierung vom DD-12864YO-1A sieht das so 
vor.

Dir auf jeden Fall schon mal vielen Dank!

von Jan S. (jan-s)


Lesenswert?

Hat sonst vielleicht noch jemand Erfahrung mit dem Display? Besonders 
bezüglich der parallelen Ansteuerung da ich genau nach Datenblatt 
vorgehe und trotzdem nichts zu sehen bekomme...

von hallo (Gast)


Lesenswert?

Seid gegrüßt Freunde der Sonne,

kann mir jemand sagen wie ich am besten die OLED-Spannung erzeuge, habe 
ein ähnliches Display:
http://www.conrad.de/ce/de/product/180848/OLED-DISPLAY-VGG12864L-S003-128X64-GRUeN/0212041

Sollte ich einfach einen kleinen Festspannungsregler nehmen, habe 17V 
Gleichspannung zur Verfügung.
Und was hat es mit dem verzögerten Anschalten der OLED-Spannung auf 
sich?

>Sollte man VCC wirklich erst nach dem initialisieren einschalten wie es
>im Datenblatt steht?

von hallo (Gast)


Lesenswert?

^^

von hallo (Gast)


Lesenswert?

^^ ^^

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.