Translate

domingo, 4 de enero de 2009

Usando un LCD

Al programa anterior le vendría bien mostrar el valor del ADC sin usar un PC, para ello podemos usar un LCD de 16x2.


Para este fin será necesario usar la libreria xlcd.h,  esta se encarga de mostrar los textos por nosotros. Esta librería posee varias funciones, pero nosotros nos enfocaremos especifcamente en 3 de ellas: openXLCD(); putrsXLCD(); putsXLCD;


Antes de empezar a usar esta función es necesario hacer unos cambios a la librería, pero antes debemos pasarla a nuestra carpeta de proyecto.


Lo primero sera copiar la librería que se encuentra en Directorio_de_instalación\MCC18\h\xlcd.h a nuestra carpeta en mi caso será E:\Microchip Solutions\Proyectoblog\h\xlcd.h.


Después de eso copiaremos los archivos fuente de la libreria que se encuentran en Directorio_de_instalación\MCC18\src\extended\pmc\XLCD\*.c  a la carpeta de nuestro proyecto en nuestro caso será E:\Microchip Solutions\Proyectoblog\src\XLCD\ Nos aseguramos de copiar todos los archivos *.c a nuestra carpeta de proyecto.


Esto se hace para respaldar la libreria original y realizar modificaciones sin moderación alguna en nuestro proyecto, así evitamos daños a la librería original.


Posteriormente debemos configurar nuestro proyecto para que compile desde nuestra ruta la librería recien copiada. Para ello accedemos a Menú Project--->Build Option-->Project y se abrira la siguiente ventana:



Daremos click en la opción Show directories for  y posteriormente en Include search path:



Eliminaremos el path default y añadimos uno nuevo con nuestra ruta.

Posteriormente vamos añadir las fuentes de la librería, esto lo hacemos dando click derecho sobre la carpeta de y click en add:



Y seleccionaremos todos los archivos en ..\src\XLCD\  Por último añadimos el Header xlcd.h con el mismo procedimiento.


Ahora que ya tenemos preparado el entorno de trabajo lo primero que vamos a hacer es modificar la libreria para poder usar el LCD en el PORTD a 4 bits para eso abrimos el archivo xlcd.h  dando doble click. Una vez abierto es muy sencillo ya que esta completamente comentado los modos de trabajo asi que para nuestro ejemplo el archivo queda de la siguiente forma. Ubicamos esta porcion de codigo en la librería:



En este caso la librería ya fue editada para que trabaje como deseamos, pero es tan transparente que es bastante sencillo poder modificarla para llevarla a otro puerto del PIC.


Una vez que hemos modificado nuestra librería a nuestro gusto podemos empezar a programar. La idea es mostrar un mensaje incial, despues presionar el boton y mostrar el valor del ADC tanto serialmente como en el lcd, podemos basarnos en el siguiente codigo:



Como podemos apreciar en el código las funciones de la librería xlcd.h  que mas usamos fueron: openXLCD(); putrsXLCD(); putsXLCD;


openXLCD(); Sirve para incializar el LCD con los argumentos de 4bits y el tamaño de cada caracter. Una vez que se llama esta función es necesario añadir 3 pausas para inicializar el LCD, estas pausas estan debajo del alias de nuestro botón.


putrsXLCD(); Sirve para poner una cadena de texto desde la memoria de nuestro programa.


putsXLCD; Sirve para poner una cadena de texto desde la memoria de datos, estas dos funciones se implementaron en una funciçon que cree para poder usar el mismo comando sin atascar la memoria del PIC con la función writeLCD.


El circuito propuesto para este programa es el siguiente:



Y el video de la simulación:


8 comentarios:

  1. Hola, es de las pocas paginas que encuentro el uso de las librerias en C asi que gracias, pero tengo una duda, cuando defines la funcion cmdLCD escribes numeros, y en el comentario lo explicas para regresar a home, saltar a la sig linea, etc. pero de donde sacas esos numeros en el manual de la libreria no lo especifican. ?????

    ResponderEliminar
  2. Hola, es verdad no aclare ese punto. El procedimiento cmdLCD solo acepta numeros, que equivalen a los comandos más comúnes de un LCD con controlador HITACHI, estos comandos son declarados en la libreria del LCD xlcd.h . Estos estan debajo de las lineas donde defines los puertos a usar.

    Ver Imagen aqui

    Espero esto acalre tu duda. Saludos

    ResponderEliminar
  3. Que tal navaismo. felicidades por tu blog. Oye me estoy adentrando en esto de la programacion de pics con c18 y hasta ahorita todo bien con la ayuda de tu blog. solo queria ver si me pudieras ayudar con algunas dudas que tengo(estoy trabajando con el pic18f452).

    1. necesito dos canales del adc para hacer dos conversiones. puedo usar las ,mismas librerias del ADC para hacerlo?

    2. Debo hacer una operación que involucra una potencia, el problema es obtener el valor de A:
    (A= 200 * 10^y) donde "y" es un valor obtenido de adc:
    y =(((adc*0.0048)-0.9)/0.6). debo declarar a "A" como float?. Estoy pensando en ocupar la funcion:
    POW x^y pero creo que "y" no debe ser decimal para ocuparla. Como puedo comprobar que el resultado es correcto, lo puedo mostrar en la LCD o por la terminal serial?

    Bueno esto es todo navaismo de antemano muchas gracias y ojala pudieras ayudarme con este asunto.

    Saludos. Y cuidense de la influenza porcina.

    ResponderEliminar
  4. A la primer duda: Si puedes usar las mismas libreias de conversion AD, cambiando el ultimo valor de OPENADC para setear correctamente el registro ADCON1. Y para hacer la conversion puedes usar SetChanADC(canal); Y solo cambias el canal ADC_CH0 y ADC_CH1 o los que uses.

    A la segunda duda A puede entera si solo deseas trabajr con enteros en tu lectura AD y si no Float es una opcion, para la potencia debe ser entero el exponente y para lograrlo puedes multiplicar tus decimales por 10000 para trabajar en modo entero y despues poner el punto donde va, tal como en la conversion AD de la temperatura.

    ResponderEliminar
  5. Ya esta, creo que todo salio bien.
    gracias por tu ayuda navaismo.

    saludos

    ResponderEliminar
  6. Solo felicitarte por este curso, estoy siguiendo el curso desde piklab, el C18 trabajando desde wine, y un 18f4520 trabajando a 12 Mhz en vez de los 20 Mhz de tu equipo, (que me ha dado algunos problemas al inicializar el LCD), un curso muy completo y ameno.
    Muchas gracias

    Fernan

    ResponderEliminar
  7. Hola navaismo...muy interesante tu blog...estaba tratando de utilizar la libreria de xlcd y me encuentro con un error de redeclaracion. Te dejo el error para que veas que sucede y si puedes me das una ayudita...

    C:\ejemplo\h\XLCD\putrxlcd.c:16:Error [1109] type mismatch in redeclaration of 'putrsXLCD'

    ResponderEliminar
  8. Hola , excelente blog he emepleado dos de tus post y me sacaron de un rollo en la programacion con C18,, lastima que lo cierras ,,, tienes talento.. gracias

    ResponderEliminar