Autor Tema: Ayuda no me funciona ejercicio LCD 4x20 con 16f877a  (Leído 4026 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Sacahe

  • PIC12
  • **
  • Mensajes: 68
Ayuda no me funciona ejercicio LCD 4x20 con 16f877a
« en: 05 de Abril de 2010, 01:23:21 »
Amigos necesito de su colaboracion. Estoy realizando un ejercicio con un LCD y un Pic16f877a y no se me desplega en el LCD nada de nada. Ya que lo estoy simulando en Proteus. Les comento que estoy utilizando el PuertoD del pic que va conectado al bus del LCD, los pines REO y RE1 como salidas de control de E y RS respectivamente. He tratado de diversas formas y no me funciona. Les dejo el Programa en ASM para que porfa me ayuden, ya he gastado mucho tiempo buscando el problema.

   INCLUDE "P16F877A.INC"
__CONFIG _XT_OSC & _CP_OFF & _PWRTE_ON & _WDT_OFF & _BODEN_ON & _WRT_OFF & _LVP_OFF & _CPD_OFF & _DEBUG_OFF
      

REG0      EQU      H'22'
CONTA      EQU      H'23'


RESET      ORG      H'00'
         GOTO   INICIO
         ORG      H'05'

;****************************
TABLA_1      ADDWF   PCL,1
         RETLW   " "
         RETLW   "S"
         RETLW   "A"
         RETLW   "M"
         RETLW   "U"
         RETLW   "E"
         RETLW   "L"
         RETLW   " "
         RETLW   "D"
         RETLW   "A"
         RETLW   "V"
         RETLW   "I"
         RETLW   "D"
;***********************************************************************
PANTALLAZO1   CLRF   CONTA
OTRA      MOVF   CONTA,0
         CALL   TABLA_1
         CALL   DATO
         CALL   RET_LCD   
         INCF   CONTA,1         ;SIGUE CON LA TABLA_1
         MOVLW   D'13'
         XORWF   CONTA,0      
         BTFSS   STATUS,2      ;TERMINO MENSAJE?
         GOTO   OTRA         ;NO
         RETURN               ;SI   
;***********************************************************************
COMANDO      MOVWF   PORTD         ;COLOCA EL COMANDO EN EL BUS DE 8BITS
         BCF      PORTE,1         ;RS=0 --> ES UN COMANDO
         GOTO   HABILITADOR
DATO      MOVWF   PORTD         ;COLOCA EL CARACTER DEL MENSAJE EN EL BUS DE 8BITS
         BSF      PORTE,1         ;RS=1 --> ES DATO DEL MENSAJE
HABILITADOR   BSF      PORTE,0         ;E=1 ---> LCD HABILITADO
         CALL   RET_LCD
         BCF      PORTE,0         ;E=0 ---> LCD DESABILITADO
         RETURN
;***********************************************************************
INI_LCD      MOVLW   B'00000001'      ;LIMPIAR PANTALLA LCD Y REGRESA CURSOR AL INICIO
         CALL   COMANDO         ;
         RETURN
;***********************************************************************
RET_LCD      MOVLW   H'FF'         ;RETARDO DEL LCD
         MOVWF   REG0         ;
LOOP      DECFSZ   REG0,1         ;
         GOTO   LOOP         ;
         RETURN   
;***********************************************************************
INICIO      CLRF   PORTD
         CLRF   PORTE
         BANKSEL   TRISD         ;SELECCIONAMOS BANCO 1   
         CLRF   TRISD         ;CONFIGURAMOS PUERTOD COMO SALIDA
         CLRF   TRISE         ;CONFIGURAMOS PUERTOE COMO SALIDA      
         BANKSEL   PORTD         ;;SELECCIONAMOS BANCO O

;**************** CONFIGURACION DE TRABAJO DEL LCD *******************
LCD_CONFIG   MOVLW   B'00111000'      ;INTERFACE 8 BITS, 4 LINEAS   
         CALL   COMANDO
         MOVLW   B'00000110'      ;INCREMENTA CURSOR, MENSAJE FIJO
         CALL   COMANDO
         MOVLW   B'00001101'      ;DISPLAY ON, CURSOR ON Y PARPADEO CURSOR ON   
         CALL   COMANDO

;***********************************************************************
         CALL   INI_LCD
         CALL   PANTALLAZO1
               
ACA         NOP   
         GOTO   ACA         
      
;*******************************      

         END

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ayuda no me funciona ejercicio LCD 4x20 con 16f877a
« Respuesta #1 en: 05 de Abril de 2010, 01:30:40 »
Falta la inicialización del LCD, debes enviar el comando 0x30, esperar 5ms y repetir esto 3 veces, luego de eso fijar sistema y bus de datos a 8 bits.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Sacahe

  • PIC12
  • **
  • Mensajes: 68
Re: Ayuda no me funciona ejercicio LCD 4x20 con 16f877a
« Respuesta #2 en: 07 de Abril de 2010, 18:49:43 »
SUKI gracias por tu ayuda pero no me funciona. hice tal como me dijistes y nada:

                         LIST   P=16F877A
                         INCLUDE "P16F877A.INC"
                         __CONFIG _XT_OSC & _CP_OFF & _PWRTE_ON & _WDT_OFF & _BODEN_ON & _WRT_OFF & _LVP_OFF & _CPD_OFF & _DEBUG_OFF
      

REG0                 EQU            H'22'
REG1                 EQU            H'24'   
CONTA               EQU            H'23'


RESET               ORG            H'00'
                        GOTO          INICIO
                        ORG            H'05'

;****************************
TABLA_1           ADDWF        PCL,1
                        RETLW         " "
                        RETLW         "S"
                        RETLW         "A"
                        RETLW         "M"
                        RETLW         "U"
                        RETLW         "E"
                        RETLW         "L"
                        RETLW         " "
                        RETLW         "D"
                        RETLW         "A"
                        RETLW         "V"
                        RETLW         "I"
                        RETLW         "D"
;***********************************************************************
PANTALLAZO1   CLRF            CONTA
OTRA                MOVF           CONTA,0
                        CALL            TABLA_1
                        CALL            DATO
                        CALL            RET_LCD   
                        INCF            CONTA,1                        ;SIGUE CON LA TABLA_1
                        MOVLW         D'13'
                        XORWF         CONTA,0      
                        BTFSS          STATUS,2                       ;TERMINO MENSAJE?
                        GOTO           OTRA                             ;NO
                        RETURN                                             ;SI   
;***********************************************************************
COMANDO         MOVWF        PORTD                            ;COLOCA EL COMANDO EN EL BUS DE 8BITS
                        BCF             PORTE,1                          ;RS=0 --> ES UN COMANDO
                        GOTO          HABILITADOR
DATO                MOVWF        PORTD                            ;COLOCA EL CARACTER DEL MENSAJE EN EL BUS DE 8BITS
                        BSF              PORTE,1                         ;RS=1 --> ES DATO DEL MENSAJE
HABILITADOR    BSF             PORTE,0                          ;E=1 ---> LCD HABILITADO
                        CALL            RET_LCD
                        BCF              PORTE,0                         ;E=0 ---> LCD DESABILITADO
                        RETURN
;***********************************************************************
INI_LCD            MOVLW         B'00000001'      ;LIMPIAR PANTALLA LCD Y REGRESA CURSOR AL INICIO
                        CALL             COMANDO         ;
                        RETURN
;***********************************************************************
RET_LCD           MOVLW         H'FF'         ;RETARDO DEL LCD
                        MOVWF         REG0         ;
LOOP                DECFSZ        REG0,1         ;
                        GOTO           LOOP         ;
                        RETURN   
;***********************************************************************
RETARDO          MOVLW         .5             ;El REG0 contiene el numero
                        MOVWF         REG0           ; de milisegundos del retardo
LOOP3               MOVLW         .110           ;
                        MOVWF         REG1           ;
LOOP4               NOP                ;
                        NOP                  ;
                        NOP                  ;   
                        NOP                  ;
                        NOP                  ;
                        NOP                     ;
                        DECFSZ        REG1,1            ;
                        GOTO           LOOP4          ;
                        DECFSZ        REG0,1          ;   
                        GOTO           LOOP3          ;
                        RETURN
;***********************************************************************
INICIO              CLRF            PORTD
                        CLRF            PORTE
                        BANKSEL      TRISD         ;SELECCIONAMOS BANCO 1   
                        CLRF            TRISD         ;CONFIGURAMOS PUERTOD COMO SALIDA
                        CLRF            TRISE         ;CONFIGURAMOS PUERTOE COMO SALIDA      
                        BANKSEL      PORTD         ;;SELECCIONAMOS BANCO O


                        MOVLW         0x30
                        CALL            COMANDO
                        CALL             RETARDO
                        MOVLW         H'30'
                        CALL            COMANDO
                        CALL            RETARDO
                        MOVLW         H'30'
                        CALL            COMANDO
                        CALL            RETARDO
                        MOVLW         H'30'
                        CALL            COMANDO
                        CALL            RETARDO

;**************** CONFIGURACION DE TRABAJO DEL LCD *******************
LCD_CONFIG     MOVLW        B'00111000'      ;INTERFACE 8 BITS, 4 LINEAS   
                        CALL            COMANDO
                        MOVLW        B'00000110'      ;INCREMENTA CURSOR, MENSAJE FIJO
                        CALL            COMANDO
                        MOVLW         B'00001101'      ;DISPLAY ON, CURSOR ON Y PARPADEO CURSOR ON   
                        CALL             COMANDO

;***********************************************************************
                        CALL            INI_LCD
                        CALL            PANTALLAZO1
               
ACA                  NOP   
                        GOTO           ACA         
      
;*******************************      

                        END

Desconectado Sacahe

  • PIC12
  • **
  • Mensajes: 68
Re: Ayuda no me funciona ejercicio LCD 4x20 con 16f877a
« Respuesta #3 en: 07 de Abril de 2010, 19:18:29 »
Simulando el programa desde el mplab me doy cuenta que los pines de control de me funcionan, es decir, que RE0 y RE1 no me estan funcionando, no saca nada. Ahora pregunto: para configurar el puerto E como salida me hace falta algo?

Desconectado mariano_pic

  • PIC18
  • ****
  • Mensajes: 498
    • Software Electronica Microncontroladores
Re: Ayuda no me funciona ejercicio LCD 4x20 con 16f877a
« Respuesta #4 en: 07 de Abril de 2010, 20:59:54 »
Acabo de responder este tema en http://www.todopic.com.ar/foros/index.php?topic=30197.0;topicseen, no puede ser que hagan la misma pregunta dos veses  :(
Necesitas ayuda para tu proyecto electronico?
buscame, tal ves pueda colaborarte.
Blog: http://electronicosembebidos.blogspot.com.co/
mail: electronicosembebidos@gmail.com
Mi grupo de facebook: https://www.facebook.com/groups/ProgramandoPics/

Desconectado Sacahe

  • PIC12
  • **
  • Mensajes: 68
Re: Ayuda no me funciona ejercicio LCD 4x20 con 16f877a
« Respuesta #5 en: 07 de Abril de 2010, 21:20:34 »
Hola Mariano, te comento que no son la misma pregunta, porque mi primera inquietud surgio porque no lograba desplegar el mensaje en un LCD 4x20 (simulado), debido a que los pines de control (RE0 y RE1) del puertoE no me estaban funcionando, no los tenia bien configurados gracias al ADCON1. La otra inquietud que puse en el post http://www.todopic.com.ar/foros/index.php?topic=30197.0;topicseen es diferente y tiene que ver con un LCD 4x24 donde si hice el montaje, si me desplega el mesaje, pero no como quisiera.

Desconectado mariano_pic

  • PIC18
  • ****
  • Mensajes: 498
    • Software Electronica Microncontroladores
Re: Ayuda no me funciona ejercicio LCD 4x20 con 16f877a
« Respuesta #6 en: 07 de Abril de 2010, 21:33:20 »
ok, pero no se puede negar la similitud  :mrgreen:
Necesitas ayuda para tu proyecto electronico?
buscame, tal ves pueda colaborarte.
Blog: http://electronicosembebidos.blogspot.com.co/
mail: electronicosembebidos@gmail.com
Mi grupo de facebook: https://www.facebook.com/groups/ProgramandoPics/

Desconectado maoper11

  • PIC10
  • *
  • Mensajes: 1
Re: Ayuda no me funciona ejercicio LCD 4x20 con 16f877a
« Respuesta #7 en: 21 de Septiembre de 2011, 15:20:18 »
Bueno este post es un poco antiguo pero para mi el problema era el RETARDO LCD.

RET_LCD      MOVLW   H'FF'         ;RETARDO DEL LCD
         MOVWF   REG0         ;
LOOP      DECFSZ   REG0,1         ;
         GOTO   LOOP         ;
         RETURN   

cambialo por esto


RET_LCD      MOVLW   H'FF'         ;RETARDO DEL LCD
         MOVWF   REG0         ;
LOOP      DECFSZ   REG0       ; ;estabas decrementando un bit y no todo el byte, luego el retardo era demasiado corto.
         GOTO   LOOP         ;
         RETURN   


Saludos

MaoPeR11

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ayuda no me funciona ejercicio LCD 4x20 con 16f877a
« Respuesta #8 en: 21 de Septiembre de 2011, 15:35:05 »
Hola maoper11.

Hay que leer bien el Instruction Set...

DECFSZ no soporta especificar bit. Solo soporta posicion de memoria a decrementar(7 bits de longitud) y destino ( WREG o la posicion de memoria misma).
Por lo tanto, el segundo parámetro es el que decide el destino y puede aceptar sólo dos valores: 0(WREG) o 1(FILE). También suele utilizarse las definiciones W(0) o F(1) para especificarlo.

En definitiva, estaba bien esa parte. En tu correción omitis el destino, por lo que el MPASM seguramente genere una advertencia y asuma que el destino es 1(F o FILE).

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.


 

anything