LCD AVR Pantalla LCD 2×16 con el AVR


Compartir: Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0

LCD AVR, se verá el uso de las pantallas LCD 2×16, sobre este LCD se comentó aquí, en este  caso se verá la utilización de estas pantallas con el microcontrolador AVR, a lo que en este enlace se referirá como LCD AVR, el microcontrolador AVR de prueba será el ATmega88; es muy importante utilizar el LCD AVR para obtener un mayor conocimiento sobre el manejo de los microcontroladores AVR, es una forma sencilla y muy práctica de poder ver en una pantalla como van trabajando los registros del AVR, o como se van actualizando los datos que interesen, con el LCD AVR se puede sacar máximo provecho al microcontrolador AVR, como ya se verá.

😉 Puedes descargarte este contenido en PDF desde aquí.

Ahora de lo que se tratará es sobre como hacer trabajar juntos la pantalla LCD 2×16 con el microcontrolador AVR utilizando el ATMEL STUDIO, se necesitará una librería que será utilizada como un archivo de cabecera, con esta librería se podrá manejar el LCD AVR mediante funciones fáciles de recordar; si se busca en la red se encontrarán muchas librerías, una  de ellas y es la que se usará, es la que se puede encontrar aquí en la opción que dice “LCD library for HD44780 based LCD’s”, esta librería se descarga como un ZIP; como se ve en el enlace también se tienen librerías para el manejo de las comunicaciones seriales I2C y UART que sería muy importante descargar para  futuros usos.

Es de mencionar que el driver descargado solo trabaja para enviar los datos y caracteres al LCD con 4 bits, se puede elegir entre el nible alto o el nible bajo del bus de datos del LCD.

LCD AVR archivosUna vez descargada y descomprimida la librería para el manejo del LCD AVR, se verá que se tienen los archivos que se muestran en la imagen, los archivos necesarios son los que están resaltados, uno es el lcd.c y el otro el lcd.h, estos archivos serán los originales y hay que cuidarlos, en lo posible no modificarlos, lo que se hará serán copias a las cuales si se podrá modificar pero se recomienda solo la parte en la que se le indica el puerto donde se conectará la pantalla LCD AVR, que viene a ser solo una línea de código, se ve en la imagen que también hay un manual que será de mucha utilidad, además los archivos vienen comentados así que no será complicado utilizarlos, se puede ver el manual en línea aquí, el archivo test_lcd es un ejemplo.

Para utilizar estos archivos para el manejo del LCD AVR, en el ATMEL STUDIO es necesario que se sigan los siguientes pasos.

En la paleta del explorador de soluciones sobre la carpeta que tiene el nombre del proyecto creado, en este caso se le ha llamado milcd, hacer click con el botón derecho y en las opciones que aparecen sobre add y luego sobre nueva carpeta como se ve en la siguiente imagen.

LCD AVR agregar carpeta LCD

A la nueva carpeta se le puede dar el nombre que se quiera, en este caso se le ha dado LCD, luego hay que copiar los archivos descargados lcd.h y lcd.c dentro de esta carpeta, para eso se copia los archivos, se hace click derecho sobre la carpeta LCD creada y se le dice pegar, la paleta del explorador de soluciones quedará tal como se ve en la siguiente imagen:

LCD AVR solutione explorer

Luego hacer click derecho sobre el nombre del proyecto, en este caso milcd, y hacer click sobre propiedades, se abrirá una ventana como la que se muestra a continuación, en la pestaña que dice toolchain se hace click sobre directorios, en la opción que dice include paths sobre el icono + en color verde hacer click, se abrirá la ventana add include paths(-I), click sobre el botón de los tres puntos … y allí se busca la ubicación de la carpeta creada donde se agregó los archivos lcd.c y lcd.h que en este caso se le llamo LCD, normalmente aparece en forma automática la ubicación de esta carpeta en la ventana que se abre y solo hay que darle en seleccionar carpeta o hacer doble click sobre la carpeta, en caso contrario hay que buscarla y estará dentro de la carpeta del proyecto creado en el ATMEL STUDIO.

LCD AVR toolchain directorios

En la imagen se observa que en la lista de errores aparece una advertencia que dice “F_CPU not defined…” para evitar eso hay que hacer un paso mas, en toolchain sobre symbols se hace click, luego en defined symbols(-D) sobre + en color verde, en la ventana que sale se escribe la frecuencia a la cual está trabajando el microcontrolador AVR tal como se ve en la siguiente imagen, en este caso la frecuencia es de 1Mhz, F_CPU=1000000UL, ul viene de entero sin signo.

LCD AVR toolchain symbols F_CPU

Realizando los pasos anteriores ya se puede utilizar con toda comodidad el driver descargado para el manejo de las pantallas LCD con el microcontrolador AVR.

LCD AVR Programación en el ATMEL STUDIO

Una vez realizado los pasos comentados líneas arriba, dentro del programa que se está realizando hay que incluir el archivo lcd.h , debajo del archivo de cabecera delay.h de la siguiente manera

#include “lcd.h”

Luego será necesario indicarle al programa cual será el puerto del microcontrolador AVR que se utilizará para la pantalla LCD, por defecto es el puerto C, para cambiarlo, y será la única modificación que se haga, hay que hacer click derecho sobre “lcd.h” y en las opciones que aparecen hacer click sobre Goto implementation, tal como se muestra en la siguiente imagen.

LCD AVR lcd

En la pestaña que se abra, que será la pestaña lcd.h, hay que buscar la opción LCD_PORT, tal como se muestra y está resaltada en la siguiente imagen, se puede ver que se ha modificado la opción por defecto que es PORTA por PORTD, porque será este el puerto que se usará para el ejemplo con el ATmega88, no se harán mas modificaciones, pero si que se pueden hacer, pero cuando se está comenzando es mejor que no, conforme se vaya conociendo mas el driver se podrán hacer todas la modificaciones que se quieran.

LCD AVR cambiar puerto

No modificando nada mas en el driver, las conexiones de los pines de LCD AVR a los pines del puerto del microcontrolador AVR utilizado serán en el siguiente orden, si se desea también se puede modificar, pero por ahora se usaran los que vienen por defecto, en este caso al puerto D si es otro el puerto utilizado el orden es el mismo, solo cambia el nombre el puerto usado.

  • RS al pin PD4
  • RW al pin PD5
  • E al pin PD6
  • Data4 al pin PD0
  • Data5 al pin PD1
  • Data6 al pin PD2
  • Data7 al pin PD3

Las conexiones entre la pantalla LCD y el ATmega88 serán como se muestra en la siguiente imagen:

LCD AVR circuito ejmplo

Para la programación del LCD AVR, utilizando la librería descargada y comentada líneas arriba, se tendrán una serie de funciones que ayudarán a manipular las pantallas LCD, se puede revisar el manual para conocer para que sirven cada una de las funciones, en este caso se comentarán las mas importantes para comenzar, mas adelante se irá complementando con otras.

Lo primero que hay que hacer es inicializar la pantalla LCD AVR y eso se hace mediante la siguiente función

lcd_init(modo de inicio de la pantalla LCD);

Para el modo de inicio de la pantalla LCD AVR se tienen 4 opciones que son las siguientes:

LCD_DISP_OFF mediante esta opción la pantalla estará apagada

LCD_DISP_ON  mediante esta opción se enciende la pantalla pero no se ve el cursor

LCD_DISP_ON_CURSOR  mediante esta opción se enciende la pantalla y se ve el cursor

LCD_DISP_ON_CURSOR_BLINK  mediante esta opción se enciende la pantalla y el cursor parpadea

Para el ejemplo se usará la segunda opción por lo que para iniciar la pantalla LCD será como sigue

lcd_init(LCD_DISP_ON);//lcd encendio cursor no visible

lcd_gotoxy(columna,fila); mediante esta función se ubica el cursor en la posición donde se empezará a imprimir los caracteres en la pantalla LCD, la pantalla LCD será de 2×16 esto es de 2 filas y 16 columnas, en esta función tanto las filas como las columnas comienzan en 0, por ejemplo la fila 1 será  0 y la fila 2 será 1, lo mismo para las columnas, la columna 1 será 0, la columna 2 será 1, la columna 3 será 2 y así hasta la columna 16 que será 15, por ejemplo para ubicar el cursor en la primera fila y en la columna 5 sería así lcd_gotoxy(4,0), si se quiere que el cursor se ubique en la segunda fila y la columna 3 sería así lcd_gotoxy(2,1).

lcd_clrscr(); mediante esta función se borra o limpia la pantalla y el cursor se coloca en la primera fila y primera columna.

lcd_puts(“mensaje”); mediante esta función se imprimen mensajes en la pantalla LCD AVR.

Ejemplo1 mensajes de prueba:

Se utilizará el circuito conectando el LCD AVR al puerto D del ATmega88, con el orden de los pines tal como se ha comentado lineas arriba y utilizando las funciones comentadas, se imprimirá en la primera fila el mensaje “Hola Mundo” y en la segunda fila el mensaje “LCD con AVR”.

El código realizado en el ATMEL STUDIO es el siguiente:

LCD AVR circuito código

La siguiente es la imagen de los mensajes vistos en la pantalla LCD AVR

LCD AVR imagen

Ejemplo2 datos numéricos en la pantalla LCD

Se seguirá utilizando el mismo circuito utilizado para el ejemplo1, es decir el LCD AVR conectado al puerto D del ATmega88, en este caso se quieren ver datos numéricos en el LCD, pero resulta que a la pantalla LCD AVR solo se le pueden enviar caracteres y no valores numéricos, por lo tanto hay que convertir el valor numérico que se quiera visualizar en el LCD AVR en una cadena de caracteres, para esto hay que incluir el archivo de cabecera:

#include <stdlib.h>

Este archivo de cabecera tiene una serie de funciones que permiten convertir números a cadena de caracteres y también el caso contrario es decir cadena de caracteres a números.

La funcion que interesa de este archivo de cabecera para convertir números enteros de 8 bits a cadenas de caracteres es la siguiente

itoa(numeroAConvertir,arregloDeCaracteres,baseNumerica);

La función itoa convierte un número entero en una cadena de caracteres, hay que agregarle 3 parámetros en el orden que se muestra, numeroAConvertir se refiere al número entero que se quiere visualizar en el LCD por lo cual hay que convertirlo en una cadena de caracteres; arregloDeCaracteres es un arreglo donde se guardará el número entero convertido a cadena, de tipo char de una longitud adecuada para almacenar la cantidad de caracteres del número convertido; baseNumerica es la base en la que se quiere ver el número convertido en la pantalla LCD AVR, si se quiere ver en base binaria será 2, si se quiere en base decimal será 10 y así.

Si el número que se quiere ver es de mas de 8 bits por ejemplo 16 se tienen las siguientes funciones

utoa(numeroAConvertir,arregloDeCaracteres,baseNumerica); u viene de unsigned, esto es un entero sin signo.

ultoa(numeroAConvertir,arregloDeCaracteres,baseNumerica); ul viene de unsigned long esto es un entero largo sin signo.

El siguiente es un código preparado en el ATMEL STUDIO para la visualización de un número entero de 8 bits en la pantalla LCD AVR, este número irá cambiando su valor en cada ciclo de programa:

LCD AVR número entero código

La siguiente es la imagen donde se comprueba la visualización del número entero en la pantalla LCD AVR

LCD AVR número entero

Otra manera de ver datos de tipo entero y cualquier otro tipo es incluyendo la librería

#include <stdio.h>

Esta librería contiene una función llamada sprintf cuya sintaxis es la siguiente:

sprintf(arreglo,”cadena a almacenar en arreglo %(especificador)”,dato);

Arreglo pues es un arreglo de tipo char de una longitud adecuada, donde se guardará todo lo que aparece entre comillas en forma de cadena de caracteres, especificador es para indicar que tipo de dato es dato, %d para entero, %f para real, %s para cadena, %c para carácter, hay mas pero para el uso del LCD AVR son suficientes.

Por ejemplo si se tiene un numero real con un valor de 3.27 y se quiere visualizar en el LCD AVR, utilizando la función sprintf se haría algo así:

Se quiere ver en la pantalla LCD AVR el mensaje “Num real = 3.27”, entonces hay que crear un arreglo de una longitud de 16 por ejemplo, será suficiente para almacenar la cantidad de caracteres del mensaje, como el número será real entonces el especificador tiene que ser %f, luego

char mensaje[16];//arreglo para almacenar el mensaje

sprintf(mensaje,”Num real = %f”,3.27);//se guarda en la variable mensaje pues el mensaje

lcd_puts(mensaje);//permitirá ver lo guardado en mensaje en la pantalla LCD AVR

Antes de continuar con el uso de sprintf es necesario realizar un par de modificaciones en el ATMEL STUDIO, de lo contrario la función sprintf no responderá adecuadamente, en caso de que ya estén modificadas dejarlas tal como están.

Hacer click derecho sobre el nombre del proyecto, en este caso milcd, y hacer click sobre propiedades, se abrirá una ventana como la que se muestra a continuación, en la pestaña que dice toolchain en AVR/GNU Linker se hace click sobre librerías, en Libreries(-Wl,-l) se presiona sobre el símbolo + en color verde, en la ventana que aparece escribir libprintf_flt y darle a OK tal como se muestra en la siguiente imagen.

LCD AVR librerias

Luego en el mismo Toolchain dentro de en AVR/GNU Linker se hace click sobre General y se selecciona Use vprintf library, tal como se muestra en la siguiente imagen.

LCD AVR vprintf

Realizado estas modificaciones ya se puede utilizar sin inconvenientes la fuención sprintf para poder visualizar en la pantalla LCD AVR mensajes con formato y con cualquier tipo de dato.

El siguiente es un código preparado en el ATMEL STUDIO para la visualización de un número real en la pantalla LCD AVR, este número irá cambiando su valor en cada ciclo de programa, como será un número real es especificador será %f, se puede utilizar para ver cualquier tipo de dato solo hay que tener en cuenta el especificador adecuado y como en el LCD solo se pueden visualizar 16 caracteres por fila, el arreglo donde se guardará el mensaje se hará que no sea mayor a 16, dependiendo de los caracteres a visualizar.

LCD AVR número real

La siguiente es la imagen donde se comprueba la visualización del número real o flotante en la pantalla LCD AVR

LCD AVR número real imagen

Si he logrado ayudarte en cuanto a la utilización de la pantalla LCD con el microcontrolador AVR, comparte este enlace para poder ayudar a muchas personas mas. Muchas Gracias.

Compartir: Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0