www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik OLED Display mit SSD1327 Controller ansteuern


Autor: Mr Bean (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich möchte hier ein OLED Display ansteuern. Das Display hat 128 x 128 
pixel und arbeite mit einem SSD1327 Controller.
Die Ansteuerung soll über I2C erfolgen. Es scheint so, als ob die 
Initialisierung funktioniert. Über das Kommando "invers display" kann 
ich alle Pixel einschalten bzw. über über "All OFF"  kann ich alle Pixel 
ausschalten.
Jetzt möchte ich in den Datenspeicher des Displays schreiben. Hieran 
scheitere ich wohl im Moment... :-(

Hat hier schonmal jemand mit solch einem Display/Controler gearbeitet 
und kann mir sagen was ich beim Beschreiben des Datenspeichers beachten 
muss?
Hier mal der Code meiner Initialisierung (zugegeben nicht sehr schön mit 
dem Befüllen des buffers, aber sollte fürs erste funktionieren...):

char init_OLED(void)
{
  char buffer[29];
  
  //buffer[0] = 0x80;
  //buffer[1] = 0xAF;
  buffer[0] = 0x80;
  buffer[1] = 0xAB;    //Function selection A
  buffer[2] = 0x80;
  buffer[3] = 0x1B;    //Enable internal VDD regulator
  buffer[4] = 0x80;
  //buffer[7] = 0xA4;    //normal display  
  buffer[5] = 0xA5;    //All pixels ON
  //buffer[5] = 0xA6;    //All pixels OFF
  //buffer[7] = 0xA7;    //Inverse display
  buffer[6] = 0xA8;    //set MUX ratio
  buffer[7] = 0x80;
  buffer[8] = 0x80;    //set MUX ratio to 128
  buffer[9] = 0x80;
  buffer[10] = 0x15;    //Set column address
  buffer[11] = 0x80;
  buffer[12] = 0x00;    //Startaddress = 0x00
  buffer[13] = 0x80;
  buffer[14] = 0x3F;    //Endaddress = 0x3F
  buffer[15] = 0x80;
  buffer[16] = 0x75;    //Set row address
  buffer[17] = 0x80;
  buffer[18] = 0x00;    //Startaddress = 0x00
  buffer[19] = 0x80;
  buffer[20] = 0x7F;    //Endaddress = 0x7F
  buffer[21] = 0x80;
  buffer[22] = 0xA0;    //Set re-map options
  buffer[23] = 0x80;
  buffer[24] = 0x00;    //Enable horizontal address increment
  buffer[25] = 0x80;
  buffer[26] = 0xAF;    //set display on
  buffer[27] = 0x80;
  buffer[28] = 0xB2;    //NOP
  
  printf("Initialisiere OLED...\n");
  //Power ON sequence
  GpioPinSetLow(OUTBANK_A, DISP_RESET);
  NutSleep(5);
  GpioPinSetHigh(OUTBANK_A, DISP_RESET);
  NutSleep(5);
  GpioPinSetHigh(OUTBANK_A, DISP_VCC);
  NutSleep(50);
  TwMasterTransact(OLED_ADDRESS, buffer, 29, 0, 0, 50);
  NutSleep(500);
  return 0;
}

und hier mal meine Versuche etwas in den Speicher zu schreiben:
char hello_OLED(void)
{  
  char buffer[132];
  int i;
  
  for (i=0; i<=127; i++)
  {
    if(i%2 == 0)
    {
      buffer[i] = 0x40;
    }
    else
    {
      buffer[i] = 0x0F;
    }
  }
  
  buffer[128] = 0x40;
  buffer[129] = 0xB2;
  
  printf("schreibe...\n");
  TwMasterTransact(OLED_ADDRESS, buffer, 130, 0, 0, 500);
  return 0;
}

MIt der Funktion TwMasterTransact wird der buffer auf den I2C Bus 
geschickt. Das ganze läuft unter Ethernut. Darum diese Funktion.
Könnt ihr mir hier irgendwie helfen?

Laut Datenblatt muss vor jedem Datenbyte ein 0x40 geschickt werden, vor 
jedem Kommando ein 0x80. Sehe ich das richtig!?

Danke schonmal!

Grüße

Bean

Autor: Mr Bean (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Bin nun etwas weiter gekommen, kann jetzt wenigstens reproduzierbar ein 
paar Pixel verändern. :-)
Aber mit der Speicheraufteilung dieses chips komme ich irgendwie nicht 
klar... :-( Gibt es hier niemanden der schonmal was mit solch einem 
Display/Controller gemacht hat!?

Grüße

Bean

Autor: Mr Bean (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen!

Ich komme einfach nicht weiter. Ich hab jetzt mal das Datenblatt von dem 
Controller und dem Display angehängt. Außerdem eine Datei die einen 
Zeichensatz enthält. Die hab ich hier aus dem Forum.
Könnt ihr mir sagen was ich bei meiner Initialisierung falsch mache / 
Wie ich das GDDRAM ansprechen muss um einen Text anzuzeigen?
Hoffe doch dass mir hier jemand helfen kann...

Grüße

Bean

Autor: ksan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bean,

Now, if you can switch on and off all the pixel, it would mean your 
hardware connection is most probably correctly.

The next thing is that, did you ask any initialization code from Rit 
Display? usual, RitDisplay may have customized the chip to suit their 
OLED panel, and thus may need some "special" code. It would help you to 
get the init code from Rit Display first.

does section 7.7 of the datasheet give you any clear problems than 
please post your questions - possibly I can help with this. otherwise it 
looks that you are on the right way.

rgds,
Ksan

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.