Vous êtes sur la page 1sur 14

http://microcontroladores-mrelberni.

com/lcd-avr/

LCD AVR Pantalla LCD 2×16 con el AVR


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á.

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.

Una 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.

http://microcontroladores-mrelberni.com/lcd-avr/ página 1
http://microcontroladores-mrelberni.com/lcd-avr/

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:

http://microcontroladores-mrelberni.com/lcd-avr/ página 2
http://microcontroladores-mrelberni.com/lcd-avr/
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.

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.

http://microcontroladores-mrelberni.com/lcd-avr/ página 3
http://microcontroladores-mrelberni.com/lcd-avr/

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.

http://microcontroladores-mrelberni.com/lcd-avr/ página 4
http://microcontroladores-mrelberni.com/lcd-avr/
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 PORTC 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.

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:

http://microcontroladores-mrelberni.com/lcd-avr/ página 5
http://microcontroladores-mrelberni.com/lcd-avr/

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

http://microcontroladores-mrelberni.com/lcd-avr/ página 6
http://microcontroladores-mrelberni.com/lcd-avr/
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:

http://microcontroladores-mrelberni.com/lcd-avr/ página 7
http://microcontroladores-mrelberni.com/lcd-avr/

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

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

http://microcontroladores-mrelberni.com/lcd-avr/ página 8
http://microcontroladores-mrelberni.com/lcd-avr/
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:

http://microcontroladores-mrelberni.com/lcd-avr/ página 9
http://microcontroladores-mrelberni.com/lcd-avr/
La siguiente es la imagen donde se comprueba la visualización del número entero en
la pantalla LCD AVR

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

http://microcontroladores-mrelberni.com/lcd-avr/ página 10
http://microcontroladores-mrelberni.com/lcd-avr/
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.

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.

http://microcontroladores-mrelberni.com/lcd-avr/ página 11
http://microcontroladores-mrelberni.com/lcd-avr/
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.

http://microcontroladores-mrelberni.com/lcd-avr/ página 12
http://microcontroladores-mrelberni.com/lcd-avr/
La siguiente es la imagen donde se comprueba la visualización del número real o flotante
en la pantalla LCD AVR

http://microcontroladores-mrelberni.com/lcd-avr/ página 13
http://microcontroladores-mrelberni.com/lcd-avr/

http://microcontroladores-mrelberni.com/lcd-avr/ página 14

Vous aimerez peut-être aussi