sábado, 22 de diciembre de 2012

MSP430: Shift Register + HD44780

En esta entrada vamos a exponer otro ejemplo del uso de los registros de desplazamiento a la hora de ahorrar patitas a nuestro microcontrolador, por lo que estará dentro del capítulo siguiente: MSP430: Registro de Desplazamiento.

Vamos a trabajar sobre la placa MSP430 Launchpad y seguiremos usando el microcontrolador MSP430G2231.

La finalidad principal de este programa será el controlar una pantalla LCD Hitachi HD44780 (LM016L) con solo tres patitas del microcontrolador (recordad que para el manejo y control de este tipo de pantallas, al menos son necesarias seis patitas del microcontrolador).

Y la información que mostraremos en la pantalla será la temperatura interna del microcontrolador (en nuestro caso, el micro MSP430G2231 tiene incorporado un sensor de temperatura interno).

Quizás el programa no suele seguir el estilo y facilidad de como es costumbre en este blog, ya que no se recalque o se de más énfasis al objeto principal que no es más que comprobar que mediante un registro de desplazamiento podemos controlar una pantalla LCD.

Pero bueno, así podemos hacernos una idea de que la incorporación de un dispositivo como el que estamos tratando en este capítulo, es de bastante utilidad a la hora de diseñar nuestros propios proyectos.

El material que vamos a necesitar y su función es la que se muestra a continuación:

· MSP430 Launchpad: Evidentemente, nuestra placa de desarrollo con el microcontrolador MSP430G2231.
· CD74HCT164: Registro de desplazamiento serie-paralelo.
· Pantalla LCD Hitachi HD44780: Pantalla LCD con el controlador equivalente al Hitachi HD44780 (LM016L).

El funcionamiento del programa en sí es simple, mostrar la temperatura interna del microcontrolador MSP430G2231 mediante su sensor de temperatura interna cada medio segundo aproximadamente.

Para ello, deberemos configurar el sensor de temperatura interna y bueno, al trabajar con una familia de microcontroladores de bajo consumo, buscaremos la manera que éste consuma lo menos posible: Configuraremos el reloj auxiliar ACLK a VLCLK (~12 kHz) y que despierte al microcontrolador cada, aproximadamente medio segundo en su estado de ahorro de energía LPM3, lea la temperatura del sensor interno y la muestre por pantalla.

Es cierto que quizás, el control del sensor de temperatura interna de nuestro microcontrolador deba ser descrito con más detalle, pero si lo hacemos en esta entrada puede que nos desviemos de nuestro propósito principal, y es ni más ni menos que, comprobar que mediante los registros de desplazamiento podemos ahorrar patitas de nuestro microcontrolador.

Así que aplazamos el capítulo del sensor interno de temperatura a su propio apartado (se hará lo antes posible).

Aún así, para una explicación más detallada, se recomienda que se lean los comentarios del programa que está más abajo para disposición del usuario su descarga.

El código del programa principal, 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:         13-December-12                                
File Version: vs0.0                                     
Compiler:     IAR 5.50.1 [Kickstart]   

Author:       Manuel Caballero                           
Company:      Hades                          
                       
----------------------------------------------------------------------
                                                      
Notes:    En este programa vamos a mostrar como trabajar con el 
          dispositivo registro de desplazamiento (CD74HCT164)
          tipo serie-paralelo, donde veremos que simplemente con tres 
          patitas del microcontrolador, son capaces de 
          controlar la pantalla LCD Hitachi HD44780 (LM016L).

          En nuestro programa, se mostrará la temperatura leída del
          sensor de temperatura interno del propio microcontrolador.

          La velocidad de lectura y actualización del dato mostrado por
          la pantalla es de, aproximadamente medio segundo.
          Como dato adicional, el microcontrolador estará en modo ahorro
          de consumo LPM3 hasta la nueva lectura.
*/

#include "io430.h"
#include "variables.h"
#include "funciones.c"

void main( void )
{  
  conf_WDT ();       // Configura WDT del sistema
  conf_CLK ();       // Configura CLK del sistema                                              
  conf_IO ();        // Configura Entradas/Salidas
  conf_ADC10 ();     // Configura ADC 10
  conf_TimerA ();    // Configura TimerA
  
  LCD_INI (ONE_Line_5x7, NoShift_Increment);  // Inicializa LCD
  LCD_Control (DisON_CurOFF_BliOFF);
  
  __enable_interrupt();                       // Enable interrupts.
  
  while(1)
  {    
    LPM3;                            // LPM3 with interrupts enabled
    
    IntDegC = INT_To_BCD (IntDegC);
      
    LCD_Control (ClearDisplay);
    LCD_printf ("Temp uC: ");
    BCD_to_LCD(IntDegC);             // Dato de la temp por pantalla
      
    LCD_putc(' ');
    LCD_putc(0xDF);                  // Símbolo Grado: º
    LCD_putc('C');
  }
}

Como vemos, el ejemplo es bastante simple, se recomienda bajar los archivos disponibles más abajo para indagar entre sus librerías y leer sus funciones de manera más detallada.

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: Shift Register + HD44780 
Compilador IARCompilador MSPGCC
CC
MSP430: Shift Register + LCD
MSP430: Shift Register + LCD
MSP430: Shift Register + LCD
MSP430: Shift Register + LCD 
MSP430: Shift Register + LCD 
MSP430: Shift Register + LCD 

Como se ha podido ver en el transcurso de este capítulo, es fácil y muy útil trabajar y saber controlar los dispositivos llamados registros de desplazamiento a la hora de ahorrar patitas de nuestro microcontrolador y aprovechar de camino, poner a éste en modo ahorro de energía.

Como dato final, hay que especificar que como bien se ve en el vídeo, la temperatura ambiente difiere, aproximadamente 10 grados de lo que lee el sensor de temperatura interno del microcontrolador, aparte de que en las hojas de características, tanto de la familia como del propio microcontrolador, dicen que la tolerancia es bastante grande, hay que tener en cuenta que el sensor mide la temperatura del microcontrolador (dentro), no de la superficie.

Otros microcontroladores de la misma familia tienen datos en memoria donde podemos acceder para calibrar nuestro sensor de temperatura interno respecto a la temperatura ambiente.

Aún así, siguiendo los consejos de la hoja de características del componente, una buena calibración deberá ser precedida y controlada por medios externos, por ejemplo, otro sensor de temperatura externo.

8 comentarios:

Anónimo dijo...

hola que tal, me podria facilitar el diagrama de la conexion entre el lcd y el registro de dezplazamiento.

Unknown dijo...

Buenas:

Si te bajas los archivos, podrás encontrar información más detallada del conexionado entre todos los dispositivos.

Pero en este caso, la conexión entre el registro de desplazamiento y el LCD es de la siguiente manera:

· Configuramos el LCD en 4-bits, por lo que solo es necesario 4 patitas de datos más una, de activación.

· Las cuatro patitas de datos serán las que se conecten a la salida del registro de desplazamiento (como verás, no se usa todas las patitas del registro de desplazamiento).

· Y por último, tenemos la patita del LCD llamada E, que se conectará directamente al microcontrolador.

Un saludo.

Anónimo dijo...

ME PUEDE CHECAR LAS CONEXIONES ,EL PIN DEL LCD RS DONDE VA CONECTADO.
MSP430 74HC164 LCD
----¬ -----¬ ----
1.0 |---> -|DS2 |Q0-----> -|DB4
1.1 |---> -|CP |Q1-----> -|DB5
1.2 |--¬ | |Q2-----> -|DB6
-----| | | |Q3-----> -|DB7
| |______| -|
|-------------------> -|E

Anónimo dijo...

GRACIAS POR LA PRONTA RESPUESTA
LOS PINES DEL MICRO 1.0,1.1,1.2 VAN A DS2,CP, Y ENABLE RESPECTIVAMENTE.

LAS SALIDAS DEL 74HC164 Q0-Q3 VAN A
DB4-DB7 DE LA LCD.

POR ULTIMO EL PIN RS DE LA LCD A DONDE VA CONECTADA.

Unknown dijo...

Buenas:

No tengo el conexionado en forma de diagrama, ya que está descrito en los archivos del programa como ya dije anteriormente.

Es cierto que dicha descripción no es exhausta.

En este ejemplo, lo que se propone demostrar es que con pocas patitas del microcontrolador, es capaz de controlar una pantalla LCD, es por ello que se ha optado por el mejor de los casos.

¿Qué quiero decir con el mejor de los casos? Pues que no se va ha poder leer desde el LCD ni se puede trabajar con la CGRAM del LCD, es por ello que cualquier patita del LCD destinada a estos menesteres están eliminadas.

Y en nuestro caso, la patita RS del LCD, sirve para poder acceder a la memoria CGRAM del LCD y crear nuevos caracteres. Para eliminar dicha opción, tal y como menciona en la hoja de características del LCD, la patita RS debe estar en baja (RS = 0 = GND).


· PD: Te he eliminado tu mensaje que aparecía tú correo, así no tendrás problemas de que nadie pueda utilizarlo para enviarte spam.

Un saludo.

Anónimo dijo...

Ok gracias por la ayuda haré las conexiones como me indicó, espero me pueda asesorar
En otros proyectos que quiero implementar con este micro, otra.pregunta la forma en que realiza la conversión BCD. Es para optimizar los.recursos del micro.Al consumir más recursos las operaciones de división y multiplicación.

Unknown dijo...

Buenas:

En este caso, instrucciones de multiplicación y división no están presentes para todos los dispositivos de la familia del microcontrolador MSP430 (solo aquellos que tengan implementados un módulo de multiplicación hardware).

Es por ello, que se emplean las instrucciones de desplazamiento.

Aún así, efectivamente es una manera de optimizar el código emplear dichas instrucciones ya que son instrucciones simples (denominadas así por el fabricante), en otras palabras, los recursos que consumen son bajos.

Un saludo.

Unknown dijo...

Manuel

Estuve revisando el código, pero hay algo que me confunde.
En la función "LCD_putc" se hace un corrimiento de datos y luego un OR con l BIT 4, pero en la inicialización de puertos no vi ese pin, por tanto,¿ el BIT4 tiene alguna función especial? ¿Se puede hacer OR con otro pin? ¿Que fin tiene hacer con ese pin en especifico?

De antemano gracias.
void LCD_putc (unsigned char data)
{
ShiftRegister ((data >> 4) | BIT4); // Parte alta
__delay_cycles(2);
ShiftRegister (data | BIT4);
__delay_cycles(GeneralDelay); // ~ 40 us

}