miércoles, 7 de septiembre de 2011

Termometro LCD

Cuando hablamos de tomar medidas del mundo real y procesarlas en un microcontrolador, la medida por excelencia es la temperatura, debido a que existen multitud de sensores muy baratos y muy sencillos de utilizar que nos dan una lectura clara de esta. En esta entrada vamos a programar un termómetro que nos mostrará en un display LCD la temperatura actual. El sensor que vamos a utilizar es un LM35 que nos proporciona una salida digital proporcional a la temperatura, en concreto 10mV/ºC.
Para adquirir esa tensión analógica, vamos a utilizar el módulo conversor analogico-digital que tenemos en los microcontroladores de microchip de la familia 18fx5x0, como por ejemplo el 18f2550 que es el que vamos a utilizar en esta aplicación.
Normalmente, yo rehuso de utilizar librerías ya que no sabes que hay detrás da cada instrucción, pero en este caso, para el control de lcd vamos a utilizar las libreria xlcd.h y stdio.h que nos hacen más fácil mostrar los caracteres necesarios en el LCD.
La librería stdio.h es muy conocida ya por los usuarios de C, así que no me voy a detener en explicarla, en cambio para muchos, la librería xlcd.h es completamente nueva. Nosotros solo vamos a utilizar 4 instrucciones de todas las que dispone, que son:
  • BusyXLCD(): que nos devuelve un 1 cuando el lcd está ocupado y un 0 cuando está libre.
  • WriteCmdXLCD(char.): Nos sirve para mandar comandos de control al LCD.
  • OpenXLCD(): Con esta función configuramos el LCD.
  • putsXLCD(char[]): Mostramos por pantalla un texto. 
La función OpenXLCD(), como hemos dicho sirve para configurar el lcd, concretamente la comunicación con el microcontrolador, en nuestro caso la configuración que debemos poner es la siguiente:

OpenXLCD( FOUR_BIT & LINES_5X7 );

En la que le decimos que vamos a utilizar una comunicación de 4 bits, y cada carácter tiene 5x7 puntos. Esta configuración es la misma para casi todos los LCD alfanuméricos.
Una cosa importante para que nuestro LCD funcione bien, es que tenemos que añadir 3 funciones de retardo que variarán según nuestra frecuencia de oscilación. en mi caso estas funciones están configuradas para 20MHz, pero resulta sencillo modificarlas para cualquier frecuencia:


// Funciones necesarias para xlcd.h
void DelayFor18TCY( void )
{
Delay10TCYx(20); //Delay of 40ms


}
void DelayPORXLCD (void)
{
Delay10KTCYx(75); // Delay of 15ms
return;
}
void DelayXLCD (void)
{
Delay1KTCYx(25); // Delay of 5ms
return;
}
El resultado lo podeis ver aquí:



Los archivos del proyecto y el código completo lo podéis descargar desde aquí. Espero que os sea útil.
Un saludo

No hay comentarios:

Publicar un comentario