• Sábado 4 de Mayo de 2024, 19:39

Autor Tema:  Lcd Y Pic16f873a  (Leído 3616 veces)

Alterego77

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Lcd Y Pic16f873a
« en: Viernes 29 de Junio de 2007, 19:37 »
0
Hola a todos, alguien puede decirme cual es el error que estoy cometiendo en el código para el manejo de un lcd con el pic16f873a?.

Tengo las rutinas para manejar el LCD con el pic 16f84a y funciona perfectamente pero cuando aplico el mismo código con el pic16f873a no funciona, la pantalla solo muestra la primera linea llena de cuadritos negros.

Bueno, de antemano agradezco su atención y toda la ayuda que puedan darme.

Este es el código que estoy manejando:

LCD01.asm

   list   p=16f873a

   INCLUDE "PIC16F873A.INC"    ; Directivas del pic

   CBLOCK 0x20
    DATO_TMP
   ENDC

   org   0x00
   goto   inicio
   org   0x05
   
inicio
   call   inicializa
   call   lcd_configura

principal
   call   BORRAR_LCD
   call   CURSOR_P_LINEA1
   movlw   Mensaje1
   call   msj_mensaje
   sleep

mensaje
   addwf   PCL,F
Mensaje1
   dt   "Hola",0x00

   INCLUDE "RETARDOS_AL_OK.INC"  ; Rutinas de retardos
   INCLUDE "LCD_LIB_OK.INC" ; Rutinas para el manejo de LCD
   INCLUDE "MSJS.INC" ; Rutina para transmitir mensaje
   end
_______________________________________________________________

LCD_LIB_OK.INC

   #DEFINE   PinRs   TRISA,0
   #DEFINE   PinRw   TRISA,1
   #DEFINE   PinE   TRISA,2

inicializa
   BSF      STATUS,5   ;seleccion del banco 1
   BCF      PinRs      ;configuracion de los pines
   BCF      PinRw      ;RS,RW,E como salidas
   BCF      PinE
   CLRF   TRISB
   BCF      STATUS,5     ;seleccion del banco

   BCF   PinRs       ;activa modo comando
   BCF   PinRw      ;operacion de lectura si RW esta conectado
   BCF   PinE      ;deshabilita lcd

   CALL   Retardo_20ms
   MOVLW   B'00110000'
   CALL   ESCRIBE_LCD
   CALL   Retardo_5ms
   MOVLW   B'00110000'
   CALL   ESCRIBE_LCD
   CALL   Retardo_200us
   MOVLW   B'00110000'
   CALL   ESCRIBE_LCD
   MOVLW   B'00100000'
   CALL   ESCRIBE_LCD
   
   RETURN

lcd_configura
   CALL      ENTRY_MODE
   CALL      DISPLAY_CONTROL
   CALL      DISPLAY_CURSOS
   CALL      FUNCTION_SET
   CALL      CURSOR_P_LINEA1
   
   RETURN

ENTRY_MODE
   MOVLW   B'00000111'
   GOTO   TX_COMANDO
DISPLAY_CONTROL
   MOVLW   B'00001000'
   GOTO   TX_COMANDO
DISPLAY_CURSOS
   MOVLW   B'00011100'
   GOTO   TX_COMANDO
FUNCTION_SET
   MOVLW   B'00101000'
   GOTO   TX_COMANDO
BORRAR_LCD
   MOVLW   B'00000001'
   GOTO   TX_COMANDO
CURSOR_P_LINEA1
   MOVLW   B'10000000'
   GOTO   TX_COMANDO
CURSOR_P_LINEA2
   MOVLW   B'11000000'
   GOTO   TX_COMANDO

ESCRIBE_LCD
   ANDLW   B'11110000' ;ENMASCARA PARTE ALTA DEL DATO A TX
   MOVWF   PORTB
   BSF      PinE
   BCF      PinE
   RETURN

TX_COMANDO
   BCF      PinRs
   GOTO   TX_DATOS
TX_CARACTER
   BSF      PinRs
TX_DATOS
   MOVWF   DATO_TMP
   CALL   ESCRIBE_LCD ;ENVIA PARTE ALTA DEL DATO
   SWAPF   DATO_TMP,0 ;EL DATO SE ALMACENA EN W
   CALL   ESCRIBE_LCD ;ENVIA PARTE BAJA DEL DATO
   BTFSS   PinRs
   CALL   Retardo_2ms
   CALL   Retardo_50us
   RETURN

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Lcd Y Pic16f873a
« Respuesta #1 en: Viernes 29 de Junio de 2007, 21:47 »
0
Hola! Si te fijas la hoja de datos del micro, verás que por defecto (luego de un reset) todos los pines con la opción de entrada analógica (AD) están habilitadas; es decir que hay que configurar al menos un registro del conversor analógico-digital, por más que no lo uses.
Te dejo que veas en la hoja de datos, ya lo encontrarás... creo que por ese lado viene tu problema.

Saludos

pic-man

  • Miembro activo
  • **
  • Mensajes: 54
    • Ver Perfil
    • http://micropic.wordpress.com
Re: Lcd Y Pic16f873a
« Respuesta #2 en: Sábado 30 de Junio de 2007, 04:03 »
0
como dice Huguen_aus_Tirol, todos los pines del puerto A en el pic 16f87x por defecto están configurados como entradas analógicas, en la hoja de datos se especifica eso, para hacer los pines del puerto A entradas y salidas digitales debes cargar un 0x06 en el registro ADCON1

Alterego77

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Lcd Y Pic16f873a
« Respuesta #3 en: Sábado 30 de Junio de 2007, 18:38 »
0
Hola, gracias por sus respuestas. Les comento que me puse en la tarea de leer la documentación del pic y después de muchas pruebas y pruebas y horas y horas, no he logrado hacerlo funcionar, configuré el ADC y nada de nada sigo sin obtener resultados.

el código que adicioné al principio del programa  es:

   bsf      STATUS,RP0   ;Selecciona banco 1
   movlw   b'00000110'   ;Pines de puerto A digitales
   movwf   ADCON1
   clrf   TRISA      ;Configura puerto A como salida
   bcf      STATUS,RP0   ;Selecciona banco 0

bueno, dejo todo el código en el zip con la esperanza de obtener una solución. Ya he intentado hacerlo funcionar de muchas maneras.

Repito que el código que anexo funciona con el pic16f84a. pero necesito que funcione con el pic16f873a

N. El modo de conexión del lcd es 4bit a la parte alta del puerto B, RS y E (lcd) a A0 y A1 respectivamente (lcd_lib_ok.inc)

El pic16f873a utiliza un XT de 4MHz.

Bueno, eso es todo y nuevamente muchas gracias por toda la ayuda que puedan darme.

saludos
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.