Proyecto con PIC. Uso de display LCD

Buenas a todos.

Os comento mi situación y os pido vuestra ayuda pues me encuentro atrancando y no se como salir del atasco.

Estoy realizando un proyecto con un microcontrolador PIC16F876A. El primer paso de dicho proyecto es que debo mostrar en un display LCD de 16x2 (display común) el porcentaje del estado de carga de una batería. Es decir, debo utilizar una de las entradas analógicas del PIC para convertirla a digital mediante el conversar A/D, pasar dicho valor a porcentaje con respecto al voltaje máximo de la batería y, por último, mostrarlo en el display.

Pues bien, he realizado el proyecto a mi modo y así es como lo he hecho:

EXPLICACIÓN

He utilizado una Li-Po de 7.2V, pero este circuito ha de servir para cualquier tipo de batería.

Lo primero que he hecho ha sido medir la tensión de la batería en carga máxima y descargada obteniendo un valor máximo de 8.45V y uno mínimo de 6.5V. La diferencia entre carga máxima y descarga es de 1.95V.

Se ha de saber el valor de las resistencias que se van a usar en el divisor de tensión, determinado por la batería elegida (7,2V – 1000mA/h). Se va a hacer un pequeño circuito que irá conectado de la batería a la patilla AN0 de nuestro PIC. Para medir el nivel de la batería se coloca un divisor resistivo, puesto que el conversor ADC del PIC tiene un rango de 0 a 5V, y la batería será en cualquier caso de 7V o más.

Fijando como nivel máximo de voltaje que va a recibir el conversor ADC en 4V, obtengo que las resistencias tienen que ser de 4k7 (se han realizado las pertinentes cálculos mediante ecuaciones), de tal forma que una vez probemos el circuito se obtendrá en el LCD un valor máximo y uno mínimo de tensión. Para obtener el porcentaje se utilizará una regla de 3 de esta manera:

nivel = [(resultado_A/D – valor_mínimo) · 100] / diferencia

Para simular la carga y descarga de la batería en PROTEUS he utilizado un potenciómetro.

*Nota: en el código la fórmula ya tiene valores pues la he aproximado.


Para programar he utilizado MPLABX de Microchip y el compilador XC8 y para el esquemático y la simulación he utilizado ISIS de PROTEUS.

La librería para el uso de la pantalla LCD no es mía, tan solo he modificado la parte inicial para ajustarla a mi proyecto.

Os adjunto la librería, el código principal y el esquemático. Si no podéis leer bien a qué patillas he conectado los terminales del LCD decírmelo y os lo pongo por aquí.

A ver si podéis averiguar donde está el fallo. Llevo 3 días rompiéndome la cabeza. Gracias de antemano.
 

Adjuntos

  • Librería LCD.pdf
    42.7 KB · Visitas: 25
  • Código.pdf
    43.1 KB · Visitas: 27
  • Captura.JPG
    Captura.JPG
    90.7 KB · Visitas: 55
Ahh disculpad que eso no lo he mencionado y es lo mas importante...

Pues el código se compila sin errores, sólo los típicos warnings...

El problema es en simulación. El display LCD se enciende y veo como llegan datos a través de las patillas D4-D7 que utilizo como datos de entrada pero en el LCD no aparece absolutamente nada. Es decir, el voltaje llega correcto al PIC a través del divisor resistivo y del PIC salen datos que llegan al LCD a través de las patillas que os he mencionado. Pero en el display no se muestra ningún valor. No se muestra nada.

Ese es el problema. Gracias.
 
Pues no lo he ajustado pero creo que leí por algún foro en un tutorial que no era necesario para la simulación. No creo que esté ahí el fallo. Me inclino más por pensar que ha sido en la declaración de registros para el uso del conversor A/D o en la utilización de la librería de LCD. Aun así me gustaría probar lo del contraste. Creo que es con un potenciómetro pero ¿Cuál es exactamente la conexión? Gracias
 
Bueno amigos,

ya he descubierto cual era el fallo. Ahora si consigo ver datos en el LCD (tan sólo tenía que conectar el terminal Rw del display a masa ¬¬). No son los que esperaba pero bueno jeje, por lo menos he solucionado lo más grave. Seguiré a ver si consigo obtener lo que quiero por pantalla. Si no lo consigo igual sigo dando el follón un poco por aquí. Gracias a todos por la ayuda. Un saludo.
 
Atrás
Arriba