martes, 3 de enero de 2017

MSP432: Pulsadores + LED + RGB

Hacia tiempo que quería escribir y añadir al blog un capítulo ( y temática ) como esta, la de los microcontroladores de 32-bits, y que mejor forma que empezar con la familia MSP432 de Texas Instruments, quizás no sea el mejor microcontrolador de su categoría ( ARM Córtex M4 ) pero es la novedad de la empresa tejana. Pero a día de hoy, Texas Instruments parece ser que no está dando mucho soporte a esta familia, al parecer se está volcando en sus microcontroladores de 16-bits de memoria FRAM ( que por otro lado, son magníficos, todo hay que decirlo ).

Pero bueno, desde este blog Aqueronte, intentaremos exprimir y explicar como funcionan los periféricos internos de este microcontrolador y desarrollar drivers para dispositivos externos.

Así que lo primero que toca es presentar nuestro sistema de referencia de trabajo, en este caso, vamos a usar la placa de desarrollo MSP-EXP432P401R ( en nuestro caso, la versión negra, aunque la nueva de color rojo es la misma pero con los componentes mejor posicionados ), y el programa referente a este capítulo es sencillo, el hola mundo de la electrónica condimentado de algunos ingredientes extras.

El desarrollo será simple, tenemos dos pulsadores en la placa de desarrollo launchpad ( S1 y S2 etiquetados en la placa de desarrollo ), y un par de LED ( uno de ellos es un LED normal de color rojo, y el otro es un LED RGB ). Los pulsadores estarán asociados a cada LED, pulsador S1 estará asociado al LED rojo y el pulsador S2 estará asociado al LED RGB,

En el caso de que se pulse el botón S1, se cambiará el estado del LED rojo, y en caso de pulsar el botón S2, se iluminará o el rojo, o verde o el azul del LED RGB. Parece sencillo, y para qué vamos a decir lo contrario, lo es, pero cada vez que en nuestros proyectos aparecen botones, si el hardware no está bien diseñado, lamentablemente aparecerán molestos pulsos de rebote generados por el pulsador, los cuales pueden arruinar el propósito de nuestro proyecto.

Expuesto la finalidad de éste capítulo, este proyecto aparentemente simple ( y repito, ¡lo es! ) nos va a permitir aprender como jugar con diferentes periféricos internos de este microcontrolador, para los LEDs, configuraremos los pines de salida digital, para cada pulsador, entradas digital con interrupción externa, y para evitar, en la medida de lo posible, el efecto no deseado de rebote de los pulsadores, configuraremos un Timer para que genere un retardo y de esta manera evitar los rebotes de los pulsadores.

El firmware es el que se muestra a continuación:

/**
* @file       main.c
* @author     Manuel Caballero
* @date       10/9/2016
* @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 "msp.h"
#include "variables.h"
#include "functions.h"
#include "interrupts.h"


/**
 *  \brief     void main( void )
 *  \details   We are going to play with: MSP432P401R LaunchPad.
 *
 *          This firmware will change the state of the LED1 and LED2 ( RGB LED ) by using
 *          the switches SW1 ( LED1 ) and SW2 ( RGB LED2 ).
 *
 *        Every time that one of the switches is pressed, we will notice the case of bouncing,
 *        that is why we are going to use the TimerA0 to generate a short delay trying to
 *             get rid of this phenomenon.
 *
 *          The rest of the time, the uC will be in LPM0 low power.
 *
 *
 *  \author    Manuel Caballero
 *  \version   0.0
 *  \date      10/9/2016
 *  \pre       Code Composer Studio, Version: 6.1.3.00034.
 *  \pre       C Compiler, MSP432 TI v16.6.0.STS.
 */

void main(void)
{
    conf_CLK ();
    conf_WDT ();
    conf_IO  ();
    conf_TA ();

 
    __enable_irq();

    // Do not wake up on exit from ISR
    SCB->SCR |=  SCB_SCR_SLEEPONEXIT_Msk;

    while (1){
      __sleep ();
    }
}

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. Entre otras cosas, el firmware hace todo el trabajo en los servicios de interrupción, ya sea del cada pulsador o del Timer para evitar los rebotes no deseados, dicho retraso generado por el Timer, estará asociado al reloj auxiliar, en concreto al VLOCLK cuya frecuencia típica es de 9.4 kHz.

Un vídeo que demuestra lo explicado anteriormente se presenta a continuación:



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

MSP432: MSP432P401R + PULSADOR + TIMER + RGB + LEDs
Compilador TICompilador IAR
CC
MSP432: LEDs + TIMER + BOTÓN 
MSP432: LEDs + TIMER + BOTÓN
MSP432: LEDs + TIMER + BOTÓN
MSP432: LEDs + TIMER + BOTÓN


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

·AqueronteBlog GitHub.


Como conclusión, si estamos acostumbrados a trabajar con otras familias como la MSP430 de Texas Instruments, los periféricos de este microcontrolador de 32-bits nos serán familiares, pero con ligeras diferencias a la hora de configurarlos, y no es de extrañar ya que su núcleo es un ARM, y la documentación está repartida entre el manual de referencia de la familia del MSP432 y el propio datasheet del dispositivo, algo que no está bien pulido todavía y que puede resultar un poco lioso al principio.

0 comentarios: