Forum: Mikrocontroller und Digitale Elektronik Nur 2 Zeilen statt 4 auf EA W164B-NLW


von Hannes (Gast)


Lesenswert?

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

von Erik (Gast)


Lesenswert?

> 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?

von Hannes (Gast)


Lesenswert?

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

von johnny.m (Gast)


Lesenswert?

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.

von Falk (Gast)


Lesenswert?

@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

von ecslowhand (Gast)


Lesenswert?

1
EADIP_init:
2
  D_cs_LOW   ; Chipselect LOW
3
  ldi  r16, 0b11111000      ; Load START-BYTE
4
  sts  LCD_STARTBYTE, r16    ; LCD_STARTBAYTE setzen
5
  rcall  Send_Startbyte      ; Startbyte senden
6
7
  ldi  r17, 0b00110100
8
  rcall  LCD_Send_BYTE
9
  rcall  WAIT_45uS
10
11
  ldi  r17, 0b00001001
12
  rcall  LCD_Send_BYTE
13
  rcall  WAIT_45uS
14
15
  ldi  r17, 0b00110000
16
  rcall  LCD_Send_BYTE
17
  rcall  WAIT_45uS
18
19
  ldi  r17, 0b00001100
20
  rcall  LCD_Send_BYTE
21
  rcall  WAIT_45uS
22
23
  ldi  r17, 0b00000001
24
  rcall  LCD_Send_BYTE
25
  rcall  WAIT_1600uS
26
27
  ldi  r17, 0b00000110
28
  rcall  LCD_Send_BYTE
29
  rcall  WAIT_45uS
30
31
  D_cs_HIGH   ; Chipselect HIGH
32
33
  ret


Beispiel von einem EA-DIP204.

Lg EC

von ecslowhand (Gast)


Lesenswert?

Diese Zeilen
1
  movlw  B'00101000'  ; 5 function set, 4-bit  2-zeilig,  5x7
2
  call  OutLcdControl

betriffen wie von Dir angemerkt "FUNCTION SET".

Du musst den VIER-Zeilenmodus im "EXTENDED(!) FUNCTION SET" aktivieren.

Geht bei mir so:
1
  ldi  r17, 0b00110100 ; 8-Bit Datenlänge, extension Bit RE=1
2
  rcall  LCD_Send_BYTE
3
  rcall  WAIT_45uS
4
5
  ldi  r17, 0b00001001 ; 4 Zeilen Modus
6
  rcall  LCD_Send_BYTE
7
  rcall  WAIT_45uS
8
9
  ldi  r17, 0b00110000 ; 8-Bit Datenlänge, extension Bit RE=0
10
  rcall  LCD_Send_BYTE
11
  rcall  WAIT_45uS

Versuchs mal.

LG EC

von Hannes (Gast)


Lesenswert?

@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

von Falk (Gast)


Lesenswert?

@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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.