Gast
#838161
Hallo ich habe mir bei Conrad ein Display gekauft (ANAG VISION AV2020)
welches den KS066 Controller (oder kombatibel) verwendet.
Ich befolge genau die Initialisierungsroutine wie sie gefordert ist.
Wenn man die Stromversorung aus und wieder einschaltet passt die
Anzeige.
Nach einem Reset zeigt das 2 zeilige LCD manchmal nur eine Zeile, bzw
lauter komische Sachen in einer oder 2 Zeilen.
Hab schon viele delays eingebaut und wird nicht besser.
// erzeugt den Enable-Puls
void lcd_enable(void) {
LCD_STEUER_PORT |= (1 << LCD_EN);
_delay_us(120); // 100 nicht zu knapp warten
LCD_STEUER_PORT &= ~(1 << LCD_EN);
}
// Initialisierung:
// Muss ganz am Anfang des Programms aufgerufen werden.
void lcd_init(void) {
_delay_ms(50); _delay_ms(50); // Verzögerung wegen
Einschaltung notwendig
LCD_DATEN_DDR |= (0x0F << LCD_DATEN_BIT1); // Datenausgänge
LCD_STEUER_DDR |= (1 << LCD_RS) | (1 << LCD_EN);
// Steuerausgänge
LCD_STEUER_PORT &= ~(1 << LCD_RS | 1 << LCD_EN);// Ausgänge
ausschalten
// LCD_STEUER_PORT = ~(1 << LCD_RW);
// Funktion einstellen
// 3 mal senden zur Initialisierung laut Beschreibung
_delay_ms(50); _delay_ms(50); _delay_ms(50); // Verzögerung wegen
Einschaltung notwendig
LCD_DATEN_PORT &= ~(0b00001111 << LCD_DATEN_BIT1); // Datenausg.
löschen
// 4 Bit Modus, 5x8 Pixel, 2 Zeilen
LCD_DATEN_PORT |= (1 << LCD_DB5);
LCD_STEUER_PORT &= ~(1<<LCD_RS); // RS auf 0
lcd_enable();
_delay_ms(50); //
lcd_enable();
LCD_DATEN_PORT &= ~(0b00001111 << LCD_DATEN_BIT1);// Datenausg.
löschen
_delay_ms(50); //
LCD_DATEN_PORT |= (1 << LCD_DB7); // DB6 dazu ?
lcd_enable();
// Display ON/OFF Controll
// Display ein Cursor aus kein Blinken
_delay_ms(50); // Verzögerung laut Beschreibung
lcd_befehl(0b00001100); // siehe Beschreibung S14
// Display Clear
_delay_ms(50); // Verzögerung laut Beschreibung
lcd_befehl(0b00000001); // siehe Beschreibung
// Entry Mode Set
// inkrement / kein Scrollen
_delay_ms(50); // Verzögerung laut Beschreibung
lcd_befehl(0b00000110); // siehe Beschreibung
_delay_ms(50); // 20
}