lunes, 21 de enero de 2013

Encendido de LED's mediante MSP430 + Bluetooth

Introducción
En este proyecto se muestra el encendido y apagado de LED´s usando un microcontrolador MSP430G2553, un módulo Bluetooth HC-05 y un terminal Android, aunque cabe destacar puede ser algún otro microcontrolador de la familia de los MSP430 de TexasInstruments, algún otro módulo Bluetooth y alguna otra terminal con capacidad de comunicarse vía Bluetooth como una PC o una tablet.

Requerimientos Para poder llevar acabo este proyecto necesitamos:

-LaunchPad de TexasInstruments

-Módulo Bluetooth (en este caso HC-05)

-CodeComposerStudio versión 5.3 o posterior


-Terminal Android (O alguna otra con capacidad de comunicación Bluetooth)

Si se desea probar en un protoboard también se necesitan:

-Protoboard, cables, fuentes de alimentación, LED´s.

Comencemos:

Iniciaremos abriendo Code Composer Studio (en este caso la version 5.4) y en el explorador de proyectos haremos click derecho->New->CCs Project. 




Una vez que le hamos dado click en crear un nuevo proyecto, nos aparecerá un nueva ventana en la que asignaremos propiedades a nuestro proyecto, las cuales las asignaremos como se muestra a continuación:
  • Nombre: UARTGrace (alternativo)
  • Output type: Executable
  • Family: MSP430
  • Variant: MSP430G2553
  •  Connection: TI MSP430 USB1
  • Empty Grace (MSP430) Project
 y daremos click en Finish dado que ya no configuraremos nada más.

Una vez creado el proyecto, se creará una nuava pestaña al lado de la pestaña "TI Resource Explorer" llamada "main.cfg" éste archivo lo que nos muestra es la configuración de nuestro dispositivo de una forma más gráfica. Existen dos opciones en este archivo que son : "Welcome" que aparece por default y "Device Overview" que es donde nos interesa. En Welcome nos muestra información (en inglés por supuesto) acerca de lo que es Grace, etc. mientras que en Device Overview nos muestra un grafico compuesto por rectángulos que simulan cada uno de los módulos de los que se compone nuestro microcontrolador. Aquellos módulos en color azul son lo que podemos modificar mientras los que se encuentran en blanco no.

En ésta pantalla de vista del microcontrolador configuraremos el voltaje a 3.3V para el caso de que como yo, utilices una fuente de alimentación de PC para suministrar energía a tu dispositivo. En ésta misma pantalla daremos click a cualquiera de los módulos que deseemos modificar para poder tener acceso a sus parámetros. En este post estamos trabajando con el reloj interno, el módulo de configuración de los pines de propósito general y el módulo de comunicación UART.



Iniciaremos configurando el clock interno. Cuando hacemos click en dicho módulo, se abre una subpestaña en la que nos muestra cuatro opciones sobre dicho módulo "Overview", "Basic User", "Power User" y "Registers" donde estos últimos tres sirven para la configuración de dicho módulo a diferentes niveles de conocimientos por el usario, por lo que si eres un nuevo usuario de ésta familia de microcontroladores, te recomiendo usar Basic User.
Haciendo click en esta opción nos muestra un menú de opciones en la que configuraremos nuestro clock principal a 16 MHz, recordemos que mientras mayor frecuencia tenga, más rápido procesa la información. Otro de los motivos es que como usaremos una comunicación serial a 9600baudios, los 16MHz garantizan que podrá mantener la velocidad de comunicación.



Terminado de configurar el clock interno proseguimos a configurar el módulo de comunicación serial UART. En la pantalla inicial (Overview) marcamos el checkbox "Enable USC..." para activar nuestro módulo.



Entrando a Basic User seleccionamos UART y proseguimos a configurar nuestro módulo.



Activamos los pines entrada/salida del módulo UART. Configuramos a 9600 baudios y activamos las interrupciones entrada/salida del módulo como se muestra en la imágen. Nota que no es necesario activar la interrupción de salida, sin embargo lo haremos para que revises como desactivar dicha interrupción en futuros proyectos que desees hacer.



 Entrando al módulo GPIO configuraremos nuestros pines P1.0 y P1.6 como salidas. Notamos que por defecto los demás pines vienen como entradas, esto porque al estar como entradas tienen una gran impedancia y no le fectará algún descuido que tengamos poniendoles voltaje. Nota también que si usas el microcontrolador fuera del Launchpad necesitas poner en alto(al voltaje de alimentación 3.3V) el pin 16, esto dadoque es el pin reset y si no tiene voltaje el programa no comenzará.

Despues de haber configurado todos nuestros módulos con ayuda de Grace, debemos guardar todo y compilar (Build Project), esto con el fin de que Grace nos cree todos los arcivho s relacionados al código de los módulos.

Abrimos nuestro achivo main.c y escribimos el siguiente código.



El código anterior sirve para:
  • int i,j: Serán variables que ayudarán a crear retardos en tiempo con el fin de poder observar el parpadeo del LED.
  • Grace_init(); : Es solo una función creada automáticamente por Grace donde se llevan acabo las configuraciones que le indicamos anteriormente. Nodebes de precuparte por esta función.
  • El primer ciclo for solocrea un ciclo infinito mientras que los dos siguientes crean un retardo de aproximadamente 1 segundo.
  • P1OUT^=0x40 : P1OUT esta indicando  que afecta a todos los pines del registro entrada/salida 1. ^= esla función lógica XOR (OR exclusivo) es decir, si algún pin esta encendido, lo apagará o si esta apagado lo encenderá. En este caso el valor 0x40 es un numero hexadecimal que determina a qué pines estará afectando. Convirtiendo el número hexadecimal 40 a binario sería 01000000 es decir estaría afectando al pin 1.6 del registro entrada/salida 1 (P1.6).

En el explorador de proyectos abrimos la carpeta d nuestro proyecto UARTGrace->src->grace donde encontraremos los archivos del código fuente generados por Grace para los módulos. abrimos el único que nos interesa en este caso que es "InterruptVectors_init.c" y en los siguientes apartados escribiremos el siguiente código.
El primer segmento mostrado en la imágen pertenece al código de la interrupción de salida del UART, es decir, se activará siempre que se mande un dato. En este mismo ejemplo no estamos realizando algún uso con dicha interrupción, sin embargo hemos puesto el código necesario para apagar dicho interrupción en caso de que desees usarla en algún proyecto aparte dado que no se apaga sola lo que ocacionaría un cucle infinito sin salida.

El segundo segmento pertenece a la interrupcion de entrada de dato por UART, en este caso deseamos que cada vez que llegue un dato se active/desactive el otro LED según sea el caso. La primer línea de código se encarga de hacer esto mientras la segunda copia el dato de entrada desde el bufer de entrada hacia el bufer de salida, por lo que una vez que se termine esta interrupción, el programa entrará inmediatamente a la interrupción de salida y enviará el dato almacenado en bufer.


Después de todo lo anterior solo queda guardar todo y compilar nuestro proyecto. Si deseas aprender a debuggearlo o ver el resultado en un protoboard puedes ver el video de abajo.

Si deseas descargar el proyecto da click aquí.

Recursos alternativos

En el video se muestra desde como programar el microcontrolador y como debuggearlo hasta la implementación en un protoboard.



 
Cualquier duda o comentario es bien recibido.

No hay comentarios.:

Publicar un comentario