lunes, 13 de febrero de 2012

MSP430: LCD Hitachi 44780

En esta entrada mostraremos cómo funciona la librería para controlar una pantalla LCD del modelo Hitachi 44780 (LM016L), tal y cómo describimos en el siguiente capítulo: LCD Hitachi 44780.

Vamos a trabajar sobre la placa MSP430 Launchpad y el micro MSP430G2231. La secuencia que veremos por el LCD será la siguiente:

  1. Veremos el cursor en la primera posición de la pantalla (Primera línea a la izquierda) parpadear durante aproximadamente 3 segundos.
  2. Después veremos la traducción de la palabra Hola en diferentes idiomas y en diferentes posiciones de la pantalla LCD.
  3. Y por último, se apreciará la animación de una batería cargándose.

La conexión entre la placa MSP430 Launchpad y la pantalla LCD Hitachi 44780 es cómo se indica a continuación:

VssGND



Vdd+5V

Asegurarse la entrada +5V, de lo contrario podría verse la segunda fila del LCD no nítida.
Vo
GND



RS
P1.0



R/#WNA


No emplearemos el BusyFlag por lo que nos ahorramos un pin (se hará todo mediante retardos por software)
E
P1.2



DB0
NA



DB1
NA



DB2
NA



DB3
NA



DB4
P1.3



DB5
P1.4



DB6
P1.5



DB7
P1.7




Dónde:
· NA ≡ Sin conexión.

La manera de gestionar el tiempo se hará mediante el TimerA configurado al reloj ACLK (que se le asociará el VLOCLK), el código del programa es el siguiente:
/*----------------------------------------------------------------------
AqueronteBlog@gmail.com

Este archivo es propiedad intelectual del blog Aqueronte,
cuya dirección web, es la siguiente:

http://unbarquero.blogspot.com/

Se permite cualquier modificación del archivo siempre y cuando
se mantenga la autoría del autor.

----------------------------------------------------------------------

Filename: main.c
Date: 9-December-11
File Version: vs0.0

Author: Manuel Caballero
Company: Hades

----------------------------------------------------------------------

Notes: En este programa vamos a mostrar como trabajar con la librería
LCD4bits para manejar pantallas LCD Hitachi 44780 (Módulo
LM016L). Se representarán varios mensajes por pantalla y
finalmente, crearemos carácteres nuevos (el aspecto de una
batería cargándose) para ser representado por pantalla.

· Configuración del Sistema:
· MCLK: DCLOCK ~0.8 MHz
· ACLK: VLOCLK ~12 kHz
· Timer A: Para generar retardos

· Conexión al LCD
· 1. Vss: GND
· 2. Vdd: +5V
· 3. Vo: GND
· 4. RS: P1.0
· 5. R/#W: NA
· 6. E: P1.2
· 7. DB0: NA
· 8. DB1: NA
· 9. DB2: NA
· 10. DB3: NA
· 11. DB4: P1.3
· 12. DB5: P1.4
· 13. DB6: P1.5
· 14. DB7: P1.6
*/

#include "io430.h"
#include "intrinsics.h"

// #define BusyFlag_ON
#define fosc 800000 // 0.8 MHz
#include "LCD4bits.c"

// Dibujo de la batería
unsigned char dibujo1[8] = {0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10};
unsigned char dibujo2[8] = {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F};
unsigned char dibujo3[8] = {0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
unsigned char dibujo4[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F};
unsigned char dibujo5[8] = {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x18, 0x18};
unsigned char dibujo6[8] = {0x18, 0x18, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10};

// Palabras a representar por pantalla
char *saludos[6] = {"Mambo!", "\n Hello!", " Salut!", "\nHallo!", "\n Priviet!", " Hola!"};

// Prototipos de funciones
void conf_CLK (void);
void conf_TimerA (void);

void main( void )
{
char i = 0;

conf_CLK();

LCD_INI (TWO_Lines_5x7, NoShift_Increment); // Initialize LCD
LCD_Control (DisON_CurON_BliON);

TACCR0 = 36000; // CCIFG on around ~3s
conf_TimerA();

while (TACCTL0_bit.CCIFG == 0);

TACCR0 = 7200; // CCIFG on around ~0.6s

LCD_Control (DisON_CurOFF_BliOFF);

do{
TACCTL0_bit.CCIFG = 0; // Reset flag CCIFG
LCD_printf (saludos[i]);
while (TACCTL0_bit.CCIFG == 0);
i++;
LCD_Control (ClearDisplay);
}while(i < 6);

TACCR0 = 4800; // CCIFG on around ~0.4s

LCD_CGRAM (0, dibujo1); // Writing 6 data...
LCD_CGRAM (8, dibujo2);
LCD_CGRAM (16, dibujo3);
LCD_CGRAM (24, dibujo4);
LCD_CGRAM (32, dibujo5);
LCD_CGRAM (40, dibujo6); // on CGRAM.

do{
// Battery empty
LCD_xy (5,0);
LCD_putc (0x00);
LCD_xy (5,1);
LCD_putc (0x01);
LCD_xy (6,0);
LCD_putc (0x02);
LCD_xy (6,1);
LCD_putc (0x03);
LCD_xy (7,0);
LCD_putc (0x02);
LCD_xy (7,1);
LCD_putc (0x03);
LCD_xy (8,0);
LCD_putc (0x02);
LCD_xy (8,1);
LCD_putc (0x03);
LCD_xy (9,0);
LCD_putc (0x04);
LCD_xy (9,1);
LCD_putc (0x05);

// Filling the battery
for (i = 5; i < 9; i++)
{
TACCTL0_bit.CCIFG = 0;
while (TACCTL0_bit.CCIFG == 0);

for (char j = 0; j < 2; j++)
{
LCD_xy (i,j);
LCD_putc (0xFF);
}
}

TACCTL0_bit.CCIFG = 0;
while (TACCTL0_bit.CCIFG == 0);
}while(1);
}

/*
Function: conf_CLK (void)

Version: vs0.0 (7/12/2011)
Compiler: IAR 5.40.1 [Kickstart]

Description: Configura reloj del sistema (~0.8 MHz) y ACLK (~12 kHz).
Notes:
*/
void conf_CLK (void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
DCOCTL = DCO0 + DCO1; // DCOx = 3
BCSCTL1 = XT2OFF + RSEL1 + RSEL2; // RSELx = 6

BCSCTL3 = LFXT1S1; // ACLK = VLOCLK
}

/*
Function: conf_TimerA (void)

Version: vs0.0 (7/12/2011)
Compiler: IAR 5.40.1 [Kickstart]

Description: Configura TimerA.
Notes:
*/
void conf_TimerA (void)
{
TACTL = TASSEL_1 + MC_1 + TACLR; // ACLK, upmode
TACCTL0_bit.CCIFG = 0; // Reset flag CCIFG
}

Hay que tener en cuenta que la librería para el manejo del display LCD Hitachi 44780 es adaptable a las necesidades del diseñador, podemos definir los pines con los cuales queremos controlar la pantalla.

Un vídeo que demuestra lo explicado anteriormente se presenta a continuación:




Os pongo a vuestra disposición el programa en lenguaje C (IAR y MSPGCC) para que lo podáis descargar y probar:

MSP430: LCD Hitachi 44780
Compilador IARCompilador MSPGCC
CC
Control LCD Hitachi 44780
Control LCD Hitachi 44780
Control LCD Hitachi 44780
Control LCD Hitachi 44780
Control LCD Hitachi 44780
Control LCD Hitachi 44780

Como se ha podido ver en el transcurso de esta entrada, el manejo de una pantalla cuyo controlador sea compatible con el Hitachi 44780 (LM016L) es fácil de adaptar y usar para nuestras necesidades mediante los microcontroladores MSP430 que pone a nuestra disposición Texas Instruments.

Lo más interesante de esta librería, es su alta capacidad de ser configurada a gusto del diseñador en lo referente a patitas del microcontrolador para que se pueda adaptar, lo mejor posible, a las necesidades del proyecto.

1 comentarios:

Meta dijo...

Hola:

Buenísimo, ya va siendo hora que vuelvas al mundo de los PIC y EEPROM.

Has hecho un buen trabajo.