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:
PIN | NOMBRE | E/S | DESCRIPCIÓN | Dónde: | ||||||
1 | DQ | E/S | Datos | · E ≡ Entrada | ||||||
2 | CLK/#CONV | E | Conversión de Temperatura | · S ≡ Salida | ||||||
3 | #RST | E | Reset | |||||||
4 | GND | Masa | ||||||||
5 | VDD | Alimentación | ||||||||
6 | THIGH | S | Alerta Temperatura ALTA | |||||||
7 | TLOW | S | Alerta Temperatura BAJA | |||||||
8 | TCOM | 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:
#define | DS1620_DIR | P1DIR |
#define | DS1620_OUT | P1OUT |
#define | DS1620_IN | P1IN |
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:
#define | DS1620_DQ | BIT0 |
#define | DS1620_CLK | BIT1 |
#define | DS1620_RST | BIT2 |
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:
#define | fosc | 1000000 |
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_NO1SHOT | DS1620 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_ReadTemperature | Lee la temperatura. |
D1620_ReadTH | Lee valor del registro Thigh |
D1620_ReadTL | Lee valor del registro Tlow |
D1620_ReadCounter | Lee valor del registro COUNTER |
D1620_ReadSlope | Lee valor del registro SLOPE |
D1620_ReadConfig | Lee 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:
MSP430: Librería DS1620 | |||||||||||||||||||
Compilador IAR | Compilador MSPGCC | ||||||||||||||||||
C | C | ||||||||||||||||||
|
|
Para poner en práctica los conceptos y el control del dispositivo DS1620, os dejo un ejemplo:
Ejemplo: MSP430 + DS1620 + LCD HD44780 | |
1. Programa | Configuració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:
Publicar un comentario