Hallo
Diese Initialisierung verwende ich bei meinem Display für mein I2C-LCD am arm64. Der Code ist aus den Libraries des m32 kopiert:
Code:
// Initialize the LCD. Always call this before using the LCD!
void initLCD(void)
{
//delayCycles(34000); No need for Power ON delay as usually the
// Bootloader should have been executed before...
setLCDD(0b0011);
delayCycles(18000);
setLCDD(0b0011);
delayCycles(5500);
setLCDD(0b0011);
delayCycles(5500);
setLCDD(0b0010);
delayCycles(5500);
writeLCDCommand(0b00101000);
delayCycles(5500);
writeLCDCommand(0b00001000);
delayCycles(5500);
writeLCDCommand(0b00000001);
delayCycles(5500);
writeLCDCommand(0b00000010);
delayCycles(5500);
writeLCDCommand(0b00001100);
delayCycles(5500);
}
Der rote Bereich ist das CLS-Kommando. Dieses braucht zur Ausführung laut Datenblatt meines LCD aber bis zu 1,64ms! Alle anderen Befehle brauchen maximal 40µs. Das ist letztlich der Grund warum meine eigenen LCD-Ansteuerungen bisher nicht sauber liefen. Hier mein aktuelles Setup, die zweiten Werte sind die Wartezeiten in µs laut Datenblatt, sieht deshalb (seit heute;) so aus:
Code:
rsl;
_delay_ms(20); // Initialisieren >15ms nach dem Einschalten
lcd_write8(0b00110000,5000); // >4,1ms
lcd_write8(0b00110000,150); //
lcd_write8(0b00110000,150); //
lcd_write8(0b00110000,150); //
lcd_write8(0b00100000,150); // Function Set: 4bit-Modus starten
lcd_write4(0b00101000,40); // Function Set: 2 Zeilen, Font 0 (0010NFxx)
lcd_write4(0b00000001,1640); // Display Clear (dauert ewige 1,64ms!!!)
lcd_write4(0b00000110,40); // Entry Mode Set: inc, no shift
lcd_write4(0b00001100,40); // Display On and Cursor (00001DCB)
rsh;
Lange Rede, kurzer Sinn: Vielleicht stimmt die Initialisierung in der m32-Lib nicht:
// writeLCDCommand(0b00000001);
Gruß
mic
Lesezeichen