La pantalla es la parte necesaria de cualquier máquina, ya sea un electrodoméstico o una máquina industrial. La pantalla no solo muestra las opciones de control para operar la máquina, sino que también muestra el estado y la salida de la tarea realizada por esa máquina. Hay muchos tipos de pantallas que se utilizan en la electrónica, como la pantalla de 7 segmentos, la pantalla LCD de 16x2, la pantalla táctil TFT, la pantalla OLED, etc.
La pantalla LCD de 16x2 es el módulo de visualización más básico y también se utiliza en algunos equipos electrónicos pequeños como calculadoras, medidores digitales, etc. Hemos realizado muchos proyectos utilizando LCD de 16x2, incluida la interfaz básica con otros microcontroladores:
- Interfaz LCD con microcontrolador 8051
- Interfaz LCD con microcontrolador ATmega32
- Interfaz LCD con microcontrolador PIC
- Interfaz LCD 16x2 con Arduino
- Interfaz LCD 16x2 con Raspberry Pi usando Python
En este tutorial, veremos cómo conectar una pantalla LCD de 16x2 con el microcontrolador Atmega16 AVR y mostrar un simple mensaje de bienvenida.
Componentes requeridos
- Atmega16
- Módulo LCD 16x2
- Jerséis
- Tablero de circuitos
Diagrama de circuito
Programación de Atmega16 para pantalla LCD 16x2
La programación no requiere bibliotecas externas. Aquí el Atmega16 se programa usando USBASP y Atmel Studio7.0. El programa completo y el video de trabajo se proporcionan al final del proyecto, simplemente cargue el programa en Atmega16 y gire 10k POT para ajustar el brillo de la pantalla LCD.Defina inicialmente la frecuencia de la CPU e incluya las bibliotecas necesarias que vienen con el paquete Atmel Studio, como para acceder a los pines IO y
Defina el pin RS y EN de la pantalla LCD en el programa. Los pines RS se utilizan para seleccionar los datos y el registro de comandos. El pin de habilitación bloquea los datos.
#define en PA3 #define rs PA2
También defina qué PUERTO de Atmega16 se utilizará para la interfaz LCD. Aquí se utiliza el PORTA.
#define lcdDirection DDRA #define lcdPort PORTA
El siguiente paso es construir una función que acepte un comando pasando un parámetro. Hay muchos comandos LCD HEX. Los comandos hexadecimales se utilizan para definir la función de LCD. Dado que estamos usando el modo LCD de 4 bits, el byte (8 bits) se enviará en dos paquetes. Uno de los paquetes será Upper Nibble (4 bits) y el otro paquete será Lower Nibble (4 bits).
void lcdCommand (comandos de caracteres sin firmar) { lcdPort = (lcdPort & 0x0F) - (comandos & 0xF0); lcdPort & = ~ (1 <
El siguiente paso sería aceptar los caracteres y engancharlos al puerto de la pantalla LCD. Los caracteres recibidos se envían luego a la pantalla LCD nibble por nibble. La función toma el carácter usando pasar por parámetro y luego toma el nibble superior e inferior. El pin 'rs' se establece en alto para el registro de datos y luego se envía un pulso ascendente para bloquear los datos. De manera similar, el nibble inferior se envía cambiando el valor de habilitación y enviando el pulso ascendente para habilitar.
void lcdChar (cadena de caracteres sin firmar) { lcdPort = (lcdPort & 0x0F) - (cadena & 0xF0); lcdPort - = (1 <
Esta función simplemente convierte el carácter en una cadena y se puede usar en el programa más adelante cuando se necesite escribir una cadena.
void lcdString (char * str) { int j; para (j = 0; str! = 0; j ++) { lcdChar (str); } }
Ahora se escribe una función solo para limpiar la pantalla. Solo necesita enviar el comando 01 en HEX y luego colocar el cursor en la posición inicial.
void lcdClear () { lcdCommand (0x01); _delay_ms (2); lcdCommand (0x80); }
Ahora en la función principal, la pantalla LCD está inicializada. Establezca inicialmente la dirección del PUERTO para que la pantalla LCD se conecte. Aquí, el PUERTO se establece como SALIDA, así que configure FF.
lcdDirection = 0xFF; _delay_ms (20)
Luego configure la pantalla LCD en el modo de 4 bits enviando 02 en hexadecimal. También envíe 28 en hexadecimal para configurarlo en 2 líneas, 15x7 píxeles de matriz en modo de 4 bits.
lcdCommand (0x02); lcdCommand (0x28);
El comando 0c y 06 se utiliza para controlar la posición del cursor. Y finalmente, limpie la pantalla enviando 01 en hexadecimal. Esto finalizará la inicialización de LCD.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
Una vez finalizada la inicialización, pruebe la pantalla LCD enviando una cadena. Aquí estamos enviando una cadena " LCD de interfaz " en la 1ª fila.
lcdString ("LCD de interfaz");
Luego mueva el cursor a la siguiente fila enviando el comando c0 en hexadecimal. Y finalmente en esta posición, escribe la cadena "Con Atmega1 6".
lcdCommand (0xC0); lcdString ("Con Atmega16");
Con esto finaliza el tutorial completo sobre cómo interconectar una pantalla LCD de 16x2 con Atmega16. Tenga en cuenta que si no obtiene ninguna imagen o píxeles, verifique su cableado de acuerdo con el código y el diagrama de circuito o cambie el valor del POT adjunto al pin V0 de la pantalla LCD. Si tiene alguna duda o sugerencia, puede comunicarse con nosotros escribiendo a nuestro foro o comentando a continuación.