Autor Tema: Error en programa para LCD  (Leído 6154 veces)

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

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Error en programa para LCD
« en: 08 de Octubre de 2009, 14:03:45 »
Hola chicos y chicas, tengo un problema con un programa para sacar un mensaje por el LCD y despues de muchos intentos no encuentro los errores, podriais decirme porque tengo duplicados los registros.

   LIST      P=16F877A
               INCLUDE      <P16F877A.INC>
               INCLUDE      <Rutina_5ms.inc>


   #define OFF_COMANDO      bcf PORTA,0                     ;Desactiva RS.
   #define   DISABLE         bcf   PORTA,2                     ;Desactiva señal E.
   #define LEER         bsf   PORTA,1                     ;Pone LCD en modo lectura.
   #define ENABLE         bsf   PORTA,2                     ;Activa señal E.
   #define ESCRIBIR      bcf   PORTA,1                     ;Pone LCD en modo escritura.
   #define ON_COMANDO      bsf   PORTA,0                     ;Activa RS.
;
;------------------------------------------------------------------------------------------------------------
; VARIABLES
;------------------------------------------------------------------------------------------------------------
;
               CBLOCK         H'20'
               cantms                              ;Variable para Rutina_5ms
               cursor                              ;Variable para Rutina_LCD.
               curdisp                              ;Variable para Rutina_LCD.
               poeslcd                              ;Variable para Rutina_LCD.
               ENDC
;
RESET            ORG            0X00
               GOTO         INICIO

               ORG            0X05                  ;Salva vector de interrupcion.

INICIO            bsf            STATUS,5               ;Cambio al banco 1
               bcf            STATUS,6
               clrf         TRISB                  ;RB se programa como salida.
               movlw         b'00000110'               ;RA<4:3> se programan como entradas.
               movwf         ADCON1                  ;RA<2:0> se programan como salidas.
               movlw         b'00011000'               ;Puerta A E\S digitales
               movwf         TRISA   
               bcf            STATUS,5               ;Cambio al banco 0                                 
               OFF_COMANDO                           ;Desactiva RS del modulo LCD.
               DISABLE                              ;Desactiva E del modulo LCD.

LCD_INI              movlw           b'00111000'
                    call            LCD_REG                     ;Codigo de instruccion
                    call            Rutina_5ms                  ;Temporiza 5 mS.
                    movlw           b'00111000'
                    call            LCD_REG                     ;Codigo de instruccion
                    call            Rutina_5ms                  ;Temporiza 5 mS.
                    movlw           b'00111000'
                    call            LCD_REG                     ;Codigo de instruccion
                    call            Rutina_5ms                  ;Temporiza 5 mS.
                    RETURN

B_DISPLAY         movlw         b'00000001'
               call         LCD_REG
               RETURN

LCD_REG            OFF_COMANDO                           ;Desactiva RS (Modo instruccion).
               movwf         PORTB                  ;Saca el codigo de instruccion.
               call         LCD_BUSY

LCD_E            ENABLE                                      ;Activa señal E.
               nop                                       ;Espera 1us.
               DISABLE                                    ;Desactiva señal E.
               RETURN

LCD_BUSY         LEER                              ;Pone el LCD en modo lectura.                           
                      bsf              STATUS,5                    ;Selecciona el Banco 1
                      movlw           0xFF 
                    movwf           PORTB                       ;Puerta B actua de entrada
                    bcf             STATUS,5                    ;Selecciona el Banco 0
                    ENABLE                                      ;Activa el LCD (Señal E)
                    nop         
L_BUSY              btfsc           PORTB,7                     ;Chequea el bit BUSY
                    goto            L_BUSY                      ;Est  a "1" (Ocupado)
                    DISABLE                                     ;Desactiva el LCD (Se¤al E)
                    bsf             STATUS,5                    ;Selecciona el Banco 1
                    clrf            PORTB                       ;Puerta B actua como salida
                    bcf             STATUS,5                    ;Selecciona el Banco 0
                    ESCRIBIR                                    ;Pone el LCD en modo escritura
               RETURN

               movlw         b'00000110'               ;Cargamos en cursor la config. deseada.
MOV_DESP         movwf         cursor
               call         LCD_REG
               RETURN

               movlw         b'00001100'               ;Cargamos en curdisp la config. deseada.
CUR_DISP         movwf         curdisp
               call         LCD_REG
               RETURN

               movlw         b'10000000'            ;Cargamos en poeslcd la config. deseada.
POES_LCD         movwf         poeslcd
               call         LCD_REG
               RETURN

LCD_DATO         OFF_COMANDO                           ;Desactiva RS (Modo instruccion)
               movwf         PORTB                  ;Valor ASCII a sacar por PB.
               call         LCD_BUSY               ;Espera a que se libere el LCD.
               ON_COMANDO                           ;Activa RS (Modo dato).
               goto         LCD_E                  ;Genera pulso en señal E.

PRINCIPAL         movlw         DATOS1
               call         LCD_DATO

;------------------------------------------------------------------------------------------------------------
;MENSAJES
;------------------------------------------------------------------------------------------------------------

DATOS1            addwf         PCL,1
               retlw         ' '
               retlw         'A'
               retlw         'J'
               retlw         'U'
               retlw         'S'
               retlw         'T'
               retlw         'E'
               retlw         ' '
               retlw         'I'
               retlw         'N'
               retlw         'I'
               retlw         'C'
               retlw         'I'
               retlw         'A'
               retlw         'L'
               retlw         ' '
               retlw         0x00
               
               call         LCD_DATO

               END
               
Aqui los errors

Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F877A "Alarma.asm" /l"Alarma.lst" /e"Alarma.err" /d__DEBUG=1
Error[118]   D:\PROYECTOS\PROYECTO1\ALARMA.ASM 25 : Overwriting previous address contents (0000)
Error[118]   D:\PROYECTOS\PROYECTO1\ALARMA.ASM 25 : Overwriting previous address contents (0000)
Error[118]   D:\PROYECTOS\PROYECTO1\ALARMA.ASM 29 : Overwriting previous address contents (0005)
Error[118]   D:\PROYECTOS\PROYECTO1\ALARMA.ASM 29 : Overwriting previous address contents (0005)
Error[118]   D:\PROYECTOS\PROYECTO1\ALARMA.ASM 30 : Overwriting previous address contents (0006)
Error[118]   D:\PROYECTOS\PROYECTO1\ALARMA.ASM 30 : Overwriting previous address contents (0006)
Message[302] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 31 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Error[118]   D:\PROYECTOS\PROYECTO1\ALARMA.ASM 31 : Overwriting previous address contents (0007)
Error[118]   D:\PROYECTOS\PROYECTO1\ALARMA.ASM 31 : Overwriting previous address contents (0007)
Error[118]   D:\PROYECTOS\PROYECTO1\ALARMA.ASM 32 : Overwriting previous address contents (0008)
Error[118]   D:\PROYECTOS\PROYECTO1\ALARMA.ASM 32 : Overwriting previous address contents (0008)
Message[302] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 33 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Error[118]   D:\PROYECTOS\PROYECTO1\ALARMA.ASM 33 : Overwriting previous address contents (0009)
Error[118]   D:\PROYECTOS\PROYECTO1\ALARMA.ASM 33 : Overwriting previous address contents (0009)
Error[118]   D:\PROYECTOS\PROYECTO1\ALARMA.ASM 34 : Overwriting previous address contents (000A)
Error[118]   D:\PROYECTOS\PROYECTO1\ALARMA.ASM 34 : Overwriting previous address contents (000A)
Message[302] D:\PROYECTOS\PROYECTO1\ALARMA.ASM 35 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Halting build on first failure as requested.
----------------------------------------------------------------------
Debug build of project `D:\PROYECTOS\Proyecto1\Alarma.mcp' failed.
Language tool versions: MPASMWIN.exe v5.33, mplink.exe v4.33
Preprocessor symbol `__DEBUG' is defined.
Thu Oct 08 18:42:54 2009
----------------------------------------------------------------------
BUILD FAILED

Gracias.

Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado martincnc

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 352
Re: Error en programa para LCD
« Respuesta #1 en: 08 de Octubre de 2009, 16:34:51 »
Hola Miquel_S.

Te comento que compile tu proyecto y no me dio ningun error, eso si, tuve que sacar <Rutina_5ms.inc> porque no tengo una rutina de retardo armada. Por eso se me ocurre que se podrian estar superponiendo los registros de esta rutina y los del programa principal pero no puedo asegurarlo ya que nunca me ha pasado.

Bueno, espero que encuentres la solucion a tu problema, Saludos!

Desconectado fidodido18

  • PIC18
  • ****
  • Mensajes: 312
Re: Error en programa para LCD
« Respuesta #2 en: 08 de Octubre de 2009, 16:49:01 »
es interesante que quieras hacer tu propia libreria de arranque de lcd, pero te recomiendo que busques otras librerias y mires lo que pasa en ellas, tengo un poco abandonado el lenguaje ensamblador (C me ha facilitado las cosas y me ha vuelto algo flojo... eso de pasar de un banco a otro! viejos recuerdos jajaja).

No te imaginas cuanto nos simplifica la vida las librerias!! si estan disponibles USALAS!

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Error en programa para LCD
« Respuesta #3 en: 08 de Octubre de 2009, 19:13:42 »
.

En la documentación de Microchip encontré esta explicación para el error 118:
"Code was previously generated for this adress"
(Ya se generó código para esta dirección, mas o menos).
Por eso, y por lo que dice martincnc, creería que estás poniendo la directiva ORG 0x00 en el archivo Rutina_5ms.inc.
Si así fuera, te sugiero borrar la línea y poner el include luego de ORG 0x05 en el programa principal.
¡Espero estar en lo cierto y que mi intromisión sirva de algo! Saludos.



When you see a good move, look for a better one (Emanuel Lasker)

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Error en programa para LCD
« Respuesta #4 en: 09 de Octubre de 2009, 06:08:22 »
Gracias a todos por la ayuda, efectivamente mtristan el problema era este, cambie el include de sitio y se resolvio el problema. Creia que se podia hacer como en el lenguaje C que las declaras al principio.
Saludos
Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Error en programa para LCD
« Respuesta #5 en: 09 de Octubre de 2009, 19:00:24 »
Hola de nuevo, sigo liado con la LCD al no poder simularla en proteus ya que me queda siempre a 1 el bit 7 del PB, se que el motivo de dicho fallo es que hay que meter una rutina de temporizacion pero no se donde (lo vi en el foro pero la he buscado y no la encuentro) lo siento, alguien puede echarme una mano.

Os dejo los archivos por si el fallo fuese del programa.
Muchas gracias.
Saludos.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Error en programa para LCD
« Respuesta #6 en: 10 de Octubre de 2009, 20:27:38 »
.


.. No se si esa sea la forma de usar tablas para enviar tu mensaje al LCD. Yo haría algo como:
Código: [Seleccionar]
     CLRF       CONTADOR
msj1
     MOVF       CONTADOR,W   ;Un registro contador declarado previamente
     CALL       MENSAJE1
     BTFSC      STATUS,Z     ;Cuando MENSAJE1 devuelva 0x00
     GOTO       $+4          ;sale del lazo
     CALL       LCD_DATO
     INCF       CONTADOR,F
     GOTO       msj1

When you see a good move, look for a better one (Emanuel Lasker)

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Error en programa para LCD
« Respuesta #7 en: 11 de Octubre de 2009, 15:10:36 »
Hola mtristan gracias por tu respuesta, pero el problema esta en la simulacion, ya que he probado otros programas que usan lcd los cuales funcionan correctamente y tampoco se simulan. Como comente antes para que la simulacion funcione en proteus hay que meter unas demoras, perooo no me acuerdo de los tiempos ni donde ponerlas, y no las encuentro. (Soy asi de burro  :mrgreen: :mrgreen:)

Saludos.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Error en programa para LCD
« Respuesta #8 en: 11 de Octubre de 2009, 15:25:25 »
En proteus no se simula la bandera del LCD que indica si esta disponible, para ello se debe cambiar este testeo por una demora de 60us.


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

Desconectado fidodido18

  • PIC18
  • ****
  • Mensajes: 312
Re: Error en programa para LCD
« Respuesta #9 en: 12 de Octubre de 2009, 15:51:21 »
En proteus no se simula la bandera del LCD que indica si esta disponible, para ello se debe cambiar este testeo por una demora de 60us.


Saludos!

Nojoda suky tu a que te dedicas!! te la sabes todas!! jajajaja

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Error en programa para LCD
« Respuesta #10 en: 12 de Octubre de 2009, 17:12:19 »
Gracias Suky por tu respuesta, probe lo de temporizacion y el programa llega hasta el final cosa que antes no hacia,  pero no se visualiza en el LCD ningun mensaje. Eso me da a entender que tengo algun fallo en el programa aunque se me compile bien, voy a revisar el programa y ya dire cosas.

Saludos.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Error en programa para LCD
« Respuesta #11 en: 12 de Octubre de 2009, 19:03:39 »
Hola de nuevo estoy desesperado, he intentado simular un lcd con Pic Simulator Ide y no hay manera.
1º  El programa funciona en la realidad.
2º  No se que valor poner en el Setup LCD Module Busy Delays, he probado el valor por defecto, con 40us,con 60us y nada.
Donde estoy fallando?

PD: No puedo estar grabando y borrando el pic cada vez hasta conseguir lo que quiero,  necesito simular antes de grabar.

Saludos de nuevo.
Miquel_S

Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Error en programa para LCD
« Respuesta #12 en: 12 de Octubre de 2009, 19:08:54 »
Coloca el código que estas utilizando hasta el momento (Entre [ code=asm ][ /code ] para que sea mas entendible)  ;-)


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

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Error en programa para LCD
« Respuesta #13 en: 12 de Octubre de 2009, 19:20:53 »
Gracias Suky estoy haciendo las prubas con tu programa que tienes en dicho enlace:
 
 http://www.todopic.com.ar/foros/index.php?topic=24720.0

Control del LCD.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Error en programa para LCD
« Respuesta #14 en: 12 de Octubre de 2009, 19:28:42 »
Perdona Suky me he dejado parte del mensaje sin responder:
Estoy simulando tu programa porque doy por seguro que funciona, de esta manera cuuando simule el mio sabre si es que no lo se simular o si es fallo del programa.  :mrgreen:
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.


 

anything