Gast
#810549
Hi, ich habe ein Display mit einem S6A0070 als Treiber. Habe mal ie Datenblätter verglichen, eigentlich gleicht er dem HD44780. Nun habe ich das Problem, dass ich die Zweite Zeile des Displays nicht beschreiben kann. Sie ist zwar aktiv (wenn man am Kontrast rumspielt, wird sie genau wie die erste Zeile dunkel) aber ich kann weder den Cursor hinsetzen (0xC0) noch kann ich über die erte Zeile hinaus auf die zweite schreiben. Ich vermute, dass was mit der Initialisierung faul ist (4-Bit Interface). Ich habe mal die Init aus dem Datenblatt und die aus dem Datenblatt des HD44780 probiert und alles lässt sich einstellen (Curser blinken usw. auch kann ich Zeichen rübersenden. Ich mal mal die Init angehangen. Mit den Zeiten war ich ziemlich großzügig, weil im Datenblat was von Mindestzeiten stand und ich mir nicht sicher war, weil's ja nicht läuft, wie's soll. Kann mir einer weiterhelfen? Danke, Alex int toggle_LCD_E(void) { LCD_PORT |= (1<<LCD_E); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); LCD_PORT &= ~(1<<LCD_E); return(0); } int lcd_putnibble(unsigned char nibble, unsigned char rs) { register unsigned char reg; reg = nibble << 4; if(rs == 1) { reg |= (1<<LCD_RS); } else { reg &= ~(1<<LCD_RS); } LCD_PORT &= ~((1<<LCD_DB7)|(1<<LCD_DB6)|(1<<LCD_DB5)|(1<<LCD_DB4)| (1<<LCD_RS)); LCD_PORT |= reg; toggle_LCD_E(); return(0); } int lcd_putc(unsigned char byte, unsigned char rs) { register unsigned char reg_high, reg_low; reg_high = byte & 0xF0; reg_low = byte << 4; if(rs == 1) { reg_low |= (1<<LCD_RS); reg_high |= (1<<LCD_RS); } else { reg_low &= ~(1<<LCD_RS); reg_high &= ~(1<<LCD_RS); } LCD_PORT &= ~((1<<LCD_DB7)|(1<<LCD_DB6)|(1<<LCD_DB5)|(1<<LCD_DB4)| (1<<LCD_RS)); LCD_PORT |= reg_high; toggle_LCD_E(); LCD_PORT &= ~((1<<LCD_DB7)|(1<<LCD_DB6)|(1<<LCD_DB5)|(1<<LCD_DB4)| (1<<LCD_RS)); LCD_PORT |= reg_low; toggle_LCD_E(); return(0); } int lcd_init(void) { int i; LCD_PORT |= (1<<LCD_DB7)|(1<<LCD_DB6)|(1<<LCD_DB5)|(1<<LCD_DB4)|(1<<LCD_DISP)|(1<<LC D_RS)|(1<<LCD_E); LCD_DDR |= (1<<LCD_DB7)|(1<<LCD_DB6)|(1<<LCD_DB5)|(1<<LCD_DB4)|(1<<LCD_DISP)|(1<<LC D_RS); LCD_DDR |= (1<<LCD_E); mswait(20); for (i=0;i<3;i++) { lcd_putnibble(0x03,0); mswait(10); } lcd_putnibble(0x02,0); mswait(10); lcd_putc(0x28,0); mswait(10); lcd_putc(0x0F,0); mswait(10); lcd_putc(0x01,0); mswait(10); lcd_putc(0x06,0); return(0); }