Hallo,
es liegt bei mir ein ähnliches Problem vor. Ich verwende allerdings einen PIC16F84A und 162C-LCD-Anzeige.
Mein Skript:
Es passiert nichts. Wenn man den Kontrast hochregelt, stellt man fest das nur in der unteren Zeile graue Kästchen erscheinen.Code:list p=16f84 ;************************************************************** ;* Pinbelegung ;* ---------------------------------- ;* PORTA: 0 - ;* 1 - ;* 2 - ;* 3 - ;* 4 - ;* PORTB: 0 LCD Display E ;* 1 ;* 2 LCD Display RS ;* 3 LCD Display R/W ;* 4-7 LCD Display D4 .. D7 ;* ;************************************************************** ; ; ; LCD-Display ; ; Taktquelle: 4 MHz ; ;************************************************************** ; Includedatei für den 16F84 einbinden #include <P16F84A.INC> ; Configuration festlegen ; bis 4 MHz: Power on Timer, kein Watchdog, XT-Oscillator __CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC ;************************************************************** ; Variablennamen vergeben loops Equ 0x22 ; Zähler für Warteschleife loops2 Equ 0x23 ; Zähler für Warteschleife Daten Equ 0x24 ;************************************************************** ;Ersetzungen: LcdE equ 0 ; enable Lcd LcdRw equ 3 ; read Lcd LcdRs equ 2 ; Daten Lcd (nicht control) Init: bsf STATUS,RP0; ->Bank 1 movlw B'00000000' movwf TRISB;->PortB: alle outputs bcf STATUS,RP0; ->Bank 0 movwf PORTB;-> alles auf null setzen call InitLcd;-> initialisieren ;Buchstabe einfuegen movlw 'H' bsf PORTB, LcdRs ; auf den Textpuffer schreiben call Datenreinkopieren; Die Daten werden herein kopiert bcf PORTB, LcdRs Main ;Endlosschleife goto Main InitLcd ;auf das Ende des internen Resets warten call Warten call Warten call Warten call Warten call Warten call Warten call Warten call Warten call Warten call Warten call Warten ;Interface auf 8 bit Eingang setzen call Achtbitsetzen call Achtbitsetzen call Achtbitsetzen ;Interface auf 4-bit Eingang setzen call Vierbitsetzen ;Interface als zwei zeilig einstellen call zweizeilig call Display_aus call Displayloeschen call kurser_rechts_shift call Display_ein return Achtbitsetzen; Achtbit-Datenbus einstellen call Aufnullsetzten; alle Ausgaenge von PortB werden auf low setztrn bsf PORTB,5 bsf PORTB,4 call Absenden return Vierbitsetzen; Vierbit-Datenbus einstellen call Aufnullsetzten; alle Ausgaenge von PortB werden auf low setzen bsf PORTB,5 call Absenden return Absenden bsf PORTB,LcdE call Warten call Warten call Warten bcf PORTB,LcdE call Warten return Aufnullsetzten movlw B'00000000' movwf PORTB return Datenreinkopieren call Aufnullsetzten; alle Ausgaenge von PortB werden auf low setzen ;Erster Teil einfuegen (ersten vier Bit) btfsc Daten, 7 bsf PORTB,7 btfsc Daten, 6 bsf PORTB,6 btfsc Daten, 5 bsf PORTB,5 btfsc Daten, 4 bsf PORTB,4 call Absenden call Aufnullsetzten; alle Ausgaenge von PortB werden auf low setzen ;Zweiter Teil einfuegen btfsc Daten, 3 bsf PORTB,7 btfsc Daten, 2 bsf PORTB,6 btfsc Daten, 1 bsf PORTB,5 btfsc Daten, 0 bsf PORTB,4 call Absenden return Displayloeschen movlw B'00000001' movwf Daten call Datenreinkopieren return Display_aus movlw B'00001000' movwf Daten call Datenreinkopieren return Display_ein movlw B'00001100' movwf Daten call Datenreinkopieren return zweizeilig movlw B'00100000' movwf Daten call Datenreinkopieren return kurser_rechts_shift movlw B'00000010' movwf Daten call Datenreinkopieren movlw B'00001111' movwf Daten call Datenreinkopieren return Warten call MSWarten call MSWarten call MSWarten call MSWarten call MSWarten call MSWarten call MSWarten call MSWarten call MSWarten call MSWarten call MSWarten call MSWarten call MSWarten call MSWarten call MSWarten call MSWarten call MSWarten return MSWarten movlw .110 ; Zeitkonstante für 1ms movwf loops2 Wai2 nop nop nop nop nop nop decfsz loops2, F ; 1 ms vorbei? goto Wai2 ; nein, noch nicht return; end
Mit einem Logikprüfer habe ich schon meinen PIC überprüft, es scheint als ob der PIC funktionieren würde. Müssen noch irgendwelche Widerstände zwischen PIC und LCD eingebaut werden? / Oder woran kann so ein Verhalten liegen?
mfg
Sebastian







Zitieren

Lesezeichen