Hallo
Diese Initialisierung verwende ich bei meinem Display für mein I2C-LCD am arm64. Der Code ist aus den Libraries des m32 kopiert:
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:// 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); }
Lange Rede, kurzer Sinn: Vielleicht stimmt die Initialisierung in der m32-Lib nicht: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;
// writeLCDCommand(0b00000001);
Gruß
mic







Zitieren

Lesezeichen