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


von Mr Bean (Gast)


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...):

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

und hier mal meine Versuche etwas in den Speicher zu schreiben:
1
char hello_OLED(void)
2
{  
3
  char buffer[132];
4
  int i;
5
  
6
  for (i=0; i<=127; i++)
7
  {
8
    if(i%2 == 0)
9
    {
10
      buffer[i] = 0x40;
11
    }
12
    else
13
    {
14
      buffer[i] = 0x0F;
15
    }
16
  }
17
  
18
  buffer[128] = 0x40;
19
  buffer[129] = 0xB2;
20
  
21
  printf("schreibe...\n");
22
  TwMasterTransact(OLED_ADDRESS, buffer, 130, 0, 0, 500);
23
  return 0;
24
}

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

von Mr Bean (Gast)


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

von Mr Bean (Gast)


Angehängte Dateien:

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

von ksan (Gast)


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

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.