PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD über Porterweiterung im 4bit Modus?



shamanu
10.02.2006, 20:52
Ich versuche ein TRIMODS1535 LCD über einen PCF8574P Porterweiterungs IC per I2C anzusteuern.
Das Problem fängt jedoch bereits bei der Initialisierung des LCD's an.
Aus dem Datenblatt ist für mich nicht wirklich ersichtlich wie dies alleine über 4 angeschlossene Datenports vonstatten gehen soll.
Datenblatt: http://www.farnell.com/datasheets/58904.pdf
Auf Seite 16 befindet sich ein beispiel für die 8bit Initialisierung.

Laut "Function set" sollte ich folgendes senden um in den 4 bit modus mit 2 Zeilenbetrieb zu kommen:
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 0 1 0 x x

DB7 bis DB4 kann ich senden, jedoch befindet sich das Display ja noch nicht im 4 bit modus, also was ist mit DB3/2?

shamanu
11.02.2006, 15:12
Ok, ich konnte das Problem nach längerem hin und her nun lösen.

Die Init routine:


void lcdInit(void)
{
// wait for more than 30ms after Vdd raised
_delay_ms(32);
lcdOut(0x00);

// set mode to 8 bit if the lcd got no reset
lcdOut(LCD_D5|LCD_D4);
lcdOut(LCD_D5|LCD_D4|LCD_E);
_delay_us(40);
lcdOut(LCD_D5|LCD_D4);

lcdOut(0x00);
lcdOut(LCD_E);
_delay_us(40);
lcdOut(0x00);

// set mode to 4 bit
lcdOut(LCD_D5);
lcdOut(LCD_D5 | LCD_E);
_delay_us(40);
lcdOut(LCD_D5);

// from now on display can be interfaced using 4bit mode
lcd4BitOut(0x28, 0); // function set 4 bit, 2 line mode, 5x8 Dots
lcd4BitOut(0x0F, 0); // display on, cursor on, blink on
lcdClear();
lcd4BitOut(0x06, 0); // entry mode, increment mode, entire shift off
}

Ob die sache mit dem "set mode to 8 bit" so sauber programmiert ist bin ich mir nicht sicher. Funktionieren tut es zumindest bis jetzt.