Hallo,
ich hab jetzt versucht das umzusetzten, aber es geht immer noch nicht:
Code:
void init_lcd(void)
{
_delay_ms(20);
LCD_E_PORT |= (1<<LCD_E_PIN);
LCD_RS_PORT &= ~(1<<LCD_RS_PIN); /* Steuerregister wird angesprochen */
write_data(0x3); /* 1.0x3 */
LCD_E_PORT &= ~(1<<LCD_E_PIN);
_delay_ms(8);
LCD_E_PORT |= (1<<LCD_E_PIN);
write_data(0x3); /* 2.0x3 */
LCD_E_PORT &= ~(1<<LCD_E_PIN);
_delay_ms(1);
LCD_E_PORT |= (1<<LCD_E_PIN);
write_data(0x3); /* 3.0x3 */
LCD_E_PORT &= ~(1<<LCD_E_PIN);
LCD_RW_PORT |= (1<<LCD_RW_PIN); /*Lesezugriff, warten bis RW 0 */
DDRB = 0xfe; /*PB0 als Eingang, um Busyflag einzulesen*/
LCD_E_PORT |= (1<<LCD_E_PIN);
while(LCD_DATA3_PORT & (1<<LCD_DATA3_PIN)); /*Warten bis Busy-Flag = 0 */
LCD_RW_PORT &= ~(1<<LCD_RW_PIN); /*Schreibzugriff einstellen*/
DDRB = 0xff;
LCD_E_PORT &= ~(1<<LCD_E_PIN);
LCD_E_PORT |= (1<<LCD_E_PIN); /*System-Set*/
write_data(0x2);
LCD_E_PORT &= ~(1<<LCD_E_PIN);
LCD_E_PORT |= (1<<LCD_E_PIN);
write_data(0xC);
LCD_E_PORT &= ~(1<<LCD_E_PIN);
LCD_E_PORT |= (1<<LCD_E_PIN);
write_data(0x0); /*Display on/off, Display on, Unterstrich Cursor on, blinkender Cursor on*/
LCD_E_PORT &= ~(1<<LCD_E_PIN);
LCD_E_PORT |= (1<<LCD_E_PIN);
write_data(0xF);
LCD_E_PORT &= ~(1<<LCD_E_PIN);
LCD_E_PORT |= (1<<LCD_E_PIN);
write_data(0x0); /* Cursor Home */
LCD_E_PORT &= ~(1<<LCD_E_PIN);
LCD_E_PORT |= (1<<LCD_E_PIN);
write_data(0x2);
LCD_E_PORT &= ~(1<<LCD_E_PIN);
LCD_RS_PORT |= (1<<LCD_RS_PIN); /*Datenregister auswählen*/
write_data(0x8);
LCD_E_PORT &= ~(1<<LCD_E_PIN);
}
Das Display ist ein 4x27 mit 2 Controllern und es sind in der 1 und 3 Zeile die Balken zu sehen, was meiner Meinung nach darauf hindeutet, dass schon das System Set nicht funktioniert, da dort eigentlich mehr Zeilen eingestellt werden.
Lesezeichen