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
}
Hallo, das Display weiß ja nichts vom AVR-reset. Manche Funktionen lassen sich nur einmal nach dem Displaystart einstellen und der erfolgt ja nur beim PowerOn, nicht beim AVR-Reset. Oben in den Kommentaren gibt es // 3 mal senden zur Initialisierung laut Beschreibung da sendest Du nichts. Ich weiß auch nicht, ob der KS0066 den Softwarereste des HD44780 kann (3x 0x30 senden), versuchen kannst Du es ja mal, im Datenblatt auf ich beim Überfliegen nichts dazu gefunden. Gruß aus Berlin Michael
o.k. das gilt ab dem Kommentar "4 Bit Modus", die 3 x lcd_enable() bis zum nächsten Kommentar "DISPLAY ON/OFF". Werd ich mal versuchen, ich hab nämlich im Datenblatt leider auch keinen expliziten Reset Befehl gefunden. Was mir auch noch aufgefallen ist, wenn ich Reset drücke und er zeigt was falschen an drücke ich erneut Reset und dann passt es wieder. Wenn man den Reset genau richtig drückt (nicht zu kurz oder zu lang) zeigt er auch gleich das richtige. Danke Werner
meine init sieht so aus (funktioniert) .....
void InitLCD(void)
{
DisplayDataEnable(); // set all display-portpins first
LCD_RS_CONTROL(); // write to control register
LCD_RW_LOW(); // set to write function
LCD_E_LOW(); // data-invalid
delay(25000); // wait 20ms after restart
lcd_write(0x30);
delay(6500); // wait 5.2ms
lcd_write(0x30);
delay(6500); // wait 5.2ms
lcd_write(0x30);
delay(100); // 80µs
lcd_write(0x38); // display has 2lines
delay(100); // 80µs
lcd_write(0x0C); // display on, no cursor
delay(100); // 80µs
lcd_write(0x01); // clear display
delay(6500); // 80µs
lcd_write(0x06); // clear display
delay(100); // 80µs
DisplayDataDisable();
}
Hallo zusammen, hatte das gleiche Problem mit nem anderen Atmega, aber auch dem KS0066 Controller, die Lösung war an sich simpel. Zumindest bei mir, bei mir musste ich nur den Controller nach dem einschalten einmalig auf den 8Bit Modus setzen. 0x30 auf die Datenleitungen. Anschließend die im Datenblatt angegebene Initialisierung ausführen. Ich hoffe es steinigt mich jetzt keiner dass ich hier meine Lösung angehängt hab.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.