Mostrando entradas con la etiqueta TI. Mostrar todas las entradas
Mostrando entradas con la etiqueta TI. Mostrar todas las entradas

lunes, 25 de mayo de 2015

MSP430: DMA + LM35 + MSP430FR5739

Este capítulo volveremos a usar la placa de desarrollo MSP430-EXP430FR5739 de la empresa Texas Instruments. Dicha placa de desarrollo contiene el microcontrolador MSP430FR5739 cuya novedad es la memoria interna, ya que es del tipo FRAM.

La memoria o tecnología FRAM presenta ciertas ventajas a la inmunidad al ruido y a la escritura en memoria. Pero no debemos asustarnos, los periféricos se trabajan de forma similar a cualquier microcontrolador de la familia MSP430.

El hecho de usar esta placa de desarrollo es que el microcontrolador presente: MSP430FR5739, contiene el módulo DMA ( Direct Memory Address ) y de ese periférico concreto, va a tratar este capítulo.

Para aquellos que todavía no hayáis empleado el módulo DMA en vuestros proyectos, deciros que una vez que lo sepáis controlar, será un aliado que siempre usaréis, y esto es así ya que reduce el código de programa considerablemente y lo mejor de todo, nuestro microcontrolador, su CPU, estará en modo bajo consumo mientras el módulo DMA trabaja a sus anchas, maximizándose de esta forma el ahorro de energía.

Quizás me haya emocionado un poquito cuando he dicho eso de que será un aliado que siempre usaréis, lo admito, pero vamos con un ejemplo teórico que mostrará que mi afirmación no va muy mal encaminada.

[ Ejemplo ] Imaginemos que tenemos un vector con cinco datos de temperatura procedentes de un sensor externo y que queremos transmitirlos por la UART, bien, la forma ( vamos a llamarla tradicional ) de proceder sería algo como cargar el primer dato a transmitir en el registro de la UART y esperar a que el flag asociado al registro nos avise de que ya ha finalizado la transmisión del dato, posteriormente se cargaría el segundo dato en el registro y el procedimiento sería el mismo hasta haber enviado todos los datos del vector por la UART.

Dicho procedimiento de transmitir el vector de datos de temperaturas por la UART se podría gestionar mediante interrupciones para adecuar el siguiente dato a transmitir. En dicha interrupción, la CPU del microcontrolador saldrá de su estado de bajo consumo.

Pero, ¿qué pasaría si usamos el módulo DMA? Bien, el DMA se compone de canales que podremos usarlos para conectar porciones de memoria ( incluso registros del propio microcontrolador ), así que respondiendo a la pregunta, deberíamos configurar un canal y asociar su dirección de fuente a nuestro vector con los datos de temperatura y, asociar el destino al registro de transmisión de datos de la UART.

El siguiente paso será decirle al módulo DMA cuantos datos va a manejar, en nuestro caso, cinco datos que corresponden al número de datos de temperatura que tenemos almacenado en un vector. Y ahora, solo nos queda asociar como el módulo DMA gestionará dichos datos.

En este ejemplo teórico, el objetivo es transmitir por la UART cierto número de datos alojados en un vector, por lo tanto, la manera de proceder del DMA será saber cuando un dato ya haya sido transmitido, así que asociaremos el evento de la UART ( flag  UCxTXIFG ) de paquete transmitido al módulo DMA.

De esta forma, cuando se haya transmitido un paquete por la UART, el flag UCxTXIFG se activará y el módulo DMA pondrá otro paquete para que sea transmitido, así hasta los cinco elementos que hemos configurado, y todo esto, con el microcontrolador en bajo consumo.

Para terminar este ejemplo teórico, decir que por supuesto, se puede activar el servicio de interrupción de cualquier canal del módulo DMA para que nos indique cuando se haya transmitido todos los paquetes.


Y bien, hasta aquí el ejemplo teórico ( espero haber podido transmitir la idea de lo práctico que resulta el módulo DMA ), ahora vamos con el ejemplo práctico de éste capítulo, el programa que vamos a presentar consistirá en realizar tres lecturas consecutivas del sensor externo de temperatura LM35, almacenar dichos valores en un vector y cuando se obtengan dichas lecturas, transmitirlas por el puerto serie usando la UART para que una interfaz gráfica pueda realizar la media de dichos valores y exponer su valor por pantalla, todo ello mediante el módulo DMA.

La forma de proceder será la siguiente, primero emplearemos el Timer A0  para que realice una interrupción cada tres segundos, donde se activará el conversor analógico-digital para realizar las tres lecturas consecutivas del sensor externo de temperatura LM35.

Pero previamente a que el Timer A0 entre en acción, habremos configurado dos canales del módulo DMA para gestionar todo el proceso, el primer canal ( canal 0 ), se le asociará al módulo ADC10 ( fuente ), de tal manera que cada vez que haya un dato en el registro ADC10MEM0, el DMA realizará una lectura y almacenará su contenido en un vector ( destino ), así hasta realizar las tres lecturas consecutivas.

Una vez tengamos las tres lecturas almacenadas en el vector, se producirá una interrupción del módulo DMA ( canal 0 ) donde procederemos a activar el segundo canal del DMA ( canal 1 ). Dicho canal 1, estará asociado al vector de datos de temperaturas ( fuente ) con el registro de transmisión del módulo UART ( destino ), de tal manera que el canal 1 del DMA, gestionará la transmisión de datos a través de la UART.

Una vez transmitido todos los datos, se producirá una interrupción del módulo DMA en el canal 1, donde se volverá a activar el Timer A0 para volver a empezar el proceso.


Y para hacerlo más vistoso, dicha comunicación serie será a través de un par de módulos XBee de forma inalámbrica.



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

· MSP430 Launchpad FRAM: Evidentemente, nuestra placa de desarrollo con el microcontrolador MSP430FR5739.

· Módulos XBee: Un par de ellos, en este caso, el módulo XBee es el modelo: XB24-ZB.

· LM35: Dispositivo de temperatura analógico.

· Interfaz Gráfica: Software que se ejecuta en un ordenador con independencia del sistema operativo, solo es necesario tener instalada la máquina virtual de JAVA con al menos, la versión 7 Update 45 o superior. Dicha interfaz gráfica se puede descargar más adelante junto al Firmware..


El código del programa principal, es el siguiente:

/**
* @file       main.c
* @author     Manuel Caballero
* @date       11/5/2015
* @brief      Archivo principal.
* \copyright
*      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 autoria del autor.
*/

#include < msp430.h >
#include < stdint.h >
#include "variables.h"
#include "funciones.h"
#include "interrupciones.h"



/**
 *  \brief     void main( void )
 *  \details   Vamos a trabajar con la placa de desarrollo MSP-EXP430FR5739.
 *
 *             Este programa consiste en realizar tres lecturas consecutivas de datos del sensor externo
 *             de temperatura LM35 cada, aproximadamente 3 segundos, para posteriormente, mandarlas
 *             por la UART.
 *
 *             Pero en este caso, tanto la lectura de los tres valores del ADC10_B como la transferencia
 *             de datos, se realizará por el módulo DMA.
 *
 *             Se asignará dos canales DMA:
 *
 *                · Canal 0: Lectura del resultado del módulo ADC10_B.
 *                · Canal 1: Tranmitir dichos datos por la UART.
 *
 *
 *             Se envían al ordenador por medio de un par de dispositivos XBee usando la UART.
 *
 *             El resto del tiempo, el MCU permanecerá en estado bajo consumo LPM3.
 *
 *
 *  \author    Manuel Caballero
 *  \version   0.0
 *  \date      11/5/2015
 *  \pre       Se utilizarán un par de módulos XBee XB24-ZB ( uno Coordinator y el otro End Device )
 *             a 115200 Baudios.
 *  \pre       El software de ordenador utilizado es el llamado UART1_SW, proporcionado con todos los
 *             archivos necesarios del éste proyecto.
 *  \pre       Code Composer Studio, Version: 6.0.1.00104.
 *  \pre       C Compiler, MSP430 GCC GNU v4.9.1 ( Red Hat ).
 */
void main( void )
{
   conf_WDT    ();           // Configura WDT del sistema
   conf_CLK    ();           // Configura CLK del sistema
   conf_IO     ();           // Configura Entradas/Salidas
   conf_ADC10  ();           // Configura ADC10
   conf_UART   ();           // Configura UART
   conf_TA0    ();           // Configura Timer A0
   conf_DMA    ();           // Configura DMA

   __enable_interrupt();     // Interrupciones ON.


   while(1)
   {
      LPM3;
      // __nop();            // Solo para DEBUG
   }
}

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:

MSP430FR5739: LM35 + ADC10 + UART + DMA
Compilador IARCompilador MSPGCC
CC
MSP430FR5739: LM35 + DMA
MSP430FR5739: LM35 + DMA
MSP430FR5739: LM35 + DMA
MSP430FR5739: LM35 + DMA


Podéis encontrar el código completo en nuestro repositorio GitHub:

·AqueronteBlog GitHub.


· NOTA 1: En caso de ejecutar el software UART.jar y no inicializarse, es debido a que las librerías no están instaladas debidamente. El software utiliza librerías externas como por ejemplo, para el manejo del puerto serie, dicha librería debe instalarse a mano. En el siguiente enlace hay una breve guía de como hacerlo: Instalar librerías RXTX.

jueves, 7 de mayo de 2015

MSP430: ADXL335 + MSP430FR5739

Este capítulo usaremos la placa de desarrollo MSP430-EXP430FR5739 de la empresa Texas Instruments. Dicha placa de desarrollo contiene el microcontrolador MSP430FR5739 cuya novedad es la memoria interna, ya que es del tipo FRAM.

La memoria o tecnología FRAM presenta ciertas ventajas a la inmunidad al ruido y a la escritura en memoria. Pero no debemos asustarnos, los periféricos se trabajan de forma similar a cualquier microcontrolador de la familia MSP430.

El hecho de emplear esta placa, es que trae incorporado ciertos sensores que pueden ser útiles en nuestros proyectos personales, en este caso, el ejemplo que traemos consistirá obtener lecturas del dispositivo externo ADXL335 ( acelerómetro de tres ejes ) y la enviaremos por la UART para que pueda ser representado los tres ejes en una interfaz gráfica.

Y para hacerlo más vistoso, dicha comunicación serie será a través de un par de módulos XBee de forma inalámbrica.


Pero antes pasar al firmware, vamos a explicar brevemente, como manipular los datos leídos procedentes del dispositivo externo ADXL335. Y creo que merece la pena pararse en este punto ya que el acelerómetro ADXL335, nos entrega las aceleraciones siguientes: Eje X, Eje Y y Eje Z, en valor analógico.

Teniendo en cuenta la hoja de características del dispositivo ADXL335, en el apartado de especificaciones, tenemos los siguientes datos de interés:

· Sensibilidad ( Sensitivity ): Este es un dato muy importante ya que nos indica la sensibilidad del sensor y, está relacionada con el valor de alimentación del dispositivo. En la hoja de características del dispositivo ADXL335, nos encontramos la siguiente tabla:

SENSITIVITY
Parameter
Conditions
Min
Typ
Max
Unit
Sensitivity at XOUT, YOUT, ZOUT
( Each Axis ) VS = 3 V
270
300
330
mV/g


Donde podemos interpretar que para los tres ejes, la sensibilidad cuando el sensor está alimentado a 3 V, es de 300 mV/g ( valor nominal ).


· NOTA: ¡Ojo!, el valor está dado en mV.



· Valor 0 g: Cuando medimos aceleraciones, es normal representarlas en la unidad g, y por supuesto, es imprescindible saber, cuando no hay aceleración ( 0 g ). Fijándonos en la hoja de características del dispositivo, nos encontramos con la siguiente tabla:

ZERO g BIAS LEVEL
Parameter
Conditions
Min
Typ
Max
Unit
0 g Voltage at XOUT, YOUT
VS = 3 V
1.35
1.5
1.65
V
0 g Voltage at ZOUT
VS = 3 V
1.2
1.5
1.8
V


Es fácil reconocer que no tendremos aceleraciones cuando el valor de salida analógico del dispositivo ADXL335 sea la mitad del valor de su alimentación. En el ejemplo que encontramos en la hoja de característica, nos dice que el valor de alimentación es de 3 V, por lo tanto, no tendremos aceleración cuando:

· 0 g ≡  VS/2 = 3/2 = 1.5 V


Y bueno, existen más datos, pero con estos, ya tenemos los suficientes para realizar lecturas de aceleración procedentes del dispositivo ADXL335. Ahora la siguiente cuestión a resolver, sería la siguiente:

· Cuando realizo una lectura del dispositivo ADXL335, dicha lectura están en Voltios, ¿cómo las represento en las unidades de aceleración g?


Bien, la expresión matemática que deberemos usar es la siguiente:


· [ ValorLeídoADC - VADXL335/2 ]/Sensivity


Donde:

· ValorLeídoADC≡Es el valor obtenido de cada eje por nuestro microcontrolador
· VADXL335/2≡Es el valor 0 g
· Sensivity≡Parámetro de sensibilidad del dispositivo ADXL335


Muy bien, ¿pero como se usa esa expresión? Pongamos un par de ejemplos prácticos, supongamos que nuestro microcontrolador posee un módulo ADC de 10-bits y su expresión es la siguiente:


· N = 1023·[ ( Vin - VR- )/( VR+ - VR- ) ]


Donde:

· N≡Valor digital obtenido por el módulo ADC de nuestro microcontrolador.
· Vin≡Valor analógico correspondiente al valor digital leído.
· VR-≡Valor de referencia R-
· VR+≡Valor de referencia R+


Por lo tanto, el valor que nos interesa es Vin, despejamos para obtenerlo:

· Vin = VR- + N·( VR+ - VR- )/1023


Ahora si, vamos con el primer ejemplo: [ Ejemplo 1 ] Supongamos que realizamos una lectura del Eje X del dispositivo ADXL335 con nuestro microcontrolador mediante el módulo ADC 10-bits, obteniendo un resultado de 511.

Teniendo en cuenta que el acelerómetro está alimentado a 3 V, y el valor de referencia positivo es de 3 V y el negativo es de 0 V, obtener la aceleración del Eje X en unidad g.


Realizamos una recopilación de datos:

· N=511.
· VADXL335=3 V.
· VR-=0 V
· VR+=3 V

Lo primero que debemos obtener, es el valor leído en Voltios:

· Vin = VR- + N·( VR+ - VR- )/1023 = 0 + 511·( 3 - 0 )/1023 ≈ 1.498534 ≈ 1.5 V

El otro dato que necesitamos en la sensibilidad que debemos aplicar, como ya se ha explicado, dicho parámetro depende del valor de alimentación del acelerómetro ADXL335, en este ejemplo, está alimentado a 3 V, por lo tanto, el valor de sensibilidad será de 300 mV ( valor nominal ).

Así que ya disponemos de todos los valores necesarios para obtener el valor de aceleración del Eje X, sustituimos valores en la expresión:


· Aceleración Eje X: [ ValorLeídoADC - VADXL335/2 ]/Sensivity = [ 1.5 - 3/2 ]/( 300·10-3 ) = 0 g.


Por lo tanto, la aceleración del Eje X leído es de 0 g.



[ Ejemplo 2 ] Supongamos que realizamos una lectura del Eje Z del dispositivo ADXL335 con nuestro microcontrolador mediante el módulo ADC 10-bits, obteniendo un resultado de 735.

Teniendo en cuenta que el acelerómetro está alimentado a 3.6 V, y el valor de referencia positivo es de 3 V y el negativo es de 0 V, obtener la aceleración del Eje Z en unidad g.


Realizamos una recopilación de datos:

· N=735.
· VADXL335=3.6 V.
· VR-=0 V
· VR+=3 V

Lo primero que debemos obtener, es el valor leído en Voltios:

· Vin = VR- + N·( VR+ - VR- )/1023 = 0 + 735·( 3 - 0 )/1023 ≈ 2.155425 ≈ 2.16 V

El otro dato que necesitamos en la sensibilidad que debemos aplicar, como ya se ha explicado, dicho parámetro depende del valor de alimentación del acelerómetro ADXL335, en este ejemplo, está alimentado a 3.6 V, por lo tanto, el valor de sensibilidad será de 360 mV ( valor nominal ).

Así que ya disponemos de todos los valores necesarios para obtener el valor de aceleración del Eje Z, sustituimos valores en la expresión:


· Aceleración Eje Z: [ ValorLeídoADC - VADXL335/2 ]/Sensivity = [ 2.16 - 3.6/2 ]/( 360·10-3 ) ≈ 1 g.


Por lo tanto, la aceleración del Eje Z leído es de 1 g.



Y bien, hasta aquí la parte teórica, vamos con la parte práctica. Nuestro firmware consistirá en que un microcontrolador con un módulo ADC 10-bits obtenga lecturas de los tres ejes procedentes del acelerómetro ADXL335 y los mande por la UART para que pueda ser representado por pantalla de forma gráfica.


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

· MSP430 Launchpad FRAM: Evidentemente, nuestra placa de desarrollo con el microcontrolador MSP430FR5739 y el dispositivo externo ADXL335.

· Módulos XBee: Un par de ellos, en este caso, el módulo XBee es el modelo: XB24-ZB.

· Interfaz Gráfica: Software que se ejecuta en un ordenador con independencia del sistema operativo, solo es necesario tener instalada la máquina virtual de JAVA con al menos, la versión 7 Update 45 o superior. Dicha interfaz gráfica se puede descargar más adelante junto al Firmware..


El código del programa principal, es el siguiente:

/**
* @file       main.c
* @author     Manuel Caballero
* @date       27/4/2015
* @brief      Archivo principal.
* \copyright
*      AqueronteBlog@gmail.com
*
* Este archivo es propiedad intelectual del blog Aqueronte,
* cuya direccion web, es la siguiente:
*
*     http://unbarquero.blogspot.com/
*
* Se permite cualquier modificacion del archivo siempre y cuando
* se mantenga la autoria del autor.
*/

#include < msp430.h >
#include < stdint.h >
#include "variables.h"
#include "funciones.h"
#include "interrupciones.h"



/**
 *  \brief    void main( void )
 *  \details  Vamos a trabajar con la placa de desarrollo MSP-EXP430FR5739 y los
 *            periféricos disponibles externos e internos.
 *
 *            Este programa consiste en realizar una lectura de datos del sensor externo
 *            ADXL335 ( acelerómetro de 3 ejes ), aproximadamente 0.1 segundos ( 10 Hz ).
 *
 *            Una vez obtenidos los datos, se envían al ordenador por medio de un par de
 *            dispositivos XBee usando la UART. El resto del tiempo, el MCU permanecerá
 *            en estado bajo consumo LPM3.
 *
 *
 *
 *  \author    Manuel Caballero
 *  \version   0.0
 *  \date      27/4/2015
 *  \pre       Se utilizarán un par de módulos XBee XB24-ZB ( uno Coordinator y el otro End Device )
 *             a 115200 Baudios.
 *  \pre       El software de ordenador utilizado es el llamado UART1_SW, proporcionado con todos los
 *             archivos necesarios del éste proyecto.
 *  \pre       Code Composer Studio, Version: 6.0.1.00104.
 *  \pre       C Compiler, MSP430 GCC GNU v4.9.1.
 */
void main( void )
{
   conf_WDT    ();           // Configura WDT del sistema
   conf_CLK    ();           // Configura CLK del sistema
   conf_IO     ();           // Configura Entradas/Salidas
   conf_ADC10  ();           // Configura ADC10
   conf_UART   ();           // Configura UART
   conf_TA0    ();           // Configura Timer A0


   __enable_interrupt();     // Interrupciones ON.


   while(1)
   {
      LPM3;
      // __nop();            // Solo para DEBUG
   }
}

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:

MSP430FR5739: ADXL335+ LEDs
Compilador IARCompilador MSPGCC
CC
MSP430FR5739: ADXL335+ LEDs
MSP430FR5739: ADXL335+ LEDs
MSP430FR5739: ADXL335+ LEDs
MSP430FR5739: ADXL335+ LEDs


Podéis encontrar el código completo en nuestro repositorio GitHub:

·AqueronteBlog GitHub.


· NOTA 1: En caso de ejecutar el software UART.jar y no inicializarse, es debido a que las librerías no están instaladas debidamente. El software utiliza librerías externas como por ejemplo, para el manejo del puerto serie, dicha librería debe instalarse a mano. En el siguiente enlace hay una breve guía de como hacerlo: Instalar librerías RXTX.

miércoles, 25 de marzo de 2015

MSP430: NTC + MSP430FR5739

Este capítulo es diferente a los anteriores ya que vamos a usar la placa de desarrollo MSP430-EXP430FR5739 de la empresa Texas Instruments. Dicha placa de desarrollo contiene el microcontrolador MSP430FR5739 cuya novedad es la memoria interna, ya que es del tipo FRAM.

La memoria o tecnología FRAM presenta ciertas ventajas a la inmunidad al ruido y a la escritura en memoria. Pero no debemos asustarnos, los periféricos se trabajan de forma similar a cualquier microcontrolador de la familia MSP430.

El hecho de emplear esta placa, es que trae incorporado ciertos sensores que pueden ser útiles en nuestros proyectos personales, en este caso, el ejemplo que traemos consistirá en leer la temperatura obtenida por medio del dispositivo externo NTC ( termistor ) y la enviaremos por la UART cada aproximadamente 3 segundos.

Del mismo modo, por medio de la interfaz gráfica, podremos cambiar el estado de los 8 LEDs que dispone la placa de desarrollo.

Y para hacerlo un poco más vistoso, dicha comunicación serie será a través de un par de módulos XBee de forma inalámbrica.

Antes de seguir, decir que un termistor ( NTC ) es dispositivo que cambia su resistencia dependiendo de la temperatura. El dato clave que deberíamos saber acerca de este dispositivo es su parámetro BETA, que es el que necesitaremos para calcular la temperatura incidente.

Pero desgraciadamente, Texas Instruments no ha ofrecido ningún tipo de información acerca de este NTC, solo que su valor nominal es de 100 kΩ y su conexión en el circuito ( recomiendo mirar las conexiones en la guía que pone a disposición Texas Instruments: MSP430FR5739 ).

Así que para este ejemplo, he puesto unos valores nominales del parámetro BETA que se podrá escoger desde la interfaz gráfica.



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

· MSP430 Launchpad FRAM: Evidentemente, nuestra placa de desarrollo con el microcontrolador MSP430FR5739 y el dispositivo externo NTC.

· Módulos XBee: Un par de ellos, en este caso, el módulo XBee es el modelo: XB24-ZB.

· Interfaz Gráfica: Software que se ejecuta en un ordenador con sistema operativo Windows con al menos, la versión .NET Framework 4.0. Dicha interfaz gráfica se puede descargar más adelante junto al Firmware.


El código del programa principal, es el siguiente:

/**
* @file      main.c
* @author    Manuel Caballero
* @date      20/3/2015
* @brief     Archivo principal.
* \copyright
*      AqueronteBlog@gmail.com
*
* Este archivo es propiedad intelectual del blog Aqueronte,
* cuya direccion web, es la siguiente:
*
*     http://unbarquero.blogspot.com/
*
* Se permite cualquier modificacion del archivo siempre y cuando
* se mantenga la autoria del autor.
*/

#include < msp430.h >
#include < stdint.h >
#include "variables.h"
#include "funciones.h"
#include "interrupciones.h"



/**
 *  \brief     void main( void )
 *  \details   Vamos a trabajar con la placa de desarrollo MSP-EXP430FR5739 y los
 *             periféricos disponibles externos e internos.
 *
 *             Este programa consiste en realizar una lectura de datos del sensor externo
 *             NTC cada, aproximadamente 3 segundos.
 *
 *             Así mismo, desde la interfaz gráfica se podrá cambiar el estado de los 8
 *             LEDs.
 *
 *             Una vez obtenidos los datos, se envían al ordenador por medio de un par de
 *             dispositivos XBee usando la UART. El resto del tiempo, el MCU permanecerá
 *             en estado bajo consumo LPM3.
 *
 *
 *
 *  \author    Manuel Caballero
 *  \version   0.0
 *  \date      20/3/2015
 *  \pre       La NTC disponible, TI no ha dado ningún dato técnico sobre la misma.
 *  \pre       Se utilizarán un par de módulos XBee XB24-ZB ( uno Coordinator y el otro End Device )
 *             a 9600 Baudios.
 *  \pre       El software de ordenador utilizado es el llamado UART1_SW, proporcionado con todos los
 *             archivos necesarios del éste proyecto.
 *  \pre       Code Composer Studio, Version: 6.0.1.00040.
 *  \pre       C Compiler, MSP430 GCC GNU v4.9.1.
 */
void main( void )
{
   conf_WDT    ();           // Configura WDT del sistema
   conf_CLK    ();           // Configura CLK del sistema
   conf_IO     ();           // Configura Entradas/Salidas
   conf_ADC10  ();           // Configura ADC10
   conf_UART   ();           // Configura UART
   conf_TA0    ();           // Configura Timer A0


   __enable_interrupt();     // Interrupciones ON.


   while(1)
   {
      LPM3;
      // __nop();            // Solo para DEBUG
   }
}

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:

MSP430FR5739: NTC + LEDs
Compilador IARCompilador MSPGCC
CC
MSP430FR5739: NTC + LEDs
MSP430FR5739: NTC + LEDs
MSP430FR5739: NTC + LEDs
MSP430FR5739: NTC + LEDs

Ahora, en el archivo a descargar, a parte del programa con todas las librerías necesarias empleadas para este programa, se han añadido toda la documentación en formato doxygen.

lunes, 23 de febrero de 2015

MSP430: nRF24L01+

En este capítulo, vamos a trabajar con el dispositivo externo nRF24L01+ de la empresa Nordic Semiconductor. Dicho dispositivo es un trasnciver, es decir, un dispositivo que puede actuar tanto de receptor como de transmisor de paquetes/datos de forma inalámbrica y cuya comunicación con un microcontrolador es mediante el bus SPI.

La ventaja de este dispositivo, es principalmente su precio (bastante reducido para las prestaciones que ofrece) y que no requiere de muchos componentes externos para funcionar. En el mercado, se pueden encontrar bastantes placas de desarrollo con las que trabajar con el nRF24L01+, en nuestro caso, se ha escogido la que se muestra a continuación:


DISPOSITIVO nRF24L01+



Las principales características del dispositivo nRF24L01+ son las que se muestran a continuación:

CARACTERÍSTICAS nRF24L01+
· Banda 2.4GHz ISM.
· 6 data pipe MultiCeiver.
· Hasta 2Mbps de transmisión de datos.
· 11.3mA TX a 0dBm output power.
· Modos de bajo consumo disponibles.
· 12.3mA RX a 2Mbps air data rate.

Como ya se ha comentado, la manera de comunicarse con el nRF24L01+ es mediante el bus SPI, pero dicho dispositivo incluye un pin más llamado #IRQ que es bastante útil en vistas al ahorro de energía, ya que dicho pin se activará entre otras señales disponibles, cuando se haya transmitido un paquete o cuando se reciba un paquete, de esta manera, podremos disponer nuestro microcontrolador en estado de bajo consumo.

Otras funciones interesantes y a destacar del nRF24L01+ son:

  • ACK Automático: Dicho de otra forma, si se activa dicha función, cada vez que enviemos un paquete y se ha transmitido correctamente y recibido por el receptor, éste le enviará al transmisor un ACK, que podremos leer desde el registro STATUS del dispositivo. En otras palabras, es una herramienta de garantía de que nuestro paquete enviado ha sido recibido por el receptor.

  • Reenvío de paquetes: Si por cualquier motivo, el paquete que queremos enviar no ha sido posible su envío, podemos configurar el dispositivo nRF24L01+ de manera que pueda intentar su reenvío hasta en 15 ocasiones.

Para ver toda la documentación disponible sobre éste dispositivo, el siguiente enlace es el apartado que la empresa Nordic tiene sobre su producto: nRF24L01+.


Y bien, después de una breve introducción del dispositivo nF24L01+, vamos a ponernos a trabajar. Para ello, necesitaremos dos MSP430 Launchpad y en este caso, usaremos el microcontrolador MSP430G2553. Dicho microcontrolador dispone del periférico interno USCI SPI Mode encargado de controlar el bus SPI de manera automática mediante hardware.

El programa que vamos a emplear para tal propósito, consistirá en obtener una lectura del sensor interno de temperatura del microcontrolador cada tres segundos, y una vez obtenida la temperatura, enviarla de forma inalámbrica por medio del dispositivo nRF24L01+.

Como vamos a tener dos placas Launchpad funcionando, uno será el transmisor (leerá la temperatura interna y la enviará por el dispositivo nRF24L01+) y la otra será el receptor (recogerá el paquete recibido por el dispositivo nRF24L01+ y dicho paquete lo mandará al PC mediante la UART).

Tanto el transmisor como el receptor estarán en modo bajo consumo, en este caso, el transmisor estará en el modo LPM3 y el receptor LPM4.


Para el receptor, el envío de paquetes se usará el conversor USB <---> RS-232 que vamos a usar, es uno externo, concretamente el CP2102 (enlace del fabricante).

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 MSP430G2553 (dos placas, una será el transmisor y otra el receptor).

· Módulo B75937: Conversor USB <---> RS-232 externo basado en el dispositivo CP2102.

· Interfaz Gráfica: Software que se ejecuta en un ordenador con sistema operativo Windows con al menos, la versión.NET Framework 4.0. Dicha interfaz gráfica se puede descargar más adelante junto al Firmware.

· nRF24L01+: Dispositivo externo capaz de establecer comunicación inalámbrica. Necesitaremos dos de ellos.


En este caso, habrá dos códigos fuentes, uno para el transmisor y otro para el receptor, os pondré aquí el código del receptor y más abajo, en el área de las descargas, podréis obtener ambos firmwares como las librerías necesarias para controlar el dispositivo nRF24L01+:


/**
* @file     main.c
* @author   Manuel Caballero
* @date     17/2/2015
* @brief    Archivo principal.
* \copyright
*
*         AqueronteBlog@gmail.com
*
* Este archivo es propiedad intelectual del blog Aqueronte,
* cuya direccion web, es la siguiente:
*
*  http://unbarquero.blogspot.com/
*
* Se permite cualquier modificacion del archivo siempre y cuando
* se mantenga la autoria del autor.
*/

#include < msp430.h >
#include < stdint.h >
#include "variables.h"
#include "funciones.h"
#include "interrupciones.h"
#include "NRF24L01.h"



/**
 *  \brief     void main( void )
 *  \details   Este programa consiste en leer datos de forma inalámbrica usando el dispositivo
 *          nRF24L01+.
 *
 *          Una vez lea dichos datos, se mandarán por la UART activándo el LED1 ( LED Rojo de
 *          la Launchpad ).
 *
 *          El microcontrolador estará en modo bajo consumo ( LPM4 ) y no despertará hasta que el
 *          dispositivo nRF24L01+ indique que ha recibido datos para leer.
 *
 *
 *  \author    Manuel Caballero
 *  \version   0.0
 *  \date      17/2/2015
 *  \pre       El código presente es SOLO para el RECEPTOR.
 *  \pre       El dispositivo nRF24L01+ se conecta al periférico USCI_B0 en modo SPI del microcontrolador.
 *  \pre       Asegurarse de que el LED1 ( LED Rojo ) está conectado al pin P1.0.
 *  \pre       Asegurarse de que que concuerden las siguientes señales:
 *
 *       - CE   ( nRF24L01+ ): P2.0
 *       - CSN  ( nRF24L01+ ): P2.1
 *       - #IRQ ( nRF24L01+ ): P2.2
 *
 *  \pre       Code Composer Studio, Version: 6.0.1.00040.
 *  \pre       C Compiler, MSP430 GCC GNU v4.9.1.
 */
void main( void )
{
  conf_WDT      ();         // Configura WDT del sistema
  conf_CLK      ();         // Configura CLK del sistema
  conf_IO       ();         // Configura Entradas/Salidas
  conf_SPI_B0   ();         // Configura USCI_B0 --> SPI
  conf_UART     ();         // Configura Uart

  nRF24L01_init ();     // Configura nRF24L01+


  __enable_interrupt();     // Interrupciones ON.


  while(1)
  {
     LPM4;

     P1OUT   |= BIT0;      // LED1 ON

     pBuff   =  nRF24L01_WriteRead (R_REGISTER, R_RX_PAYLOAD, 0, 2); // Lectura del nRF24L01+ ( 2-Bytes )
     nRF24L01_reset ();               // Reset a flags ( registro STATUS )

     TX_Buff  = 1;
     IE2     |=  UCA0TXIE;  // Interrupción Tx ON ( empieza a enviar paquetes por la UART )
  }
}

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: nRF24L01+ & UART
Compilador IARCompilador MSPGCC
CC
MSP430: nRF24L01+ 
MSP430: nRF24L01+
MSP430: nRF24L01+
MSP430: nRF24L01+

· NOTA 1: En caso de que en el Software empleado  no reconozca ningún puerto COM, es síntoma de que no se tiene los drivers necesarios del dispositivo CP2102, por lo que se deberán instalar para un uso correcto, ya que el ordenador no lo reconoce.

· NOTA 2: En este capítulo se han usado imágenes de terceros recogidas de Internet.

· NOTA 3: Ahora, en el archivo a descargar, a parte del programa con todas las librerías necesarias empleadas para este programa, se han añadido toda la documentación en formato doxygen.

viernes, 6 de junio de 2014

MSP430: Timer TA0 PWM Piano

En este capítulo vamos a trabajar con el módulo interno TimerA, en realidad, ya hay varios ejemplos de como trabajar con dicho periférico y es más, lo hemos estado usando como temporizador (una de sus funciones). Pero la causa de dedicarle un capítulo en exclusiva no es por la configuración que puede adoptar de temporizador, más bien es por otro tipo de configuración la cual, suele ser interesante a la hora de generar señales con una frecuencia determinada o dicho de otra manera más formal, generar una señal de salida modulada, en sus siglas anglosajonas: PWM.

Por lo tanto, este capítulo se basa en generar señales de salida con una anchura de pulso determinada usando para ello, el TimerA.

Y para ello, tenemos a nuestra disposición dos registros fundamentales:


  • TAxCCR0: Determina la anchura de la señal de salida.
  • TAxCCR1: Determina la modulación de dicha señal: 0%, 50%, ...., 100%


Con el par de registros arriba mencionados, podremos obtener bastantes tipos de señal de salida dependiendo de como configuremos los bits: OUTMODx.

Para ampliar y ver los tipos de señales de salida dependiendo de dichos bits y de la configuración del TimerA, aconsejo que se vea el apartado: 12.2.5 Output Unit del documento: slau144j.

El ejemplo que va tener el propósito de ilustrar como configurar el TimerA en modo PWM y generar las señales de salidas deseadas, consiste en simular las notas musicales de un piano. Se sabe que cada nota musical tiene asociada una frecuencia determinada tal y como se muestra en la siguiente tabla:

Frecuencias de Notas Musicales
Nomenclatura Latina
Nomenclatura Alfabética
Frecuencia, Hz
· Do · C
261.63
· Reb (Do#) · C#
277.18
· Re · D
293.66
· Mib (Re#) · D#
311.13
· Mi · E
329.63
· Fa · F
349.23
· Solb (Fa#) · F#
369.99
· Sol · G
392.00
· Lab (Sol#) · G#
415.30
· La · A
440.00
· Sib (La#) · A#
466.16
· Si · B
493.88

Pues bien, nuestro ejemplo consistirá en un software PC que simule las teclas de un piano, y al ser pulsada una de ellas, se enviará la información de que tecla (nota musical) se ha pulsado para ser reproducida por nuestro microcontrolador. Para tal fin, configuraremos el TimerA en modo PWM y generaremos una señal de salida a la frecuencia de dicha nota pulsada.

Y para darle un poco más de realismo, es decir, intentar que nuestra placa de desarrollo se parezca un poco más a un piano, se va a emplear el TimerA TA1 como controlador o mejor dicho, como la duración máxima que será reproducida una nota musical (siempre y cuando no se pulse ninguna otra tecla más).

La idea es transformar nuestra placa de desarrollo MSP430 LaunchPad en un piano (simplemente con las notas principales).

Para conectar el PC a nuestra placa usaremos el conversor USB <---> RS-232, es uno externo, concretamente el CP2102 (enlace del fabricante). Y hay que tener en cuenta algo muy importante, y es que al ser la familia MS430G, microcontroladores de bajo consumo, la señal que se genera también lo serán y esto a la hora de generar sonidos es un problema, ya que no tendrá la suficiente potencia para que el sonido sea audible (el volumen sea lo suficientemente alto para ser escuchado).

Es por ello que necesitaremos una etapa amplificadora externa para adaptar nuestra señal PWM del microcontrolador a las necesidades de un altavoz (speaker). En mi caso, he conectado directamente la señal de salida PWM ofrecida por el microcontrolador a una radio convencional (radio cassette) por su entrada de micrófono. Dicha radio realizará o se usará como etapa amplificadora.

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 MSP430G2553.

· Módulo B75937: Conversor USB <---> RS-232 externo basado en el dispositivo CP2102.

· Interfaz Gráfica: Software que se ejecuta en un ordenador con sistema operativo Windows con al menos, la versión.NET Framework 4.0. Dicha interfaz gráfica se puede descargar más adelante junto al Firmware.

· Radio Convencional (Radio Cassette): Será tanto la etapa amplificadora como el altavoz (speaker).


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:          3-June-14                                
File Version:  vs0.0                                     
Compiler:      IAR 5.60.2 

Author:        Manuel Caballero                           
Company:       Hades                          
                       
----------------------------------------------------------------------
                                                      
Notes:  Este programa tiene el propósito de emplear el Timer TA0 como
        modulación de anchura de pulso (PWM).

        Para tal propósito, se ha diseñado un programa que emula las
        notas principales de un piano.

        Mediante un software de PC que emula a un piano, se le enviará
        al MSP430 LaunchPad que configure el PWM de tal manera que 
        genere una onda que coincida en frecuencia a la nota musical
        enviada por el software del PC.

        Dicha onda generada por el PWM tendrá una duración máxima de 
        1s, a no ser que se vuelva o se pulse otra tecla del software
        del PC.

        El microcontrolador estará en modo bajo consumo LPM1 hasta
        que reciba una orden desde el ordenador.

        Es importante destacar que al ser la familia MSP430 de bajo 
        consumo, su salida va acorde a dicha filosofía por lo que 
        generar sonidos directamente sin una etapa amplificadora tendrá
        como consecuencia que dicho sonido generado, su volumen será muy
        flojito.

        Para este ejemplo, se ha conectado directamente la salida del
        PWM del microcontrolador a una radio convencional por la entrada
        del micrófono. Consiguiéndose, amplificar la señal PWM y que ésta
        sea audible.
*/

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


void main( void )
{ 
  unsigned char error = 0;      // Variable que indica lo siguiente:
                                //      · error = 1: Se ha producido un error. Apaga todo.
                                //      · error = 0: Todo correcto.
  
  conf_WDT    ();                // Configura WDT del sistema
  conf_CLK    ();                // Configura CLK del sistema  
  conf_TimerA ();                // Configura TimerA  
  conf_IO     ();                // Configura Entradas/Salidas
  conf_UART   ();                // Configura UART 
  
  __enable_interrupt();          // Interrupciones ON.
  
  
  while(1)
  {     
    LPM1;
    
    error      = 0;                     // Reset variable: error
    
    TA0CTL     = MC_0 + TACLR;          // Timer TA0 OFF: No hay sonido
    
    
    switch (datoUART)
    {
      case Si:
      // Nota musical: Si  ~ 493.88 kHz
        TA0CCR0        = 24297;  
        TA0CCR1        = 12149;
        break;

      case Sib:
      // Nota musical: Sib ~ 466.16 kHz
        TA0CCR0        = 25742;  
        TA0CCR1        = 12871;
        break;

      case La:
      // Nota musical: La  ~ 440.00 kHz
        TA0CCR0        = 27273;  
        TA0CCR1        = 13637;
        break;

      case Lab:
      // Nota musical: Lab ~ 415.30 kHz
        TA0CCR0        = 28895;  
        TA0CCR1        = 14448;
        break;

      case Sol:
      // Nota musical: Sol ~ 392.00 kHz
        TA0CCR0        = 30612;  
        TA0CCR1        = 15306;
        break;

      case Solb:
      // Nota musical: Solb ~ 369.99 kHz
        TA0CCR0        = 32433;  
        TA0CCR1        = 16217;
        break;

      case Fa:
      // Nota musical: Fa   ~ 349.23 kHz
        TA0CCR0        = 34361;  
        TA0CCR1        = 17181;
        break;

      case Mi:
      // Nota musical: Mi   ~ 329.63 kHz
        TA0CCR0        = 36404;  
        TA0CCR1        = 18202;
        break;

      case Mib:
      // Nota musical: Mib  ~ 311.13 kHz
        TA0CCR0        = 38569;  
        TA0CCR1        = 19285;
        break;

      case Re:
      // Nota musical: Re   ~ 293.66 kHz
        TA0CCR0        = 40864;  
        TA0CCR1        = 20432;
        break;

      case Reb:
      // Nota musical: Reb  ~ 277.18 kHz
        TA0CCR0        = 43293;  
        TA0CCR1        = 21647;
        break;

      case Do:
      // Nota musical: Do   ~ 261.63 kHz
        TA0CCR0        = 45866;  
        TA0CCR1        = 22933;
        break;

      default:
      // Ha habido un error
        error = 1;
        break;        
    }
    
    if (error == 0)
    {
    // Ningún Error: Activa TA0 y TA1
      TA0CTL     = TASSEL_2 + MC_1 + TACLR;      // SMCLK, TA0 Up Mode
      TA1CTL     = TASSEL_1 + MC_1 + TACLR + TAIE;      // ACLK, TA1 Up Mode y TA1 Produce interrupción
    }
  }
}

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, donde se interpretará la canción de Feliz Cumpleaños (Happy Birthday):



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

MSP430: DS1624 + UART
Compilador IARCompilador MSPGCC
CC
MSP430: Timer TA0 PWM Piano
MSP430: Timer TA0 PWM Piano
MSP430: Timer TA0 PWM Piano
MSP430: Timer TA0 PWM Piano

· NOTA 1: En caso de que en el Software empleado para simular un piano no reconozca ningún puerto COM, es síntoma de que no se tiene los drivers necesarios del dispositivo CP2102, por lo que se deberán instalar para un uso correcto, ya que el ordenador no lo reconoce.

· NOTA 2: El PWM se suele usar mucho para controlar la velocidad de motores, entre otras cosas.

· NOTA 3: En este ejemplo se ha usado como etapa amplificadora una radio convencional (radio cassette) para adaptar la señal de salida generada PWM a un sonido audible. En caso de conectar dicha salida PWM al altavoz, el sonido será muy débil.

· NOTA 4: Tengo que reconocer que la canción: Feliz Cumpleaños (Happy Birthday) que se escucha en el vídeo, la he interpretado de manera muy modesta (mi nivel de piano es nulo, aunque espero mejorar).

jueves, 29 de mayo de 2014

MSP430: XBee + Sensor Temperatura Interna

Este capítulo tiene el propósito de mostrar como configurar, trabajar y establecer mediante una comunicación inalámbrica nuestra placa de desarrollo MSP430 LaunchPad con un ordenador mediante los módulos XBee de la empresa Digi.

Vamos a trabajar sobre la placa MSP430 Launchpad y en este caso, usaremos el microcontrolador MSP430G2553.

El programa que vamos a emplear para tal propósito, consistirá en obtener una lectura del sensor interno de temperatura del microcontrolador cada dos segundos, y una vez obtenida, de manera inalámbrica al ordenador.

Además, en dicho software de PC, se podrá cambiar los estados de los LEDS incorporados en la placa MSP430 Launchpad.

Para orientarse u saber como se han configurado los módulos XBee, se recomienda ver y descargar el archivo de la breve guía o manual de los módulos XBee, en el siguiente capítulo: XBee.

 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 MSP430G2553.
· Módulos XBee: Un par de ellos para establecer una comunicación inalámbrica.
· Leds: Ambos leds (LED1 y LED2) incorporados en la placa MSP430 Launchpad. 
· Interfaz Gráfica: Software que se ejecuta en un ordenador con sistema operativo Windows con al menos, la versión .NET Framework 4.0. Dicha interfaz gráfica se puede descargar más adelante junto al Firmware.


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:           21-May-14                                
File Version:   vs0.0                                     
Compiler:       IAR 5.60.2 [Kickstart]   

Author:         Manuel Caballero                           
Company:        Hades                          
                       
----------------------------------------------------------------------
                                                      
Notes:   Este programa tiene el propósito de enviar mediante el módulo
         externo XBee el dato recogido por el sensor interno de 
         temperatura.

         Así mismo, se podrán cambiar los estados de los LEDS de la placa
         MSP430 Launchpad por medio de una interfaz gráfica PC.

         El microcontrolador estará en modo bajo consumo LPM1 hasta
         que reciba una orden desde el ordenador.
*/


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


void main( void )
{  
   conf_WDT    ();           // Configura WDT del sistema
   conf_CLK    ();           // Configura CLK del sistema                                              
   conf_IO     ();           // Configura Entradas/Salidas
   conf_ADC10  ();           // Configura ADC10 (Sensor Interno Temperatura)
   conf_UART   ();           // Configura UART
   conf_TimerA ();           // Configura Timer A 
  
   __enable_interrupt();     // Interrupciones ON.
  
  
   while(1)
   {     
     TA0CTL   |= TAIE;       // Interrupción TimerA ON
    
     LPM1;                   // Modo bajo consumo: LPM1
    
     if (datoUART == '0')
       P1OUT ^= BIT0;        // Cambia estado LED1
     else
       P1OUT ^= BIT6;        // Cambia estado LED2
   }
}

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: XBEE + Sensor Temperatura Interna
Compilador IARCompilador MSPGCC
CC
MSP430: XBEE + Sensor Temp Int
MSP430: XBEE + Sensor Temp Int
MSP430: XBEE + Sensor Temp Int
MSP430: XBEE + Sensor Temp Int

Quien siga este blog con asiduidad, en concreto el apartado a la familia del microcontrolador MSP430, puede apreciar que este programa es idéntico a uno que tenemos ya expuesto, con la diferencia de que en vez de enviar los datos por el conversor RS232-USB, lo hacemos de forma inalámbrica mediante los módulos XBee.

Así, se puede apreciar la facilidad a la hora de trabajar con dichos módulos XBee ya que por parte de la programación del microcontrolador, no hay que hacer ni adaptar nada, solo es necesario configurar los módulos XBee mediante el software gratuito XCTU.