TODOPIC
Simuladores, editores de PCB, etc => Simuladores de circuitos => Proteus ISIS => Mensaje iniciado por: pic_es 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.
-
Revisa bien las conexiones de la lcd y a ser posible sube tu diagrama en proteus y tu codigo...
Suerte!!! :wink:
-
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.
-
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.
-
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.
-
¿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.
-
Hola.
Te lo acabo de mandar por email.
Salu2.
-
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.
-
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.