Ich habe ein LCD 16x2 in Verwendung, doch kann ich nicht in der 2. Zeile schreiben...der Controller auf dem LCD ist ein EU KS70066 Chip
Ich initialisiere es so:
Kommandos werden so geschrieben:Code:/* ========================================================================== */ void lcd_init(void) { // DDR Setzen LCD_DDR = 0xFF; // Datenport 0..7 Output CONTROL_DDR |= (1 << EN) | (1 << RS); // Controllport EN + RS Output _delay_ms(450); LCD_PORT = 0x00; // Datenleitungen,alles auf LOW setzen send_cmd(0x01); // LCD clear _delay_ms(5); send_cmd(0x38); // 8-Bit u. 2 Zeilen _delay_ms(5); send_cmd(0x0E); // Display On , Cursor ON _delay_ms(5); //send_cmd(0x0F); // Cursor blink ON _delay_ms(5); //send_cmd(0x10); // Cursor shift re _delay_ms(5); } /* ========================================================================== */
einzelne Zeichen schreibe ich so:Code:/* ========================================================================== */ /* */ /* Sende Kommandodaten */ /* */ /* */ /* ========================================================================== */ void send_cmd(uint8_t cmd) { CONTROL_PORT &= ~(1<< RS); //RS=0 command _delay_ms(1); LCD_PORT = cmd; CONTROL_PORT |= (1 << EN); //EN=1 _delay_ms(1); CONTROL_PORT &= ~(1 << EN); //EN=0 _delay_ms(4); }
Im Test (main) geht es so von statten:Code:/* ========================================================================== */ /* */ /* Sende Char */ /* */ /* */ /* ========================================================================== */ void send_chr(char chr) { int ch = chr; CONTROL_PORT |= (1<< RS); //RS=1 daten _delay_ms(1); LCD_PORT =ch; CONTROL_PORT |= (1 << EN); //EN=1 _delay_ms(1); CONTROL_PORT &= ~(1 << EN); //EN=0 _delay_ms(1); }
Ausgegeben werden nur in der ersten Zeile "ABC" an richtiger Stelle..."DEF" auf eigendlich der 2. Zeile erscheint gar nicht, ich kann auch nur den Cursor nicht in diese Zeile bringen./* ================================================== ======================== */
/* */
/* */
/* Main-Routine LCD Test */
/* */
/* ================================================== ======================== */
int main(void)
{
lcd_init();
_delay_ms(200);
send_cmd(0x82); // sende Command: Pos.3 1.Zeile(0x80)
send_chr('A');
send_chr('B');
send_chr('C');
send_cmd(0x42); // sende Command: Pos 3 2. Zeile(0x40)
send_chr('D');
send_chr('E');
send_chr('F');
return 0;
}
Lt Datenblatt soll 0x80... Zeile 1 und 0x40 ... Zeile 2 sein.
Zeil1 kann ich nutzen wie ich möchte, nur die Zeile 2 eben GAR NICHT ???
Weiss wer einen Rat ?
Ich bin dankbar für jeden Hinweis !
Gruss Gerhard







Zitieren


Lesezeichen