www.mikrocontroller.net

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


Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Henry (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein DD-12864YO-1A parallel angeschlossen.
writeCommand(0xAE);            // x        // set off
  
  waitms(100);

  writeCommand(0xB3);            //         // clock divider
  writeCommand(0x91);            //         // clock divider
  
  writeCommand(0xA8);            //         // multiplex ratio
  writeCommand(0x3F);            //         // multiplex ratio
  
  writeCommand(0xA2);            //         // set offset
  writeCommand(0x44);            //         // set offset
  
  writeCommand(0xA1);            //         // start line
  writeCommand(0x00);            //         // start line
  
  writeCommand(0xA0);            //         // re-map
  writeCommand(0x41);            //         // re-map
  
  writeCommand(0xAD);            //         // set master config
  writeCommand(0x02);            //         // set master config
  
  writeCommand(0xCF);            //         // set bias current
  writeCommand(0xF0);            //         // set bias current
  
  writeCommand(0x86);            //         // set current range
  
  writeCommand(0x81);            //         // set contrast
  writeCommand(0x7F);            //         // set contrast
  
  writeCommand(0xB2);           //         // set row period
  writeCommand(0x46);           //         // set row period
  
  writeCommand(0xB1);            //         // set phase length
  writeCommand(0x28);            //         // set phase length
  
  writeCommand(0xBC);            //        // set precharge voltage
  writeCommand(0x10);            //        // set precharge voltage

  writeCommand(0xBE);            //         // set vcomh voltage
  writeCommand(0x02);            //       // set vcomh voltage

  writeCommand(0xBF);            //         // set vsl
  writeCommand(0x0D);            //        // set vsl
  
  writeCommand(0xA4);            //         // set display mode

  // clear screen  
  for (i = 0; i < 80; i++) {      
    uint8_t j;
    for (j = 0; j < 64; j++) {
      writeData(0x00);
    }
  }

  vcc_supply(ON);
  
  waitms(100);

  writeCommand(0xAF);                      // display on

Autor: Henry (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
  // Display ON/OFF
  OledCommand(0xAE, -1);      // (13) 0xAF: ON; 0xAE: OFF (Display off)

  // Segment Re-map
  OledCommand(0xA1, -1);      // (08) 0xA0: column address 0 is map to SEG0; 0xA1: column address 131 map to SEG0

  // Common Pads Hardware Configuration
  OledCommand(0xDA, 0x12);    // (19) common pads hardware: alternative

  // Common Output Scan Direction
  OledCommand(0xC8, -1);      // (15) 0xC0: COM0 to COMn; 0xC8: COMn to COM0

  // Multiplex Ratio
  OledCommand(0xA8, 0x3F);    // (11) multiplex ration: 64

  // Display Clock Divide
  OledCommand(0xD5, 0x50);    // (17) Osc. Freq.: 5; Display divide ration: 0 (ratio 1)

  // VCOMH
  OledCommand(0xDB, 0x40);    // (20) VCOM deselect level: 40H

  // VP
  OledCommand(0xD9, 0x1F);    // (18) discharge period: 1; precharge period: 15

  // Display Offset
  OledCommand(0xD3, 0x00);    // (16) Display offset: 0

  // Display Start Line
  OledCommand(0x40, -1);      // (06) Display start line: 0

  // Entire Display ON/OFF
  OledCommand(0xA4, -1);      // (09) 0xA4: normal diplay; 0xA5: entire display

  // Normal or Inverse Display
  OledCommand(0xA6, -1);      // (10) 0xA6: normal diplay; 0xA7: reverse display

  // Contrast Control Register
  OledCommand(0x81, ucContrast);  // (07) contrast control: 0 .. 255

  // Set DC-DC
  OledCommand(0xAD, 0x8A);    // (12) 0x8B: ON; 0x8A: OFF (external Vpp must be used)

  // clear OLED RAM
  OledUpdate(bDisplayEntire, bDisplayRotated, ucDisplayContrast);

  // Display ON/OFF
  OledCommand(0xAF, -1);      // (13) 0xAF: ON; 0xAE: OFF (Display on)


Autor: Augenzeuge (Gast)
Datum:

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

Autor: Henry (Gast)
Datum:

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

  OledCommand(0xA4, -1);    // (09) 0xA4: normal diplay; 0xA5: entire display

  // Segment Re-map
  OledCommand(0xA1, -1);    // (08) 0xA0: column address 0 is map to SEG0; 0xA1: column address 131 map to SEG0

  // Common Output Scan Direction
  OledCommand(0xC8, -1);    // (15) 0xC0: COM0 to COMn; 0xC8: COMn to COM0

  OledCommand(0x81, 127);  // (07) contrast control: 0 .. 255


  ESPITDCR |= ESPITDCR_SSV;          // activate Slave Select (SS)

  for (ucPage = 0; ucPage < DISP_ROW / 8; ucPage++)
  {
    PSet(OLED_DATA_COMM, FALSE);      // Command Mode

    ESPIDATA = 0xB0 + ucPage;        // (14) Page Address

    while (!(ESPISTAT & ESPISTAT_TDRE)) ;  // wait for: Transmit data register empty
    ESPIDATA = 0x00 + DISP_COL_FIRST;    // (01) Collumn Address (4 low bits)

    while (!(ESPISTAT & ESPISTAT_TDRE)) ;  // wait for: Transmit data register empty
    ESPIDATA = 0x10;            // (02) Collumn Address (4 high bits)

    while (ESPISTAT & ESPISTAT_TFST) ;    // wait for: No data transfer is currently in progress
    PSet(OLED_DATA_COMM, TRUE);        // Data Mode

    for (ucCol = DISP_COL; ucCol--; )
    {
      while (!(ESPISTAT & ESPISTAT_TDRE)) ;  // wait for: Transmit data register empty
      ESPIDATA = 0;
    }

    while (ESPISTAT & ESPISTAT_TFST) ;    // wait for: No data transfer is currently in progress
  }

  ESPITDCR &= ~ESPITDCR_SSV;          // deactivate Slave Select (SS)

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Jan S. (jan-s)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: hallo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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-DIS...

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?

Autor: hallo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
^^

Autor: hallo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
^^ ^^

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.