Autor Tema: Por favor ayuda con Modulo LCD  (Leído 2707 veces)

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

Desconectado facundo_bellesi

  • PIC10
  • *
  • Mensajes: 14
Por favor ayuda con Modulo LCD
« en: 26 de Mayo de 2008, 18:07:15 »
Hola amigos, necesito ayuda con un modulo LCD...

Antes que nada, busque en el buscador del foro y he encontrado bastante pero he llegado a un punto que no se que puedo hacer ya...

Estoy programando un PIC 16F877A para mostrar mensajes por una pantalla LCD (entre otras cosas) y el problema que tengo s que no consigo que me muestre nada, lo mas probable es que no le esté mandando bien las señales para que funcione. Les cuento que estoy programando en Assembler, con el MPLAB y que el Modulo es el "LCD Module CCM 1620"...

La idea es la siguiente, entra una interrupcion por RB0 y en la rutina de servicio me muestra el mensaje "INGRESAR CLAVE", nada mas... El problema es que ingresa a la rutina de servicio (lo se porque hice que me encienda un led indicador) pero no me muestra nada en el LCD... No es dificil pero no se si es que estoy usando mal las señales de control del modulo o que sera pero ya no se que mas hacer...

Aca les copio el programita por si alguien me puede ayudar...

;..........................................................................................
                              LIST      P=16F877A
                              RADIX   HEX
;..........................................................................................
PCL      EQU         0x02         ;D
STATUS      EQU         0x03         ;E
PORTA      EQU         0x05         ;F
PORTB      EQU         0x06         ;I
PORTC      EQU         0x07         ;N
PORTD      EQU         0x08         ;I
PORTE      EQU         0x09         ;C
OPTIONR      EQU         0x81         ;I
TRISA      EQU         0x85         ;O
TRISB      EQU         0x86         ;N
TRISC      EQU         0x87         ;
PIR1                          EQU         0X0C         ;
PIR2      EQU         0X0D         ;
TRISD      EQU         0x88         ;D
TRISE      EQU         0x89         ;E
INTCON      EQU         0x0B         ;
PIE1      EQU         0X8C         ;
PIE2      EQU         0X8D         ;
ADCON1      EQU         0x9F         ;
CUENTA      EQU         0x20         ;V
BANDERA1                   EQU         0x2D         ;
BANDERA2                   EQU         0x2E         ;
BANDERA3                   EQU         0x2F         ;
RETARDO_1   EQU         0x30         ;
RETARDO_2   EQU         0x31         ;
RETARDO_3   EQU         0x32         ;
;..........................................................................................
      ORG   0x00         ;Vector de Reset
      GOTO   INICIO         ;Va a inicio
;..........................................................................................
;                            SUBRUTINA DE SERVICIO
;..........................................................................................
      ORG   0x04      ;Vector de interrupcion
      GOTO   INTERRUP      ;Va a la subrutina INTERRUP
;..........................................................................................
INTERRUP                   BTFSS   INTCON,1      ;¿Fue interrupciòn?
      RETFIE      ;No, retorna y habilita las interrupciones globales
      BCF   INTCON,7   ;deshabilita las interrupciones hasta que atienda la que entro
      BTFSC   PORTC,7         ;¿Se quiere ingresar una clave?
      GOTO   PRENDE         ;Si, va a INGRESAR
      BCF   INTCON,1      ;Borrar la bandera de interrupción
      BCF   INTCON,0
      BSF   INTCON,7      ;habilita las interrupciones
      RETFIE                                   ;Retornar y habilitar las interrupciones globales
         
NO_MENU      BCF   INTCON,1      ;Borra la bandera de interrupciones
      BSF   INTCON,7      ;
      RETFIE         ;Retornar y habilitar las interrupciones globales
;..........................................................................................
INICIO      CLRF      BANDERA1      ;
      CLRF      BANDERA2      ;
      CLRF      BANDERA3      ;
      CLRF      CUENTA      ;
      CLRF      PORTA      ;
      CLRF      PORTB      ;
      CLRF      PORTC      ;
      CLRF      PORTD      ;
      CLRF      PORTE      ;
      CLRF      PIE1
      CLRF      PIE2
      CLRF      PIR1
      CLRF      PIR2
      BCF      STATUS,6      ;Bit RP1 del registro estado
      BSF      STATUS,5      ;Selecciona el banco 1
      CLRF      TRISA      ;Puerto A como salida   
      CLRF      TRISD      ;Puerto D como salida
      MOVLW      0x06      ;Mueve el literal 06 a W
      MOVWF      ADCON1      ;Puerto E como entrada/salida digital
      CLRF      TRISE      ;Puerto E como salida
      MOVLW      0xFF      ;Mueve el literal FF a W
      MOVWF      TRISC      ;Puerto C como entrada
      MOVLW      0x0F      ;Mueve el literal E0 a W
      MOVWF      TRISB      ;Puerto B como entrada/salida
      MOVLW      0xC0      ;Mueve el literal 40 a W
      MOVWF      OPTIONR      ;Configuro el registro option
      BCF      STATUS,5      ;Selecciona el banco 0
      MOVLW      0x98      ;
      MOVWF      INTCON      ;
      BSF      PORTA,2      ;Señal de control
      BSF      PORTA,3      ;Señal de control
      CLRF      PORTD      ;
      CALL      INI_LCD      ;Configura el modulo LCD
            

DORMIR      SLEEP            ;Modo bajo consumo
      GOTO      DORMIR      ;Va a DORMIR
;..........................................................................................
INI_LCD      BCF      PORTE,2                   ;Deshabilita el LCD
      BCF      PORTE,1                   ;Desactiva RS (modo instrucción)
      CALL      RUTINA_15ms   ;Espera 15ms. para que se resetee sin problemas
      MOVLW      b'00111000'   ;Display de 8 bits, 2 lineas, matriz de 5x7
      CALL      LCD_INSTRUC   ;Llama a ENABLE_LCD
      MOVLW      b'00000110'   ;Dirección de movimiento del cursor: AUMENTA y la exhibición no se cambia de puesto
      CALL      LCD_INSTRUC   ;Llama a ENABLE_LCD
      MOVLW      b'00001100'   ;Activa el display, desactiva el cursor y desactiva el destello del cursor
      CALL      LCD_INSTRUC   ;Llama a ENABLE_LCD
      MOVLW      b'00000001'   ;Borra el display
      CALL      LCD_INSTRUC   ;Llama a ENABLE_LCD
      RETURN            ;

;***********************************************************************
LCD_INSTRUC   MOVWF      PORTD      ;
      BSF      PORTE,2      ;
      CALL      RUTINA_1ms   ;
      CALL      RUTINA_1ms   ;
      CALL      RUTINA_1ms   ;
      CALL      RUTINA_1ms   ;
      BCF      PORTE,2      ;
      RETURN            ;
;**********************************************************************
LCD_DATO   BCF      PORTE,1      ;Desactiva RS (Modo Instrucción)
      MOVWF      PORTD      ;
      BSF      PORTE,1      ;Activa RS (Modo Dato)
      BSF      PORTE,0
      BSF      PORTE,2      ;Habilita el LCD
      MOVLW      .90      ;
      MOVWF      CUENTA      ;
      DECFSZ      CUENTA,F      ;
      GOTO      $-1      ;
      BCF      PORTE,2      ;
      BCF      PORTE,1      ;
      RETURN
;..........................................................................................
RUTINA_15ms   MOVLW      D'20'
      MOVWF      RETARDO_2
      MOVLW      D'121'
      MOVWF      RETARDO_1
      GOTO      LOOP_1      ;
;..........................................................................................
RUTINA_1ms   MOVLW      D'2'      ;
      MOVWF      RETARDO_2   ;
      MOVLW      D'74'      ;
      MOVWF      RETARDO_1   ;
;..........................................................................................
LOOP_1      DECFSZ      RETARDO_1,1   ;
      GOTO      LOOP_1      ;
      DECFSZ      RETARDO_2,1   ;
      GOTO      LOOP_1      ;
      RETURN            ;
;..........................................................................................
PRENDE      BSF      PORTA,0      ;

MENSAJE_1   MOVLW      0x81      ;
      CALL      LCD_INSTRUC   ;
      MOVLW      'I'      ;
      CALL      LCD_DATO   ;
      MOVLW      'N'      ;
      CALL      LCD_DATO   ;
      MOVLW      'G'      ;
      CALL      LCD_DATO   ;
      MOVLW      'R'      ;
      CALL      LCD_DATO   ;
      MOVLW      'E'      ;
      CALL      LCD_DATO   ;
      MOVLW      'S'      ;
      CALL      LCD_DATO   ;
      MOVLW      'A'      ;
      CALL      LCD_DATO   ;
      MOVLW      'R'      ;
      CALL      LCD_DATO   ;
      MOVLW      ' '      ;
      CALL      LCD_DATO   ;
      MOVLW      'C'      ;
      CALL      LCD_DATO   ;
      MOVLW      'L'      ;
      CALL      LCD_DATO   ;
      MOVLW      'A'      ;
      CALL      LCD_DATO   ;
      MOVLW      'V'      ;
      CALL      LCD_DATO   ;
      MOVLW      'E'      ;
      CALL      LCD_DATO   ;
      MOVLW      ' '      ;
      CALL      LCD_DATO   ;

      GOTO      PRENDE      ;
;..........................................................................................
   END   
La teoría es asesinada tarde o temprano por la experiencia. A. Einstein

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re: Por favor ayuda con Modulo LCD
« Respuesta #1 en: 27 de Mayo de 2008, 08:03:07 »
una solucion tonta... pero a mi me paso  :oops:
acuerdate de poner un pot para el contraste y ajustarlo... yo no lo habia puesto y el mensaje si se mostraba en el lcd, pero yo no lo veia, estuve unos cuantos dias tirandome de los pelos  :mrgreen:
salu2
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado facundo_bellesi

  • PIC10
  • *
  • Mensajes: 14
Re: Por favor ayuda con Modulo LCD
« Respuesta #2 en: 27 de Mayo de 2008, 15:57:01 »
hola marttyn... Gracias por ayudarme...

No era ese el problema ya que revise por las dudas y estaba bien conectado el pin de contraste  :(... Pero igual gracias por ayudarme...
La teoría es asesinada tarde o temprano por la experiencia. A. Einstein

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Por favor ayuda con Modulo LCD
« Respuesta #3 en: 27 de Mayo de 2008, 20:48:33 »
Hola, suponiendo que esta todo bien conectado, intenta haciendo las rutines de demoras mucho mas grandes... hay LCD que son bastante dormilones....

De cualquier manera, hay en el foro rutinas ya probadas....

suerte!

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado facundo_bellesi

  • PIC10
  • *
  • Mensajes: 14
Re: Por favor ayuda con Modulo LCD
« Respuesta #4 en: 27 de Mayo de 2008, 22:39:39 »
Hola Norberto... Gracias por colaborar con mi problema...

Te cuento que ya probe hacer eso (con rutinas de 2 segundos) pero sigo con los problemas... :? :?

Hoy hablando con un profesor en la facultad me dijo que podría tener un problema con la hablitación del Modulo ya que algunos son bastante mañeros con eso, y revisando por n-esima vez la hoja de datos puede tener algo que ver con eso... Voy a probar y despues cuento si se pudo solucionar el tema...

Igualmente muchisimas gracias por sus recomendaciones y las voy a seguir teniendo en cuenta...
La teoría es asesinada tarde o temprano por la experiencia. A. Einstein


 

anything