Hola a toda la comunidad, en primer lugar agradecerles por todo lo que postean y toda la ayuda que brindan.
El problema que tengo es con un programa para displayar un mensaje en un LCD, lo simulé en proteus y todo OK, luego lo monté en un protoboard, luego en una placa y nada, parece que el LCD no inicializa porque con o sin PIC moviendo el contraste pues aparece la primera linea toda oscura, he revisado los pines y si está bien la parte electrica, parece que tengo un problema en la parte de programación, he probado con 2 pic y el resultado es el mismo, así que no puede ser un pic dañado. Les voy a adjuntar el codigo del archivo asm para que me puedan ayudar y decirme cual o cuales pueden ser los errores que estoy cometiendo:
Gracias de antemano por su ayuda; porsiacaso los puertos están descritos en el programa
Saludos
El problema que tengo es con un programa para displayar un mensaje en un LCD, lo simulé en proteus y todo OK, luego lo monté en un protoboard, luego en una placa y nada, parece que el LCD no inicializa porque con o sin PIC moviendo el contraste pues aparece la primera linea toda oscura, he revisado los pines y si está bien la parte electrica, parece que tengo un problema en la parte de programación, he probado con 2 pic y el resultado es el mismo, así que no puede ser un pic dañado. Les voy a adjuntar el codigo del archivo asm para que me puedan ayudar y decirme cual o cuales pueden ser los errores que estoy cometiendo:
Gracias de antemano por su ayuda; porsiacaso los puertos están descritos en el programa
Saludos
Código:
list P = 16F877
#include"p16F877.inc"
#include"lcd_1.inc"
__config 3F31h
;EN ESTE PUNTO HACER UNA PEQUEÑA APLICACION DE UTILIZACION DE MACROS
;*******************************************
; 4 BIT LCD interface with PIC16F877A
; only port D is implemented
; RD7-RD4 = DB7-DB4 ; RD3=E ; RD0=RS
;
;*******************************************
BIT_E EQU 3
BIT_RW EQU 2
BIT_RS EQU 0
CBLOCK 0X0C ;es 0c
TEMP
V_DLY
V_DLY1
PDel0
PDel1
ENDC
org 00 ;start of program at
goto START
org 05
START
bsf STATUS,RP0 ;sellect bank 1
movlw b'00000000'
movwf TRISD ;set as output
bcf STATUS,RP0 ;select bank 0
clrf PORTD
CALL INITLCD ;initialize LCD SIS 4 BIT NO CULSOR
MOVLW 0x41 ;H;Write to DDRAM which is displayed in LCD, DDRAM already sellected at initialization
CALL LCDWRITE
MOVLW "O"
CALL LCDWRITE
MOVLW "L"
CALL LCDWRITE
MOVLW "A"
CALL LCDWRITE
MOVLW " "
CALL LCDWRITE
MOVLW 'M'
CALL LCDWRITE
MOVLW "U"
CALL LCDWRITE
MOVLW "M"
CALL LCDWRITE
MOVLW "D"
CALL LCDWRITE
MOVLW "O"
CALL LCDWRITE
MOVLW " "
CALL LCDWRITE
MOVLW " "
CALL LCDWRITE
loop goto loop
;----------AREA DE LAS SUBRRUTINAS--------------------------
LCDWRITE ;Writes data/character in W register to sellected CG/DD RAM,
; see its use in START routine
MOVWF TEMP
CALL DEL_5mS
MOVF TEMP,W
ANDLW B'11110000'
IORLW B'00001001' ;BIT_E=1,BIT_RW=0,BIT_RS=1
MOVWF PORTD
BCF PORTD,BIT_E ;1 CYCLE COMPLETE
CALL DEL_5mS
SWAPF TEMP,W ;SWAP NIBBLES AND STORE IN W REGISTER
ANDLW B'11110000'
IORLW B'00001001' ;BIT_E=1,BIT_RW=0,BIT_RS=1
MOVWF PORTD
BCF PORTD,BIT_E ;2 CYCLE COMPLETE
CALL DEL_5mS
RETURN
;________________________________________________________________________________
INITLCD ;INITIALIZE LCD
call DEL_5mS
call DEL_5mS
call DEL_5mS
call DEL_5mS
call DEL_5mS
MOVLW B'00001000' ;Display Clear 1fr
MOVWF PORTD
BCF PORTD,BIT_E ;2 CYCLE
CALL DEL_5mS ;RETARDO DE 5mS
MOVLW B'00011000' ; Display Clear 2nd
MOVWF PORTD
BCF PORTD,BIT_E ;1 CYCLY
CALL DEL_5mS
CALL DEL_5mS
MOVLW B'00101000' ;Funcion a modo de 4 Bit
MOVWF PORTD
BCF PORTD,BIT_E ; BIT_E = LOW NIBEL CERO
CALL DEL_5mS ;RETARDO DE 5mS
MOVLW B'00000001' ; Display mode set
MOVWF PORTD
BCF PORTD,BIT_E ; BIT_E = LOW NIBEL CERO
CALL DEL_5mS ;RETARDO DE 5mS
MOVLW B'00101000' ; Display mode set es
MOVWF PORTD
BCF PORTD,BIT_E ; BIT_E = LOW NIBEL CERO
CALL DEL_5mS ;RETARDO DE 5mS
MOVLW B'00001000' ; 1 linea display ON es
MOVWF PORTD
BCF PORTD,BIT_E ;BIT_E=LOW
CALL DEL_5mS ;RETARDO DE 5mS
MOVLW B'00001000' ;Display ON OFF Function
MOVWF PORTD
BCF PORTD,BIT_E
CALL DEL_5mS
MOVLW B'11001000' ;Display ON Curson ON Blink ON
MOVWF PORTD
BCF PORTD,BIT_E ;1 CYCLE COMPLETE
CALL DEL_5mS
MOVLW B'00001000' ;Display Clear 1fr
MOVWF PORTD
BCF PORTD,BIT_E ;2 CYCLE
CALL DEL_5mS ;RETARDO DE 5mS
MOVLW B'00011000' ; Display Clear 2nd
MOVWF PORTD
BCF PORTD,BIT_E ;1 CYCLY
CALL DEL_5mS
CALL DEL_5mS
MOVLW B'00001000' ;Entry Mode SET
MOVWF PORTD ;AND BIT_E=1,BIT_RW=0,BIT_RS=0
BCF PORTD,BIT_E ;2 CYCLE
CALL DEL_5mS ;CLEAR DISPLAY AND HOME CURSOR
MOVLW B'01101000' ;Increment Mode Shift OFF
MOVWF PORTD
BCF PORTD,BIT_E
CALL DEL_5mS
;; MOVLW B'00011000'
;; MOVWF PORTD
;; CALL DEL_5mS
;; BCF PORTD,BIT_E
;; CALL DEL_5mS ;RETARDO DE 5mS -ENTRY SET -
;;
;; MOVLW B'00001000' ; BIT_E=1,BIT_RW=0,BIT_RS=0
;; MOVWF PORTD
;; CALL DEL_5mS
;; BCF PORTD,BIT_E ;1 CYCLE
;; CALL DEL_5mS
;;
;; MOVLW B'01101000' ;ENTRY SET - INCREMENT,NO DISP SHIFT(CUR SHIFT)
;; MOVWF PORTD ;BIT_E=1,BIT_RW=0,BIT_RS=0
;; CALL DEL_5mS
;; BCF PORTD,BIT_E ;2 CYCLE
;; CALL DEL_5mS ;RETARDO DE 5mS -ENTRY SET -
;;
;;
RETURN
;-------------------------------------------------------------
; Code generated by PDEL ver 1.0 on 05/03/2007 at 07:18:03 p.m.
; Description: Waits 5000 cycles
;-------------------------------------------------------------
DEL_5mS movlw .250 ; 1 set number of repetitions (B) es 6
movwf PDel0 ; 1 |
PLoop1 movlw .207 ; 1 set number of repetitions (A) es 207
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel1, 1 ; 1 + (1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (B)
goto PLoop1 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2 clrwdt ; 1 cycle delay
return ; 2+2 Done
;-------------------------------------------------------------
END