Hallo Leute,
versuche seit Tagen auf dem W164B-NLW von Electronic Assembly
eine vernünftige Anzeige hinzubekommen. Doch während der Initialisierung
und später bei der Anzeige, werden nur die Zeilen 2+4 angezeigt (alle
korrekt), die komischerweise auf dem Display als Zeile 1+3 erscheinen
(haben aber die RAM-Adressen von Zeile 2+4).
Mir fehlen also zwei Zeilen!
Mache ich da irgendwas falsch, oder ist mein Display im Eimer?
Hier meine init-Sequenz:
movlw D'255' ; 250 ms Pause nach dem Einschalten
movwf loops
call WAIT
movlw B'00110000' ; 1
movwf PORTC
bsf PORTC, LcdE
nop
bcf PORTC, LcdE
movlw D'50' ; 50 ms Pause
movwf loops
call WAIT
movlw B'00110000' ; 2
call Control8Bit
movlw B'00110000' ; 3
call Control8Bit
movlw B'00100000' ; 4
call Control8Bit
movlw B'00000001' ; löschen und cusor home
call OutLcdControl
movlw B'00101000' ; 5 function set, 4-bit 2-zeilig, 5x7
call OutLcdControl
movlw B'00001000' ; 6 display off
call OutLcdControl
movlw B'00000110' ; 7 entry mode, increment, disable display-shift
call OutLcdControl
movlw B'00000011' ; 8 cursor home, cursor home
call OutLcdControl
movlw B'00001111' ; 9 display on
call OutLcdControl
Vielleicht fällt dem einen oder anderen irgendetwas auf oder hatte ein
ähnliches Problem. Danke im Vorraus.
MfG
Hannes
> movlw B'00101000' ; 5 function set, 4-bit 2-zeilig, 5x7
Ich kenne das Display leider nicht, aber wäre es möglich, dass man das
Ding vielleicht auf "4-zeilig" einstellen muss?
Im Handbuch steht nur was von 2-zeilig, und das ist das 2. Bit neben der
ersten 1 (was schon gesetzt ist). Nach Handbuch müsste durch setzen
automatisch 4-zeilig gewählt werden. Bei zweizeiligen Displays würden
zwei zeilen angezeigt werden, und bei vierzeiligen eben vier (laut
Handbuch).
Bei einem Vierzeilendisplay kann ich somit zwischen einer Zeile wählen
und vier Zeilen.
Kann natürlich auch anders sein. Vielleicht besitzt jemand ein
vierzeiliges Display von EA. Wie habt ihr dort 4 Zeilen eigestellt?
MfG
Hannes
Die vierzeiligen Displays haben i.d.R. nur zwei "echte" (logische)
Zeilen. Die dritte Zeile ist meist die Fortsetzung der ersten und die
vierte eine Fortsetzung der zweiten, was die Adressen der
Display-Character angeht.
@johnny.m
>Die vierzeiligen Displays haben i.d.R. nur zwei "echte" (logische)>Zeilen. Die dritte Zeile ist meist die Fortsetzung der ersten und die>vierte eine Fortsetzung der zweiten, was die Adressen der>Display-Character angeht.
Genau.
http://www.zing.com.tw/WINTEK/wm-c1604m.htm
MFg
Falk
@ecslowhand:
Mein LCD von EA hat leider nur 16 Pins, und die Extended Function kennt
er auch nicht.
Ich weiß jetzt aber woran es lag. Es war die Verbindung zwischen
Testplatine und LCD, die war locker.
Trotzdem danke und hier ist der funktionierende init-code:
InitLCD
movlw D'255' ; 250 ms Pause nach dem Einschalten
movwf loops
call WAIT
movlw B'00110000' ; 1
movwf PORTC
bsf PORTC, LcdE
nop
bcf PORTC, LcdE
movlw D'50' ; 50 ms Pause
movwf loops
call WAIT
movlw B'00110000' ; 2
call Control8Bit
movlw B'00110000' ; 3
call Control8Bit
movlw B'00110000' ; 4
call Control8Bit
movlw B'00101000' ; 5 function set, 4-bit 2-zeilig, 5x7
; call OutLcdControl
; movlw B'00001000' ; 6 display off
call OutLcdControl
; movlw B'00000110' ; 7 entry mode, increment, disable display-shift
; call OutLcdControl
movlw B'00000011' ; 8 cursor home, cursor home
call OutLcdControl
movlw B'00001111' ; 9 display on
call OutLcdControl
movlw B'00000001' ; löschen und cusor home
call OutLcdControl
return
@Hannes
>Ich weiß jetzt aber woran es lag. Es war die Verbindung zwischen>Testplatine und LCD, die war locker.
Wackelkontakt. Immer wieder gern genommen . . . ;-)
MFG
Falk