Hallo Christian,
ich habe Deine Init-Routine nur kurz überflogen: Mir gefällt der
Zeitpunkt der Warteschleife nicht:
Soweit ich mich erinnere (Du wirst um das Lesen des Datenblattes nicht
herumkommen!), werden die Daten vom LCD mit der fallenden Flanke des
Enable-Impulses übernommen und der Befehl ausgeführt. Du setzte E auf
High, wartest, und setzt E auf Low zurück; dann erst verarbeitet das
LCD.
Was geschieht, wenn während der Verarbeitung E auf High gelegt wird,
weiß ich nicht - das wirst Du nachlesen müssen.
Probiere doch mal E --> High [2µs] --> Low --> warten.
Gruß
Michael