Alchemie ist das nicht. Wenn man das hier liest:
dann sollen die zweifachen 0x33 mit der Situation umgehen, daß das LCD (z.B. nach einem Reset der CPU ohne Power On Reset des LCD) ein LOW-Nibble erwartet, der µC aber ein HIGH-Nibble schickt. Schickt man 0x30, kommt 3 ins LOW und 0 ins nächste Byte als High. das wird dann das falsche Kommando. Schicke ich dann noch mal 0x30, ist das wieder so. Schicke ich aber zweimal 0x33, bekomme ich unter allen Umständen eine 3 ins High-Nibble und schalte damit das LCD definiert in den 8-Bit Mode. Von hier kann ich dann definiert weitermachen.Ich habe aber meinen Fehler gefunden, der genau diese Situation beschreibt:
Your problem is that the display keeps its state during MCU reset. When cold-booting, the initial data mode is 8-bit which you immediately switch to 4-bit which reads data with a pair of EN pulses.
When you reset the MCU, you do not know whether even or odd number of EN pulses were sent. So you have to somhow reset the display even if it does not have reset pin.
This can be done by sending 0x33 0x33 (in 8-bit mode it will mean 4-times switch to 8-bit, in 4-bit mode it will mean once or twice switch to 8-bit). Then you can be sure that you always start from the same state.
Then proceed with regular 0x32 (or 4-bit 0x02 if you have single 4-bit write function), 0x28 to get into 4-bit 2-line mode.
MfG Klebwax
Lesezeichen