Hallo zusammen,
nachdem ich jetzt hier schon einige Zeit mitlese, aber bisher noch
nichts passendes gefunden habe, schreibe ich dann auch mal selbst was.
Ich habe hier ein 1,5"-OLED mit SSD1328-Controller/Driver liegen.
Ursprünglich versuchte ich die Ansteuerung über eine ... nicht ganz
billige Treiberbibliothek eines namhaften Herstellers, was auf dem
Testaufbau mit SSD0323 auch wunderbar funktioniert, doch auf dem SSD1328
tat es keinen sinnvollen Dienst. Mittlerweile bin ich also wieder bei
den Assembler-Befehlen eingebettet in C-Code angelangt.
Die Verdrahtung ist korrekt, die Spannungen stimmen auch, VDD und VCC
werden gleichzeitig zu- und abgeschalten. Die Darstellung auf dem
Display ist allerdings stark verrauscht, das was ich eigentlich
darstellen will, erscheint gar nicht. Kontrastregelung etc.
funktioniert.
Die Ansteuerung läuft über 3-Wire-SPI an einem AT91SAM7A3-EK.
send-Funktion:
1 | void send(char address, char data)
|
2 | {
|
3 | int nn;
|
4 |
|
5 | if (address) AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, OLED_DC); /* Command */
|
6 | else AT91F_PIO_SetOutput(AT91C_BASE_PIOA, OLED_DC); /* Data */
|
7 |
|
8 | for(nn=0;nn<20;nn++);
|
9 | AT91F_SPI_PutChar(AT91C_BASE_SPI1,data,0);
|
10 |
|
11 | }
|
12 |
|
13 | set_pixel:
|
14 |
|
15 | void set_pixel(int xcord, int ycord, int greysc)
|
16 | {
|
17 | send(1,0x15);
|
18 | send(1,xcord);
|
19 | send(1,127);
|
20 | send(1,0x75);
|
21 | send(1,ycord);
|
22 | send(1,95);
|
23 | send(0,greysc);
|
24 | }
|
Ich sende dem Controller nach der Initialisierung ein 0xAF
(einschalten), danach 0xA4 (Modus Normal), Kontrast auf Maximum und dann
gehts los.
Als Debug-Ausgabe erstmal eine diskrete Kontrastregelung, dann sollte
per
1 | for(i=0;i<96;i++)
|
2 | {
|
3 | for(j=0;i<64;i++)
|
4 | {
|
5 | set_pixel(i,j,0xFF);
|
6 | delay_ms(10);
|
7 | }
|
8 | }
|
eigentlich erstmal das ganze Display geschrieben werden, aber leider
geht das Display vorher wieder aus. Ich konnte auch beobachten, dass am
Ende der Kontrastregelung (5 komplette Durchläufe mittels while() ) das
Display immer schwarz wird.
Habt ihr irgendwelche Ideen dazu?