Forum: Mikrocontroller und Digitale Elektronik LCD funktioniert nicht


von Sabine M. (zizo)


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

von Klaus R. (klaus2)


Lesenswert?

passt der kontrast denn? wenn du das lcd anschaltest, solltest du in der 
1. zeile viele schwarze kästchen sehen. welcher controller ist auf dem 
lcd?

Klaus.

von Sabine M. (zizo)


Lesenswert?

Kontrast passt, die kästchen siehe ich, der Controller ist HD44780

von holger (Gast)


Lesenswert?

>Kontrast passt, die kästchen siehe ich, der Controller ist HD44780

Wenn die Kästchen nicht weggehen stimmt deine Init nicht
oder das Timing bei z.B. E ist falsch.

von Klaus R. (klaus2)


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.

von Paul Baumann (Gast)


Lesenswert?

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

Das ist vielleicht ein PIC, -da wird das mit Bascom nichts werden.
Aber frag ruhig...

http://www.hier-ist-dein-schild.de/

SCNR Paul

von Sabine M. (zizo)


Lesenswert?

ich finde keine Fehler bei der Init

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.