Nur 2 Zeilen statt 4 auf EA W164B-NLW

Gast #528094
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
Gast #528421
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
Gast #528425
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.
Gast #528435
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
Gast #528463
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
Gast #529642
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren