ich programmier seit einigen Tagen an einem kleinen Projekt und möchte dazu ein OLED Display betreiben. Um genau zu sein ist es dieses hier.
Hier das Datenblatt.
Nun zum Fehlerbild:
Es geht nicht. Es zeigt schlicht nichts an. Bzw... tut es das mal und mal nicht und seit dem letzten "Crash" garnicht mehr. Das letzte mal hatte ich einfach zu schnell auf das Display geschrieben - danach hat es nichtsmehr gemacht.
Das Display initialisiert aber richtig - ich debugge via UART/COM-Port und der Controller bleibt nicht in den initialisierungsroutinen hängen.
Da es mal ging und ich elektronisch auch nichts geändert habe gehe ich davon aus, dass das Problem auf jeden Fall nicht in der Verkabelung liegt - der Vollständigkeit wegen aber hier nochmal die Pinbelegung:
Code: Alles auswählen
#define LCD_DATA PORTC
#define LCD_DATA_D DDRC
#define LCD_INPUT PINC
#define LCD_D4 PC0
#define LCD_D5 PC1
#define LCD_D6 PC2
#define LCD_D7 PC3
#define LCD_CTRL PORTA
#define LCD_CTRL_D DDRA
#define LCD_E PA3 //Enable Portpin
#define LCD_RS PA1 //RS Portpin
#define LCD_RW PA2 //RW Portpin
Das Display selber hat vorher ein wenig gelitten - ich hatte es versehentlich verpolt angeschlossen und der Displaycontroller wurde heiß. Danach hat das Ding aber bei richtiger Polung trotzdem brav sein "Hallo Welt" angezeigt.
Da ich mir danach jedoch nicht so ganz sicher war ob das Display noch geht habe ich erstmal zu Testzwecken eine Libary aus dem Internet genommen und diese entsprechen angepasst - dies waren nicht nur die Pins sondern auch die Initialisierung die bei diesen Display ein wenig anders ist. Ursprünglich war die Libary für diese kleinen Zweizeiligen Pollin Displays gedacht.
Hier meine Inintialisierung:
Code: Alles auswählen
void lcd_init() {
//Portrichtungen setzen
sbi(LCD_DATA_D,LCD_D4);
sbi(LCD_DATA_D,LCD_D5);
sbi(LCD_DATA_D,LCD_D6);
sbi(LCD_DATA_D,LCD_D7);
sbi(LCD_CTRL_D,LCD_E);
sbi(LCD_CTRL_D,LCD_RS);
sbi(LCD_CTRL_D,LCD_RW);
INIT_DELAY();
//LCD Initalisierungssequenz
writeMode();
commandMode();
//Function Set: 0 0 1 DL N F — —
#ifdef C080204 //Pollin init C080204
sendNibble(0x2); //4-Bit Mode (DL=0)
_delay_ms(10);
#else //Init for EA W162-X3LG
sendNibble(0x3);
sendNibble(0x3);
sendNibble(0x3);
sendNibble(0x2);
_delay_us(5);
sendCommand(0x28);
sendCommand(0x08);
sendCommand(0x06);
sendCommand(0x17);
sendCommand(0x02);
#endif
unsigned char cmd=CMD_FUNCTION;
if (LCD_LINES!=1) cmd |= BIT_N; // Anzahl Zeilen
if (LCD_5X10) cmd |= BIT_F; //Zeichenhöhe
//sendCommand(cmd); // 4-Bit Modus, Zeilen und Font setzen
_delay_ms(10);
//Display On/Off: 0 0 0 0 1 D C B
sendCommand(0xC); //Display on, no cursor, no blink
//Clear Display: 0 0 0 0 0 0 1
sendCommand(0x1); //Clear Display and Cursor home
}
Weiß irgendjemand Rat?
Mit freundlichen Grüßen
SeriousD