mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD funktioniert nicht


Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus R. (klaus2)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kontrast passt, die kästchen siehe ich, der Controller ist HD44780

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus R. (klaus2)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sabine Mühller (zizo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich finde keine Fehler bei der Init

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.