Bei meinem Display sind die 3 mal 0x30 auch drin.
Ich habe das EA-W162B-BNLW mit dem Controller HD44780U
Hier meine 4 Bit Mode Initialisierung:
Code:
/* Power Up need ca. 40 ms internal Power on reset HD44780U */
Wait_us(50000);
LCD_DIR_OUTPUT; /* LCD Data Lines direction to output */
Wait_us(20);
LCD_DataOut8(0x30); /* Function set */
Wait_us(5000); /* wait > 4,1ms */
LCD_DataOut8(0x30); /* Function set */
Wait_us(200); /* wait > 100 us */
LCD_DataOut8(0x30); /* Function set */
Wait_us(200); /* wait > ??? us */
LCD_DataOut8(0x20); /* Function Set 4 BIT DL=0 */
Wait_us(200); /* wait > 26,3 us */
/* !!!! erst ab jetzt ist der 4 Bit Modus aktiv */
LCD_WaitBusy();
LCD_DataOut4(0x28); /* Function set DL=0==>4 Datalines N=1==>zwei oder vierzeiliges Display F=0==5x7 Dot*/
LCD_WaitBusy();
LCD_DataOut4(0x0F); /* Display On, Cursor blink on */
LCD_WaitBusy();
LCD_DataOut4(0x06); /* Entry Mode set Cursor auto inc 40us */
LCD_WaitBusy();
LCD_GotoXY(2,0);
LCD_Write("Hallo");
LCD_GotoXY(2,1);
LCD_Write("Display");
!!! das Busy Flag BF darf bei der initialisierung noch NICHT abgefragt werden,
das funktioniert erst nachdem der 4 Bit Modus gesetzt wurde.
Deshalb die wartefunktion Wait_us
-------------------------------------
Um deine Adresse zu setzen, wo das nächste Zeichen hin soll
must Du generell noch das Datenbit DB7 setzen
Also zweite Zeile ist 0x40
dann das 9te Zeichen
ist dann deine 49 Hex
und nun noch +128 oder OR 0x80 um das DB7 Bit zu setzen
dann erst ausgeben.
Das RS Bit muss dabei 0 sein, das ist richtig.
Ich setzte immer die Adresse mit folgender Funktion
Code:
GotoXY(x,y)
Adresse = (y * 0x40) + x + 128
Pseudocode:
a = 0
wenn y = 1 dann a = 0x40 / 2 Zeile beginnt bei 0x40
a = a + x / Spaltenposition addieren
a = a OR 0x80 / immer DB7 Bit setzen
Auf Port ausgeben dabei RS Pin Low lassen
Lesezeichen