- Pantalla LCD alfanumérica de 16x2
- Biblioteca CCS LCD 16x2 para MSP430
- Funciones LCD para pantalla LCD 16x2 en MSP430
- Diagrama de circuito para interfaz LCD con MSP430
- Programación de MSP430 usando Code Composer Studio para pantalla LCD
Este artículo es la continuación de nuestra serie de tutoriales sobre la programación de MSP430 con Code Composer Studio. El último tutorial se basó en interrupciones externas en MSP430 usando pines GPIO. Este tutorial trata sobre la interfaz de una pantalla con MSP430, cuando se trata de mostrar la pantalla LCD de 16 * 2, es la primera opción para cualquier aficionado a la electrónica. Anteriormente también hemos interconectado LCD con MSP430 usando Arduino IDE, en este tutorial, usaremos la plataforma de estudio nativa Code Composer en lugar de usar Arduino IDE, de esta manera como diseñador, obtenemos más flexibilidad.
Para obtener más información sobre la pantalla LCD de 16x2 y su uso con otros microcontroladores, consulte los tutoriales a continuación.
- Interfaz LCD con ATmega16
- Interfaz LCD con Raspberry Pi
- Interfaz LCD con microcontrolador PIC
- Interfaz LCD con ARM7-LPC2148
- Interfaz LCD con NodeMCU
- Interfaz LCD con STM32
- Interfaz LCD con MSP430G2
- Interfaz LCD con STM8
Tiene un IC hd44780 incorporado que puede almacenar el comando y los datos que se le pasan. El módulo LCD tiene aproximadamente 16 pines. 8 de los cuales son pines de datos, 4 de ellos son pines de alimentación para LED de retroiluminación y todo el módulo LCD, 3 para controlar el funcionamiento y 1 pin para ajuste de contraste. El tutorial se basa en la biblioteca creada por Dennis Eichmann. Es muy fácil utilizar una biblioteca con funciones independientes para imprimir diferentes tipos de datos. También tiene disposiciones para mostrar los datos en diferentes formas con ceros iniciales, en blanco y eliminados. Es una biblioteca bastante amplia y completa y se puede configurar para las diferentes conexiones. Aquí, el archivo de encabezado se modifica para adaptarse a una configuración paralela de 8 pines para la comunicación de datos.
Pantalla LCD alfanumérica de 16x2
Una pantalla genérica de 16x2 tiene un circuito integrado hd44780 incorporado (encerrado en un círculo rojo a continuación), que puede almacenar el comando y los datos que se le pasan. El módulo LCD tiene aproximadamente 16 pines. 8 de los cuales son pines de datos, 4 de ellos son pines de alimentación para LED de retroiluminación y todo el módulo LCD, 3 para controlar el funcionamiento y 1 pin para ajuste de contraste.
Este módulo LCD se muestra arriba versátil y utiliza pines mínimos en comparación con otros LCD segmentados. Si tiene curiosidad por saber cómo funciona exactamente todo esto, debe verificar el funcionamiento de la pantalla LCD de 16x2 donde ya hemos discutido cómo funciona la pantalla LCD en detalle.
Pin RS: RS = 1 habilitará el registro de datos en la pantalla LCD, que se utiliza para escribir los valores en el registro de datos en la pantalla LCD. RS = 0 habilitará el registro de instrucciones de la pantalla LCD.
Habilitar pin: disparado por flanco negativo; cuando el pin se cambia del estado ALTO al estado BAJO, se solicita al LCD que escriba en los pines de datos. Activado por flanco positivo; cuando el pin se cambia del estado BAJO al estado ALTO, se solicita a la pantalla LCD que lea los pines de datos.
Pin R / W: R / W = 0 escribirá en el registro de instrucciones o registro de datos según la selección del pin RS. R / W = 1 leerá desde el IR o DR según la selección del pin RS.
Operación RS R / W
0 0 Escritura de infrarrojos como operación interna (visualización clara, etc.)
0 1 Leer indicador de ocupado (DB7) y contador de direcciones (DB0 a DB6)
1 0 DR escritura como operación interna (DR a DDRAM o CGRAM)
1 1 DR leído como operación interna (DDRAM o CGRAM a DR)
Pines D0-D7: Los datos se transfieren hacia y desde el comando y los registros de datos a través de estos pines.
Pines de alimentación: Los pines V ss, V dd se utilizan para alimentar el módulo LCD. Los pines A, K encenderán la retroiluminación LED. Los pines V 0 se utilizan para controlar el contraste.
Biblioteca CCS LCD 16x2 para MSP430
El tutorial se basa en la biblioteca creada por Dennis Eichmann. Es muy fácil utilizar una biblioteca con funciones independientes para imprimir diferentes tipos de datos. También tiene disposiciones para mostrar los datos en diferentes formas con ceros iniciales, en blanco y eliminados. Es una biblioteca bastante amplia y completa y se puede configurar para las diferentes conexiones. Aquí, el archivo de encabezado se modifica para adaptarse a una configuración paralela de 8 pines para la comunicación de datos. La biblioteca se puede descargar desde el siguiente enlace, después de descargarla, siga los pasos a continuación para agregar la biblioteca a CCS.
Descargar biblioteca 16x2 para MSP430 - Code Composer Studio
Paso 1: creación de archivos y proyectos
Se crea un proyecto CCS predeterminado utilizando el menú de archivo. En el cuadro de diálogo Crear proyecto, seleccione el dispositivo y asigne hd44780 como nombre de proyecto. En Tipo de proyecto y cadena de herramientas, seleccione el tipo de salida como biblioteca estática y cree el proyecto.
En el carril del Explorador de proyectos (lado izquierdo), cree un archivo de encabezado dentro de la carpeta de inclusión y asígnele el nombre hd44780.h . Luego, copie el contenido del archivo hd44780.h descargado en este archivo recién creado.
Ahora cree el proyecto principal cambiando el tipo de salida a un ejecutable y cree un proyecto llamado CCS_LCD .
Paso 2: Incluya las rutas de búsqueda en el proyecto principal
En el cuadro de diálogo de propiedades del proyecto hd44780 y dentro de las opciones de inclusión para el compilador MSP430, agregue la carpeta de inclusión en el archivo la ruta de búsqueda.
Luego, cree este proyecto para crear los archivos vinculadores necesarios, como archivos.lib . La construcción de esto creará el archivo hd44780.lib dentro de la carpeta de depuración.
Paso 3: incluya las rutas de búsqueda para el vinculador
En el cuadro de diálogo de propiedades del proyecto CCS_LCD y en la ruta de búsqueda de archivos de la pestaña Vinculador MSP430, incluya el archivo hd44780.lib ubicado dentro de la carpeta de depuración del proyecto hd44780. La carpeta de depuración también se incluye en la ruta de búsqueda de archivos.
La carpeta de inclusión se agrega nuevamente a las opciones de inclusión del compilador MSP430 del proyecto CCS_LCD .
La biblioteca se compila con éxito y se agrega al vinculador del proyecto principal.
Funciones LCD para pantalla LCD 16x2 en MSP430
void hd44780_timer_isr (void): Esto se llama periódicamente en el ISR del temporizador A. El temporizador A se utiliza para realizar periódicamente las funciones de la pantalla LCD, como limpiar la pantalla, configurar el cursor y mostrar los datos. La función se utilizará en el ISR. No devuelve nada.
uint8_t hd44780_write_string (char * ch__string, uint8_t u8__row, uint8_t u8__column, uint8_t u8__cr_lf): Escribirá la cadena especificada en el primer argumento.
char * ch__string: la cadena que se escribirá en el búfer de datos (dentro de la función hd44780_timer_isr ). Los datos se copiarán al registro de datos y al registro de instrucciones del LCD IC cuando se llame periódicamente al hd44780_timer_isr .
uint8_t u8__row: Define la fila en la que se escribirá la cadena.
uint8_t u8__column: Define la columna en la que se escribirá la cadena.
uint8_t u8__cr_lf: Si se establece en 1, la fila pasará a la siguiente. Si es 0, la impresión se detiene en la misma fila.
void hd44780_clear_screen (void): esta función borrará toda la pantalla. No devuelve nada.
uint8_t hd44780_output_unsigned_16bit_value (uint16_t u16__value, uint8_t u8__leading_zero_handling, uint8_t u8__row, uint8_t u8__column, uint8_t u8__cr_lf): La función mostrará la ubicación sin firmar del valor de 16 bits en la pantalla LCD.
uint16_t u16__value: El número entero que se mostrará se da en el primer argumento.
uint8_t u8__leading_zero_handling: Si se pasa 0, se mostrarán ceros a la izquierda y se mostrará el valor entero. Si se pasa 1, los ceros se borrarán. Si se pasa 2 como parámetro, solo se mostrarán los dígitos significativos.
uint8_t u8__row: Se selecciona la fila en la que se muestra el número entero.
uint8_t u8__column: La columna a imprimir se selecciona mediante el argumento.
uint8_t u8__cr_lf: Si se establece en 1, la fila pasará a la siguiente. Si es 0, la impresión se detiene en la misma fila.
Diagrama de circuito para interfaz LCD con MSP430
El diagrama de circuito completo se ilustra en la siguiente imagen. Como puede ver, las conexiones de hardware son muy simples y hemos alimentado la placa completa usando un adaptador de 5V.
Las conexiones se realizan según el esquema anterior. Consulte la siguiente tabla para ver las conexiones detalladas.
Vss | Tierra de la fuente de alimentación de 5 V |
Vdd | 5V |
V0 | Salida de potenciómetro |
RS | P2.1 |
R / W | Suelo |
mi | P2.0 |
D0 | P1.0 |
D1 | P1.1 |
D2 | P1.2 |
D3 | P1.3 |
D4 | P1.4 |
D5 | P1.5 |
D6 | P1.6 |
D7 | P1.7 |
UN | Resistencia de 220 ohmios |
K | Suelo |
El ánodo de la retroiluminación LED no se puede conectar directamente a una fuente de 5V. Debe estar conectado a una resistencia para minimizar el flujo de corriente a través del módulo LCD. Hice mis conexiones usando una placa perf para soldar la pantalla LCD y luego usé cables de puente para conectar la pantalla LCD con la placa MSP430, mi configuración se ve así a continuación, pero también puede simplemente usar una placa de pruebas para hacer sus conexiones.
Programación de MSP430 usando Code Composer Studio para pantalla LCD
El código completo utilizado en este proyecto se proporciona al final de esta página. La explicación del uso del código es la siguiente. Primero, abra el archivo de encabezado (hd44780.h) e incluya el número de pieza del microcontrolador en la primera parte del archivo.
#include "msp430g2553.h"
Primero se debe detener el temporizador de vigilancia. Los registros de control DCOCTL y BCSCTL1 se utilizan para configurar el oscilador del microcontrolador. Las líneas siguientes configurarán el MCLK para que sea 1MHZ.
WDTCTL = (WDTPW - WDTHOLD); BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ;
Los pines del puerto 1 deben mencionarse como salida, que se utilizará para los pines de datos. El pin 0 y el pin 1 también deben mencionarse como salida en el puerto 2, que se utilizará para el pin RS y R / W.
P1DIR = 0xFF; P2DIR = (0x01 - 0x02);
El temporizador incorporado se utiliza para mostrar valores periódicamente. El temporizador A se selecciona con SMCLK (1MHZ) como fuente de reloj y el modo continuo es el modo de funcionamiento.
TA0CCR1 = 32768; TA0CCTL1 = CCIE; TA0CTL = (TASSEL_2 - MC_2 - TACLR);
Las interrupciones para los canales de comparación 1 y 2 y la interrupción de desbordamiento del temporizador comparten el mismo vector de interrupción ( TIMER0_A1_VECTOR ) con diferentes direcciones de inicio. Capture compare channel 1 (CCR1) utiliza 2 como dirección, que se utiliza en la caja del conmutador.
#pragma vector = TIMER0_A1_VECTOR __interrupt void timer_0_a1_isr (void) { switch (TA0IV) { caso 2: { hd44780_timer_isr (); romper; } } }
Una vez que haya compilado su código, puede cargarlo en la placa MSP430, como se explica en el tutorial de introducción a MSP430. Si todo sale como se esperaba, debería ver en la pantalla LCD algo de contraste como se muestra a continuación.
Si su prueba es muy tenue, puede intentar ajustar el potenciómetro para obtener un mejor contraste. El funcionamiento completo del proyecto también se puede encontrar en el video vinculado a continuación. Espero que hayas disfrutado del proyecto y hayas encontrado interesante construir el tuyo propio. Si tiene alguna pregunta, déjela en la sección de comentarios a continuación. También puede escribir todas sus preguntas técnicas en foros para obtener respuestas o iniciar una discusión.