Autor Tema: Proteus, 16f84 y LCD 16x2  (Leído 10630 veces)

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

Desconectado pic_es

  • PIC10
  • *
  • Mensajes: 41
Proteus, 16f84 y LCD 16x2
« en: 11 de Julio de 2006, 09:46:33 »
Buenas a tod@s.

Soy nuevo en este foro que acabo de descubrir porque me ha surgido un problema.

He estado leyendome casi todas las páginas de este tema y no he encontrado una solución satisfactoria. Vereis, el problema es que simulo con Proteus 6.7 SP3 un circuito muy sencillo con un 16f84, un LCD 16x2 y un led que parpadea cuando se pulsan unos botones. Resulta que el circuito lo simula bien puesto que el led parpadea pero la pantalla no muestra ningún carácter. Al pic le cargo un programa en basic realizado con Microcode Studio.

He de decir que el programa funciona correctamente puesto que el circuito lo he montado y probado físicamente.

¿A alguien le ocurre algo parecido?

Agradecería la ayuda.

Un saludo.
Lo que compartes es eterno lo demas perece.

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Proteus, 16f84 y LCD 16x2
« Respuesta #1 en: 11 de Julio de 2006, 11:50:34 »
Revisa bien las conexiones de la lcd y a ser posible sube tu diagrama en proteus y tu codigo...


Suerte!!! :wink:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado pic_es

  • PIC10
  • *
  • Mensajes: 41
Re: Proteus, 16f84 y LCD 16x2
« Respuesta #2 en: 12 de Julio de 2006, 04:52:16 »
Hola vszener. Gracias por tu rápida respuesta.

La verdad es que lo he revisado varias veces y está correcto. De todas formas adjunto el diagrama el diagrama en Proteus. Realizo una conexión en 4 bits a través del puerto RA, con las líneas de datos del RA0 al RA3.

También he probado con otros LCD's en el Proteus y tampoco me funcionan.

Aquí dejo el código también:

DEFINE LCD_DREG PORTA   'LCD data port
DEFINE LCD_DBIT 0       'LCD data starting bit 0 or 4
DEFINE LCD_RSREG PORTA  'LCD register select port
DEFINE LCD_RSBIT 4      'LCD register select bit
DEFINE LCD_EREG PORTB   'LCD enable port
DEFINE LCD_EBIT 3       'LCD enable bit
DEFINE LCD_BITS 4       'LCD bus size 4 or 8
DEFINE LCD_LINES 2      'Number lines on LCD
DEFINE LCD_COMMANDUS 2000   ' Set command delay time in us
DEFINE LCD_DATAUS 50        ' Set data delay time in us
 
selec var PORTB.0       'selec es el botón
pulsos var byte

    pause 500
    Lcdout $fe, 1       ' Clear LCD screen
    LcdOut $FE, 2       'Principio Primera linea
    LcdOut "***   HOLA   ***"
    LcdOut $FE, $C0     'Principio SEGUNDA linea
    LcdOut "****  MUNDO ****"  'pantalla simple de bienvenida
       
inicio:

loop1:
    if selec=0 then
        pause 200
        goto luces      'si se pulsa selec se va a encender el led
    endif
    goto loop1          'estará chequeando todo el rato hasta que se pulse el botón

luces:
    pause 20
    LcdOut $FE, 2       'primera linea
    LcdOut "**** Salida ****"
    LcdOut $FE, $C0
    LcdOut "*** Activada ***"
    pulsos=50           'numero de pulsos que da el led

luces1:
        High portb.7    ' pone a 1 la salida 7 del portb que será donde se conecta el led
        Pause 100       'TON DEL PULSO
        Low portb.7     ' lo apaga
        Pause 100       'TOFF DEL PULSO
        pulsos=pulsos-1 'decrementa el numero de pulsos que quedan por dar
        if pulsos=0 then
            low portb.7
            LcdOut $FE, 2
            LcdOut "**** Salida ****"
            LcdOut $FE, $C0
            LcdOut "* Desactivada **"
            pause 2000
            Goto inicio 'cuando se acaben el número de pulsos vuelve al principio     
        endif
        goto luces1
END


Espero que podais ayudarme.

Salu2.
Lo que compartes es eterno lo demas perece.

Desconectado fjalex

  • PIC18
  • ****
  • Mensajes: 405
    • Proteus - Hubor
Re: Proteus, 16f84 y LCD 16x2
« Respuesta #3 en: 12 de Julio de 2006, 17:41:04 »
Estimado jnator:

En primer lugar te sugiero que mires en los tutoriales que vienen con proteus el ejemplo de utilización de un lcd de 4 bits. Está en el directorio SAMPLES->Pic 4 bit lcd driver. En él encontrarás, con las fuentes y todo, un ejemplo.

También te sugiero que compruebes varias cosas:
* La dirección de escritura de cada fila del LCD (en el apartado propiedades) y ver si la función lcdout está escribiendo en esas direcciones los mensajes que quieres presentar.
* Normalmente todos los displays hay que inicializarlos con una serie de comandos, que no veo en tu código. Una llamada a una función lcd_init() o algo así.
* El pin R/W lo tienes siempe a GND. Normalmente los lcd necesitan flancos de subida y bajada en este pin para entender las órdenes, aunque no sé si eso es así en todos.

En fin, no sé si te seré de mucha ayuda.

Un saludo.

También puedes dejar un link al fichero de proteus y así lo podemos revisar.

Desconectado pic_es

  • PIC10
  • *
  • Mensajes: 41
Re: Proteus, 16f84 y LCD 16x2
« Respuesta #4 en: 13 de Julio de 2006, 04:04:39 »
Hola.

Gracias por la respuesta fjalex, pero ya comprobé lo de la dirección de escritura y no hace falta inicializar el display , puesto que el programa está en basic (microcode y picbasic pro) y la librería DLL del mismo ya se encarga de ello.

Yo creo que el problema puede estar en Proteus porque, como ya he dicho, he montado este circuito físicamente y he grabado el PIC con el mismo programa que le estoy pasando al proteus, y el circuito funciona a la perfección.

Y tengo puesto el R/W a masa (en el circuito físico).

Además la configuración del esquema la saqué de los ejemplos de proteus,  con lo que no creo que esté mal.

Si con esto tan sencillo tengo estos problemas, qué será cuando quiera complicarlo un poco  :shock: . En fin, seguiré probando. Agradezco de verdad todas las ideas que me podais dar.

Un saludo.
Lo que compartes es eterno lo demas perece.

Desconectado fjalex

  • PIC18
  • ****
  • Mensajes: 405
    • Proteus - Hubor
Re: Proteus, 16f84 y LCD 16x2
« Respuesta #5 en: 13 de Julio de 2006, 07:41:31 »
¿Por qué no mandas en un zip el fichero del proteus y el código que ejecutas y trato de echarle un vistazo? A lo peor no encontramos nada, pero a lo mejor aparece algo.

Desconectado pic_es

  • PIC10
  • *
  • Mensajes: 41
Re: Proteus, 16f84 y LCD 16x2
« Respuesta #6 en: 13 de Julio de 2006, 10:57:15 »
Hola.

Te lo acabo de mandar por email.

Salu2.
Lo que compartes es eterno lo demas perece.

Desconectado _jnator_

  • PIC10
  • *
  • Mensajes: 1
Re: Proteus, 16f84 y LCD 16x2
« Respuesta #7 en: 17 de Julio de 2006, 08:08:40 »
Hola a tod@s.

Ya he solucionado el problema. Sólo hay que colocar una resistencia de pull-up de 47K que vaya de la alimentación a la línea RS. Por lo menos con mi programa para 16F84 funciona correctamente.

Salu2.

Desconectado fjalex

  • PIC18
  • ****
  • Mensajes: 405
    • Proteus - Hubor
Re: Proteus, 16f84 y LCD 16x2
« Respuesta #8 en: 17 de Julio de 2006, 10:12:42 »
Felicidades por encontrar el problema. Efectivamente, en muchos mensajes de este forum, ya se comentó que RA4 es una salida de colector abierto.

A veces lo obvio está delante de nuestros ojos y no lo vemos. :mrgreen:

Me alegro de que todo haya funcionado y que la simulación esté bien.

Un saludo.