LCD funktioniert nicht

OP #1544068
Lesenswert?

Hallo,
ich habe versucht seit paar Tage, ein LCD mit Pic16F88 zu steuern, die 
Hintergrund leuchtet, aber die Buchstabern werden nicht dargestellt.

ich hoffe dass jemand mir helfen kann, ich bedanke mich,

die Verbindung zwischen Pic und LCD wie folgt:
RA0-------D4
RA1-------D5
RA2-------D6
RA3-------D7
RB0-------RS
RB1-------R/W
RB2-------E

Assembler Code


   #include <P16F88.inc>


; Variablen festlegen

w_copy    Equ  0x21
s_copy    Equ  0x22
LcdDaten    Equ  0x23
LcdStatus   Equ  0x24
Wait1     Equ 0x25
Wait2     Equ 0x26
Wait3    Equ 0x28
Wait4    Equ 0x29
x      Equ 0x27

;Konstanten

LcdE  equ  2    ; enable Lcd
LcdRw  equ  1    ; read Lcd
LcdRs  equ  0    ; Daten Lcd (nicht control)

org 0x0000

 ERRORLEVEL      -302


;
__CONFIG   _CONFIG1,     _PWRTE_ON & _WDT_OFF & _CCP1_RB0
;
goto MainInit

MainInit

  bsf STATUS, RP0

  clrf   OSCTUNE

  movlw   b'0000110'
     movwf   OSCCON

  movlw   0x00
  movwf   ANSEL

  clrf  TRISA
  clrf  TRISB

  bcf STATUS,RP0

  call  InitLCD    ; Display initialisieren

  movlw  'H'
  movwf  LcdDaten
  call  OutLcdDaten
  movlw  'a'
  movwf  LcdDaten
  call  OutLcdDaten
  movlw  'l'
  movwf  LcdDaten
  call  OutLcdDaten
  movlw  'l'
  movwf  LcdDaten
  call  OutLcdDaten
  movlw  'o'
  movwf  LcdDaten
  call  OutLcdDaten

  sleep


Main
  goto   Main



InitLCD

  call Warten250

  movlw  B'00000011'  ; 1
  movwf  PORTA
  bsf  PORTB, LcdE
  nop
  bcf  PORTB, LcdE

  call Warten50

  movlw  B'00000011'  ; 2
  call  Control8Bit
  movlw  B'00000011'  ; 3
  call   Control8Bit
  movlw  B'00000010'  ; 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
  return

; ein Steuerbyte 8-bittig übertragen
Control8Bit
  movwf  PORTA
  bsf  PORTB, LcdE
  nop
  bcf  PORTB, LcdE
  call Warten10
  return

LcdBusy
;  bsf  PORTA, 1  ; Test LED 1 on
        bsf     STATUS, RP0  ; make Port B4..7 input
  movlw  B'11110000'
  iorwf   TRISB, f
        bcf     STATUS, RP0
return
; ein Byte mit Steuerdaten von LcdDaten zum Display übertragen
OutLcdControl
  movwf  LcdDaten
  call  LcdBusy
  movf  LcdDaten, w
  andlw  H'F0'
  movwf  x
  swapf   x,1
  movfw   x
  movwf  PORTA  ; Hi-teil Daten schreiben
  bsf  PORTB, LcdE
  nop
  bcf  PORTB, LcdE  ; Disable LcdBus
  movfw  LcdDaten
  andlw  H'0F'
  movwf  PORTA    ; Lo-teil Daten schreiben
  bsf  PORTB, LcdE
  nop
  bcf  PORTB, LcdE  ; Disable LcdBus
  return

; ein Datenbyte von LCDDaten zum Display übertragen

OutLcdDaten
  movwf  LcdDaten
  call  LcdBusy
  movf  LcdDaten, w
  andlw  H'F0'
  movwf  x
  swapf   x,1
  movfw   x
  movwf  PORTA  ; Hi-teil Daten schreiben
  bsf  PORTB, LcdRs  ; Daten
  bsf  PORTB, LcdE  ; Enable LcdBus
  nop
  bcf  PORTB, LcdE  ; Disable LcdBus
  movfw  LcdDaten
  andlw  H'0F'
  movwf  PORTA    ; Lo-teil Daten schreiben
  bsf  PORTB, LcdRs  ; Daten
  bsf  PORTB, LcdE
  nop
  bcf  PORTB, LcdE  ; Disable LcdBus
  bcf  PORTB, LcdRs  ;

  return




Warten10
  movlw .10
  movwf Wait4
  decfsz Wait4, F
  call Warten
  retlw .0

Warten50
  movlw .50
  movwf Wait3
  decfsz Wait3, F
  call Warten
  retlw .0

Warten250
  movlw .250
  movwf Wait2
  decfsz Wait2, F
  call Warten
  retlw .0

Warten
  movlw   .110           ; Zeitkonstante für 1ms
    movwf   Wait1


loop

     nop
        nop
        nop
        nop
        nop
        nop
        decfsz  Wait1, F      ; 1 ms vorbei?
        goto    loop           ; nein, noch nicht
  retlw   .0


  end
#1544109
Lesenswert?

tja, dann gibt genau für den controller und das lcd ja haufenweise 
beispiele im netz. tut das nicht, liegt es an deiner hardware, den fuses 
oder sonstwas...der teufel steckt im detail und meistens nicht im 
beispiel-code :)

wieso eigentlich nicht C? oder bascom (würg)?

Klaus.

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