Hallo,
auf die Ausgabe DU5B kann ich mir keinen Reim machen. Ich habe den Code mal mit meinem verglichen. Vielleicht hilft, dir diese init Routine ja weiter.
Code:
void InitLCD ()
{
uint8_t i;
LCD_RS_PORT &=~(1<<LCD_RS_PIN);
LCD_RW_PORT &=~(1<<LCD_RW_PIN);
for (i=0;i<3;i++)
{
SetData (0x03);
EnablePuls();
_delay_loop_2 (0xFFFF);
}
CheckBusy ();
SetData (2);
EnablePuls();
CheckBusy ();
WriteData (1,0x28);
WriteData (1,0x06);
}
SetData ersetzt du durch lcd_write (Data,0);
Enablepuls ist bei dir
LCD_Port_Write |= (1<<LCD_E);
WAIT();
LCD_Port_Write &=~ (1<<LCD_E);
_delay_loop_2 (0xFFFF); Die Zeit ist übertrieben lang, bin ich aber immer gut mit gefahren.
Für CheckBusy();
while ((lcd_read(0)&(1<<BUSYBIT)) > 0 && timeout++ < 500) {};
Es gibt dann aber noch den Unterschied, dass ich mit SetData nur die verbundenen 4Bits anspreche.Zu dem Zeitpunkt ist die Interfacebreite ja noch nicht eingestellt.
Mit WriteData schreibe ich, wie in deinem Programm, dann erst die oberen 4 und dann die unteren 4Bits.Da könnte es auch noch ein Problem geben. Aber versuchs erst einmal wie oben beschrieben.
Gruß
Jens
Lesezeichen