jueves, 22 de marzo de 2012

MSP430: DS1620

En esta entrada se expondrá una librería para poder configurar y manejar el dispositivo DS1620, un dispositivo que puede trabajar tanto de termostato cómo de termómetro de manera digital, su fabricante es la empresa Maxim, y en el siguiente enlace, podemos ir a su espacio web: DS1620 Digital Thermometer and Thermostat.

Para tal tarea, como venimos haciendo, vamos a emplear la placa MSP430 Launchpad. Para empezar, vamos a mostrar algunas características técnicas de éste dispositivo:

Características DS1620
· No requiere de componentes externos· Tiempo de conversión de temperatura: 1s (máximo)
· Alimentación desde 3V a 5V· Termómetro: Interfaz de 3-pines
· Medición: -55°C a +125°C en incremento de 0.5°C· Temperatura almacenada en 9-Bit

La estructura interna esquematizada es tal y como se muestra en la siguiente figura:


Dónde podemos observar que mediante tres pines (CLK, DQ y #RST) se realiza la comunicación, control y configuración del dispositivo, pero además, dispone de tres salidas (THIGH, TLOW y TCOM) que le permiten al DS1620 trabajar cómo termostato.

Para obtener más información sobre sus pines, está la siguiente figura:



PINNOMBRE
E/S

DESCRIPCIÓN


Dónde:
1DQ
E/S

Datos


· E ≡ Entrada
2CLK/#CONV
E

Conversión de Temperatura


· S ≡ Salida
3#RST
E

Reset



4GND



Masa



5VDD



Alimentación



6THIGH
S

Alerta Temperatura ALTA



7TLOW
S

Alerta Temperatura BAJA



8TCOM
S

Combinación de alertas




Pero en este capítulo no pretendemos hacer una explicación exhaustiva de este periférico, nuestro propósito es mostrar cómo controlarlo mediante la librería que hemos diseñado para tal fin. Esta librería contiene dos archivos:

· ds1620.c : Dónde se alojan todas las funciones necesarias para el control del DS1620.
· ds1620.h : Dónde se alojan todas las definiciones, constantes y declaraciones necesarias del DS1620.

Librería: ds1620
· Lo que podemos hacer:
· Controlar el DS1620 mediante 3-pines· Escribir datos al DS1620
· Inicializar y Configurar el DS1620 · Funciones adicionales (Empaquetar BCD, etc)
· Leer datos desde el DS1620

Una de las cualidades que nos ofrece esta librería es que podemos declarar cualquier puerto disponible de nuestro microcontrolador para manejar el DS1620, para ello, podemos hacerlo de dos maneras, o declarar el puerto antes de poner la librería en nuestro programa principal:

#defineDS1620_DIRP1DIR
#define DS1620_OUTP1OUT
#define DS1620_INP1IN

O directamente ir al archivo ds1620.h y cambiar los puertos anteriores por los que queremos emplear, en caso de no definir ninguno, se asumirá que se emplea el puerto 1 (P1). Así mismo, podemos definir los pines (patitas) de nuestro microcontrolador para controlar (conectarlo con) el DS1620, en este caso, debemos ir al archivo ds1620.h para configurarlo, por defecto, los pines a usar son los siguientes:

#defineDS1620_DQBIT0
#defineDS1620_CLKBIT1
#define DS1620_RSTBIT2

Por lo tanto, si simplemente ponemos esta librería en nuestro código sin tocar (configurar) nada, por defecto tendríamos la siguiente configuración:

Configuración por defecto: DS1620
· Puerto a usar:
· P1

Pin Launchpad
Pin DS1620
P1.0--->DQ
P1.2--->CLK
P1.3--->#RST

Una vez resuelto el problema de la conexión entre el microcontrolador (mediante la placa Launchpad) y el dispositivo DS1620, debemos tener en cuenta otro aspecto más de configuración, y este es (¡cómo no!) la velocidad a la que está configurado el puerto a usar o nuestro reloj del sistema (hay que tener en cuenta que los periféricos internos del microcontrolador pueden ajustarse a una frecuencia de reloj distinta a la del reloj principal), en este caso, por defecto está configurada a una velocidad de 1MHz, en caso de ser otra la frecuencia de reloj del periférico, se deberá definir tal y cómo lo veníamos haciendo hasta ahora, declarándola antes de poner la librería en nuestro código:

#definefosc1000000

Pues bien, ya hemos terminado de exponer todo lo referente al conexionado y funcionamiento entre la placa Launchpad y el dispositivo DS1620, a partir de ahora, se expondrán las funciones disponibles para tanto el control como el manejo.

Para empezar a trabajar con el DS1620, debemos inicializarlo o mejor dicho, configurarlo para que el dispositivo actúe como termómetro o termostato, o mediante conversión de temperatura continuamente o cada vez que se le da la orden, la función encargada de estos menesteres es la siguiente:

Configura el DS1620
· Función:
void DS1620_Conf (unsigned char DataConf)
· DataConf: Descripción
D1620_CPU_1SHOT DS1620 funciona como termómetro y a la espera de la orden de realizar una conversión de temperatura.
D1620_CPU_NO1SHOT DS1620 funciona como termómetro y realiza, internamente, conversiones de temperatura constantemente.
D1620_NOCPU_1SHOT DS1620 funciona como termostato y a la espera de la orden de realizar una conversión de temperatura.
D1620_NOCPU_NO1SHOTDS1620 funciona como termostato y realiza, internamente, conversiones de temperatura constantemente.

La anterior función, será la primera que debemos poner para configurar el dispositivo y será que usemos cada vez que queramos cambiar el funcionamiento de éste.

Esta librería también pone a disposición del usuario, la capacidad de poder configurar los registros de Thigh y Tlow (los cuales podemos emplear como memoria no volátil para almacenar datos), ambos registros son de 9-Bits, la función encargada de esta tarea es la siguiente:

Escribir en el DS1620
· Función:
void DS1620_Write (unsigned char Cmd, unsigned char Data)
· Cmd: Descripción
D1620_WriteTH Escribir en el registro: Thigh
D1620_WriteTL Escribir en el registro: Tlow


· Data La nueva temperatura del registro.


· Ejemplo
DS1620_Write (D1620_WriteTH, 0x0032);La temperatura de Thigh es de +25ºC
DS1620_Write (D1620_WriteTL, 0x001E);La temperatura de Tlow es de +14ºC

Otra función interesante (¡cómo no!), es la de poder leer desde el DS1620, nos permite obtener el valor de configuración, de los registros Thigh, Tlow, Tslope y Tcounter así cómo, la temperatura.

Leer desde el DS1620
· Función:
unsigned int DS1620_Read (unsigned char Data)
· Data:
Descripción
D1620_ReadTemperatureLee la temperatura.
D1620_ReadTHLee valor del registro Thigh
D1620_ReadTLLee valor del registro Tlow
D1620_ReadCounterLee valor del registro COUNTER
D1620_ReadSlopeLee valor del registro SLOPE
D1620_ReadConfigLee valor del registro CONFIGURATION


· Ejemplos:Descripción
temp = DS1620_Read (D1620_ReadTL);Lee valor del registro Tlow y lo almacena en la variable temp.
temp = DS1620_Read (D1620_ReadTemperature);Lee valor de la temperatura y lo almacena en la variable temp.

Hay que tener en cuenta que tanto los registros: COUNTER y SLOPE son para obtener un valor de la temperatura más precisa siguiendo la expresión matemática que expone el fabricante en la hoja de características de este dispositivo, esta librería, podemos leer dichos valores pero no está implementada dicha expresión matemática.

Otra dos funciones importantes son las que mostraremos a continuación, pero se deben usar dependiendo de cómo el dispositivo está configurado, en caso de conversión continua, es decir, el DS1620 siempre está convirtiendo valores de temperatura internamente, tenemos la siguiente función:

Para la conversión de temperatura del DS1620
· Función:
DS1620_StopConvert_T (void)
· Ejemplos: Descripción
DS1620_StopConvert_T (); El dispositivo DS1620 detiene la conversión de temperatura y entra en modo de reposo.
· NOTA: No volverá a estar activo hasta que se le de la orden de conversión de temperatura o se vuelva a configurar.

En caso contrario, o cuando hemos parado con la anterior función el dispositivo DS1620, para realizar o indicarle que debe hacer una conversión de temperatura, debemos emplear la siguiente función:

Permiso de realizar una conversión de temperatura del DS1620
· Función:
DS1620_StartConvert_T (void)
· Ejemplos: Descripción
DS1620_StartConvert_T (); Permiso de que el DS1620 realice una conversión de temperatura.

¡Ojo!, hay que tener en cuenta que la anterior función sólo le da permiso al DS1620 de realizar una y sólo una única conversión de temperatura y después, entrará en modo reposo. Esto significa que cada vez que queramos hacer una lectura de temperatura, debemos darle permiso al dispositivo con ésta función, en caso contrario, leeremos el dato (o temperatura en este caso) última que realizó (¡no la actual!).

Y llegados a este punto, ya se han presentado todas las funciones fundamentales y necesarias para controlar el dispositivo DS1620, pero esta librería ofrece al usuario tres funciones adicionales más, todas dedicadas al manejo de los datos obtenidos por la lectura del dispositivo.

La primera que vamos a presentar, es una función que nos devuelve el valor absoluto del dato leído desde el DS1620.

Devuelve valor absoluto
· Función:
unsigned int DS1620_PutT_Pos (unsigned int Data)
· Data Dato leído desde el DS1620


· Ejemplo Descripción
temp = DS1620_PutT_Pos (Data);Almacena en la variable temp, el valor absoluto de la variable Data.

La otra función incluida en esta librería, consiste en empaquetar en BCD el valor leído desde el dispositivo DS1620, para ello, es de obligado cumplimiento que el dato que se quiera empaquetar esté en valor absoluto.

Empaqueta en BCD y valor absoluto datos desde DS1620
· Función:
unsigned int DS1620_BCDTemp (unsigned int Data)
· Data Dato en valor absoluto.


· Ejemplo Descripción
temp = DS1620_PutT_Pos (Data);
temp = DS1620_BCDTemp (temp);
temp = |Data|
Lo empaqueta en BCD

Hay que tener en cuenta que para un correcto funcionamiento de ésta función, el valor a empaquetar debe estar en valor absoluto (es decir, ser positivo).

Y por último, la siguiente función nos indica si el dato leído desde el DS1620 es positivo o negativo.

Indica si es positivo o negativo el dato leído desde DS1620
· Función:
unsigned char DS1620_T_is_Pos (unsigned int Data);
· Data Dato leído desde el DS1620
Dónde:
· Si es 0 = Data es positivo· Si es 1 = Data es negativo


· Ejemplo Descripción
if (DS1620_T_is_Pos(temp) == 0)
...LCD_printf ("T positiva");
else
...LCD_printf ("T negativa");
Analiza variable temp y escribe por LCD si
es positiva o negativa.

Os pongo a vuestra disposición, los archivos que componen la librería para el manejo y control del dispositivo DS1620:

EnlaceMSP430: Librería DS1620
Compilador IARCompilador MSPGCC
CC
DS1620
DS1620
DS1620
DS1620
DS1620
DS1620

Para poner en práctica los conceptos y el control del dispositivo DS1620, os dejo un ejemplo:

Ejemplo: MSP430 + DS1620 + LCD HD44780
1. ProgramaConfiguración/Control del dispositivo DS1620.


He intentado que la librería en sí sea sencilla de usar y que se acerque lo más posible a las especificaciones técnicas del DS1620, ésto facilita los conocimientos adquiridos por la lectura de la hoja de especificaciones del dispositivo y su posterior puesta en marcha mediante este tipo de librerías.

A su vez, es una librería que maneja el decimal que ofrece el fabricante y el dispositivo, esto hace que la programación sea algo más complicada pero bueno, tampoco tanto.

0 comentarios: