Páginas

miércoles, 13 de julio de 2016

Conectar una pantalla LCD 16x2 con PSoC5LP y utilizar función sprintf


En este post aprenderás a conectar una pantalla LCD a tu PSoC5LP, no sólo 16x2 sino hasta una 20x4 ya que el procedimiento es exactamente el mismo para cualquier tamaño de LCD. También aprenderás a configurar la función sprinft[1] para imprimir texto con formato en pantalla, esto sería muy útil para mostrar texto acompañado de números decimales en la LCD, por ejemplo para mostrar la lectura de un sensor de temperatura, etc.
Primeramente debes saber que para conectar una LCD con PSoC5LP la datasheet propocionada por Cypress, dice que se deben usar 7 pines secuenciales para lograr usarla correctamente. Esto es un problema ya que no puedes asignar libremente los pines que quieras.
En un foro [2] de Cypress encontramos la solución a este problema e incluso sólo necesitas 6 pines para conectar la LCD.
 Primero deben descargar la librería para la LCD, se encuentra en el foro que se mencionó arriba pero hemos facilitado su descarga y les dejamos el link aqui:

Primeramente crean un proyecto nuevo, para cargar la libreria en la barra de menús se dirigen a Project –> Dependences

Seguidamente en la venta siguiente seleccionan el botón que se muestra en la imagen

Ubiquen donde tengan guardada la librería descargada,es recomendable descomprimir el archivo descargado en su carpeta personal de proyectos para hacer referencia a ella facilmente en futuros proyectos con la LCD.
Ya descomprimido, la carpeta que contiene todo debería llamarse “CharLCDmp_Demo3”. Siendo así el archivo a seleccionar se encuentra en CharLCDmp_Demo3 -> CharLCDmpLib.cylib, el archivo se llama “CharLCDmpLib.cyprj”.
Si les sale una ventana pidiendo confirmaciones adicionales, presionen OK, y de nuevo OK en la ventana siguiente. Con esto ya tendrán cargadas las librerías de la LCD, como se observa en la imagen.
Para cargar el elemento de LCD al diseño esquemático de PSoC, en la lista de componentes pueden encontrarlo en la pestaña Community

El elemento luce de la siguiente forma, para asignarle los pines sólo añadanle unos pines de salida digitales.
Las conexiones de la pantalla LCD se hacen de acuerdo al siguiente esquemático
Los pines LEDp, y LEDn, son los pines A y K de su LCD respectivamente.Estos sirven para iluminar la LCD, si quieren hacer esto conecten K a tierra (GND) y A a 5 volts (VDD).

 Para utilizar la función sprintf, en un foro [3] la comunidad PSoC ha encontrado la solución para poder usarla sin problemas. En pocas palabras la función sprintf imprime en una cadena de caracteres de la misma forma que lo hace la función printf del lenguaje C, esto es muy util ya que permite darle formato al texto antes de imprimirlo en la LCD.

Las soluciones para este problema que se dan en el foro por una empleada de Cypress son las siguientes:

  1. Agregar a la linea de comandos del linker el siguiente código "-u_print_float", sin las comillas.
  2. Agregar la siguiente línea de código al programa principal
asm (".global _scanf_float"); 
 La segunda opción es la mas simple pero si usas la primera aqui te mostramos como se hace.
Primeramente en la barra de menús se dirigen a Project-> Build Settings


Ahora seleccionan Linker -> Command Line, como se muestra en la imagen.

En el menú siguiente,donde dice custom flags ponen:

-u_print_float
Y posteriormente le dan en Ok.

Independientemente cual de las dos solciones utilices se tiene que hacer un último ajuste  para poder utilizar la función sin problemas, se tiene que cambiar el tamaño del Heap a 0x200.
Para cambiar el tamaño del Heap se dirigen a la ventana donde asignan los pines del PSoC y seleccionan la pestaña System
Donde dice Heap Size cambien el valor a 0x200.
Con esto ya debería funcionar a la perfección su LCD y la función sprintf, puedes revisar la datasheet de la LCD y ver las funciones que proporciona para imprimir en pantalla, si no sabes como usar la función sprintf en la primera referencia se explica un poco, aunque puedes indagar más en la web. 
En otros proyectos de este blog estaremos utilizando la LCD con la función sprintf, ahí podrán ver  proyectos utilizando la LCD.
Espero les haya sido de ayuda.



Referencias:

[1] http://www.cplusplus.com/reference/cstdio/sprintf/

[2] http://www.cypress.com/forum/psoc-community-components/character-lcd-mp-multi-port

[3] http://www.cypress.com/forum/psoc-creator-software/sprintf-bug-psoc-creator-3-5lp-and-format-f

3 comentarios:

  1. hola, buenas tardes, me salen 9 errores con la libreria CharLCDmp_Demo3, No drivers on signal "DB7", bit(s) "0". ese es el error q me da, actualice los componentes que es lo q me recomienda pero sigue pasando lo mismo, espero su respuesta muchas gracias. cordiales saludos

    ResponderEliminar
  2. Hola, tengo el mismo problema, alguien sabe como solucionarlo?
    Muchas gracias!

    ResponderEliminar
  3. Igual me sucede a mi, me di cuenta que la librería solo funciona para las versiones 3.x, para las 4.1 y 4.2 no. Alguien que nos pase el archivo actualizado. Gracias

    ResponderEliminar