Componente – Módulo LCD_I2C PCF8574AT PSoC5LP

Todos conocemos ya, por proyectos escritos en este blog anteriormente que existe un módulo compatible con PSoC5LP el cual maneja una interfaz de comunicaciones I2C para controlar una LCD de hasta 20 columnas y 4 filas y que es muy útil a la hora de pensar en un proyecto en el cual se quieran ahorrar pines, puesto que para la comunicación I2C solamente se hace uso de 2 pines del microcontrolador y dos de alimentación (VCC, GND, SDA y SCL). En aquel tutorial se vio como incluir de manera fácil unos archivos modificados para poder hacerla Funcionar. Esta vez y gracias al desarrollo del colaborador de PSoC Latinoamérica Carlos Díaz, tenemos para ustedes un componente desarrollado para PSoC Creator y compatible con PSoC 4 y PSoC 5LP, el cual funciona como cualquier otro bloque de arrastrar y configurar. Antes de iniciar con el tutorial, vamos a dejar algo de información sobre el módulo.

 Módulo LCD I2C PCF8574AT

 

Resultado de imagen para PCF8574AT

Módulo PCF8574AT

pcf8574at

Módulo PCF8574AT

Básicamente el PCF8574 es un expansor de entradas y salidas digitales por bus I2C. Puede conectarse a un microcontrolador cualquiera para controlar más dispositivos (en este caso una LCD) empleando menos pines.

La comunicación se realiza a través del bus I2C, por lo que es sencillo obtener los datos medidos. Dispone de 3 pines de dirección (A0, A1 y A2), lo que da 8 posibles conectados al mismo bus I2C. Por tanto, es posible controlar 64 dispositivos usando únicamente 2 pines.

Lo más importante para nuestra aplicación es conocer la dirección que tiene el módulo como esclavo, esta dirección se obtiene del datasheet, el cual puede ser consultado a continuación.

En nuestro caso, el módulo a utilizar tiene dirección 0x3F.

 

Módulo PCF8574AT y PSoC5LP

Lo primero que haremos será descargar la librería a través del siguiente repositorio de GitHub:

https://github.com/BrayanBermudez/LCD_I2C_Component

github

 

Al descargar y descomprimir el archivo .ZIP obtenido se tendrán los siguientes archivos:

 

archivos_descargados

Con esto, comenzaremos a construir el programa para PSoC :

Crearemos un proyecto nuevo para el microcontrolador CY8C5888LTI-LP097 correspondiente al KIT PSoC5LP CY8CKIT-059 Prototyping y allí se añadirá la librería

esquematico_en_blanco

 

Para añadir la librería se hará lo que se ha hecho en proyectos anteriores, primero damos clic en Project y vamos a Dependencies

project_dependencies

En la ventana que se abre daremos clic en el icono que se parece a una carpeta:

dependencias

Allí iremos hasta la raíz de la carpeta que hemos descargado de github y seleccionaremos el archivo que se llama LCD_I2C

archivo_lib

En la siguiente ventana aplicamos los cambios dando clic en OK.

 

Si se ha hecho de manera correcta el procedimiento nos daremos cuenta que en la parte donde aparecen todos los componentes se ha creado una nueva pestaña que lleva como nombre Community y ella está la categoría Display que a su vez contiene el componente creado que lleva por nombre LCD_I2C[v0.2]

componente_psoc

 

Arrastramos el componente al esquemático para proceder a su configuración

componente_esquematico

Para la configuración vamos a cambiar algunos parámetros y explicaré uno por uno de que se trata:

configuracion_componente

Lo primero que cambiaré será el nombre del componente y lo pondre simplemente a LCD_I2C , los parámetros siguientes son referentes  las características de la LCD que vamos a utilizar y a su respectiva dirección:

ADDRESS : Este parámetro corresponde a la dirección de esclavo que tiene el modulo PCF8574AT, que por defecto es 0x3F, si se esta utilizando una variante del modulo PCF8574 hay que conocer bien su dirección.

CHAR_SIZE: Hace referencia a la extensión del char utilizado por la librería y por defecto viene en 0, así lo dejaremos.

COLUMNS: Esta es la cantidad de columnas que tiene la LCD que vamos a usar, en este caso serán 20.

I2C_INTERFACE: Este es el nombre del bloque de comunicación I2C, hay que tener en cuenta que hay que usar una comunicación serial y por lo tanto tendremos que usar un bloque I2C, aquí se pondrá el nombre de dicho bloque I2C.

ROWS: Es la cantidad de filas de la LCD , en este caso son 4.

 

Hay que resaltar que este módulo es capaz de controlar LCD de hasta 20 columnas y 4 filas, que es la que vamos a probar en este tutorial. También volver a resaltar que es muy importante que se conozca tanto la dirección de esclavo del módulo I2C como el nombre de la interfaz i2C, que añadiremos y configuraremos en este instante.

Vamos a la ventana de componentes y de allí arrastraremos al esquemático una interfaz I2C_Master (Fixed Function)

i2c_interface

 

Procedemos a la configuración del bloque:

configuracion_i2c

 

Únicamente lo que hay que configurar es cambiar el nombre de la interfaz a solamente I2C, esto con el fin de que sea el mismo nombre que dejamos en la configuración del bloque de la LCD I2C. Se aplican los cambios y así dejaremos el diagrama esquemático:

esquematico

 

Por ahora lo que sigue es realizar la asignación de pines para así poder compilar y que salgan las ayudas del código correspondientes. La asignación de pines la hacemos de la siguiente manera:

 

asignacion_pines

los únicos dos pines a asignar son los correspondientes a los que en la tarjeta vienen marcados como SDA y SCL respectivamente, esos son los que utilizaremos.

psoc_pinout

 

Ahora procedemos a escribir el código, este estará totalmente comentado para ser explicado:

 

 

De este código lo único que vamos a resaltar son las tres líneas con las que se controla la LCD, las cuales son:

Esta línea es utilizada para la inicialización del componente, no puede faltar en el proyecto o no funcionará.

 

Esta línea es utilizada para darle la ubicación de impresión a la LCD, el primer numero hace referencia a la columna en la cual se quiere imprimir, el segundo numero a fila respectiva, de esta manera se controla la impresión en toda la LCD.

 

Por último se procede a escribir en la LCD, se hace con la línea de código anteriormente mencionada.

 

Nota: Hay que tener en cuenta que la LCD solamente trabaja con variables de tipo caracter, es decir, por si sola no es capaz de imprimir variables de tipo entero o float. Para poder usar estas variables hay que hacerles un tratamiento de conversión de int o float a caracter con la ayuda de la función sprintf, y para poder utilizar sprintf hay que hacer algunos cambios en el proyecto, estos cambios ya se han explicado en varios de los proyectos anteriores en este blog y si eres seguidor sabrás exactamente lo que hay que hacer.

 

Por último solo hay que compilar y verificar que no hay ningún error.

 

Ahora procederemos a hacer las conexiones físicas en protoboard:

 

 

Hardware

fritzing_part

(Abrir en nueva pestaña para ver la imagen con mejor resolución).

 

Como les dije anteriormente de aquí lo más relevante es colocar bien las conexiones del módulo I2C, su respectiva alimentación y el cableado de la comunicación I2C.

 

Así de sencillo es tener en funcionamiento una LCD de hasta 20×4 con un módulo I2C utilizando solamente 2 pines del PSoC. Solamente resta programar el microcontrolador.

 

Resultados

 

20180213_172123

 

20180213_172108

 

Por último dejo un video para todos los que quieran un poco más de información sobre como utilizar el módulo:

Y los archivos del proyecto:

 

Gracias por leer, todos los comentarios son bienvenidos,

Brayan Andrés Bermúdez B.

PSoC Latinoamérica.

 

Brayan Bermudez

Ingeniero en Telecomunicaciones, Aficionado a la Electrónica, comunicaciones y sistemas informáticos en general.