MSP430: Una guía de referencia en castellano

MSP430: UNA GUÍA DE REFERENCIA EN CASTELLANO

He observado que una gran cantidad de las consultas que se realiza en foros de electrónica es cómo iniciarse con el MSP430. Quizá sea debido a que es uno de los más utilizados en sistemas de muy reducido consumo eléctrico, que el mismo está incorporado en multitud de plataformas para desarrollo de aplicaciones en auge, como redes de sensores inalámbricas, sistemas embebidos, sistemas zigbee, equipos de internet of things, etc

De modo que, si bien es imposible en una entrada de blog estudiar a fondo un microcontrolador, y más aún uno como el MSP430 ,  sin embargo, sí que me he propuesto el presentar una guía de referencia para los usuarios de este microcontrolador, y a su vez, tratar que esta guía sea lo suficientemente asequible como para poder ser usada como instrumento para saber por donde empezar con el MSP430.

Con el fin de ser lo más concreto posible, se trata aquí uno de los microntroladores de esta gama, el MSP430F149, ya que es uno de los que más me gustan, pues al ser de los que menos RAM tienen (apenas 2Kb) suponen realmente un reto el realizar productos complejos sobre el mismo.  De todos modos, se deja al lector la obligación de consultar las datasheets del microcontrolador MS430 concreto con el que esté trabajando o con el que pretenda trabajar, recordando que esto es tan sólo una guía de introducción y de consulta rápida.

No se ha introducido aquí una referencia al controlador de la memoria flash interna del micro, ya que tengo intención de publicar en breve un artículo sobre la implementación de un bootloader para este micro, y allí incorporaré el cómo trabajar con su controlador de flash interna.

Todas las imágenes de este artículo se han obtenido del documento [1], el cual está distribuido gratuitamente en internet por el autor.

EL MICROCONTROLADOR MSP430

Los microcontroladores MSP430 emplean una arquitectura de Von-Neumann, lo que significa que memoria y periféricos comparten mapa de memoria.

Estos microcontroladores de 16 bits constituyen una familia de muy bajo consumo con una avanzada arquitectura y un juego de periféricos muy completo. En este documento se introducen los conceptos básicos que tienen algún interés en nuestra aplicación.

INTERRUPCIONES

Los microcontroladores de la familia MSP430, y en concreto, gestionan 4 tipos de interrupciones:

    • Interrupción Reset.
    • Interrupciones no enmascarables.
    • Interrupciones que pueden ser no enmascarables.
    • Interrupciones enmascarables.

RESET E INICIALIZACIÓN

Pueden producirse dos tipos de señales internas de reset, denominadas P.O.R. (Power-On Reset) y P.U.C. (Power-Up Clear).

  •   Una señal P.O.R. se origina:
  1. Al encender el dispositivo.
  2.  Si se ocasiona una señal ‘0’ en la patilla RST/NMI, y está configurado en modo reset.
  •  Una señal P.U.C. se origina:
  1. Siempre que se genera una señal P.O.R.
  2.  Si expira el temporizador Watchdog, estando seleccionado el modo Watchdog.
  3.  Al producirse una violación del código de seguridad del temporizador Watchdog.
  4. Cuando se da una violación del código de seguridad de la memoria flash.

Tras el reset las condiciones iniciales del sistema son:

  • Las patillas de entrada-salida conmutan al modo entrada.
  • Los flags de entrada y salida se borran.
  • Se inicializan el resto de periféricos y registros a su modo por defecto (ver el manual de usuario del MSP).
  • Se resetea el registro de estado SR (Status Register).
  • Se carga la dirección contenida en el vector de interrupción reset en el registro contador de programa PC (Program Counter).

ESTRUCTURA GLOBAL DE INTERRUPCIONES

Las interrupciones de tipo no enmascarable, no son enmascarables de ninguna forma, no contienen bit individual de inhabilitación y el bit general de habilitación de interrupciones GIE (General Interrupt Enable) no tiene efecto sobre ellas.

Las interrupciones denominadas en este texto como aquellas que pueden ser no enmascarables, no son enmascarables mediante el bit general GIE. Sin embargo, pueden ser habilitadas o deshabilitadas individualmente mediante bits de habilitación implementados particularmente para cada una de ellas. Cada vez que se habilita una interrupción de este tipo se resetea su bit individual, de modo que no interrumpa la ejecución de su rutina de servicio, aunque el retorno de interrupción no tiene efecto sobre este bit. Debe habilitarse por software dentro de la propia rutina de servicio, antes de su retorno. Pueden generarse en la patilla RST/NMI si estamos trabajando en modo NMI, por un fallo del oscilador, o bien por una violación del acceso a memoria. Con el bit 5 del registro de control del Watchdog seleccionamos si trabajamos en modo Reset o en modo NMI: ‘0’: Reset, ‘1’: NMI.

Las interrupciones enmascarables son interrupciones de propósito general, se enmascaran y habilitan mediante el bit general de habilitación de interrupciones, pueden ser ocasionadas bien por un desbordamiento del temporizador Watchdog o bien por otros módulos con capacidad de generar interrupción.

PROCESAMIENTO GLOBAL DE INTERRUPCIONES

La estructura de interrupciones del MSP430 permite que tanto las condiciones de operación del microcontrolador generen una interrupción del programa, o que ésta sea debida a módulos periféricos o eventos externos. Éstas últimas pueden ser deshabilitadas con el GIE, bit localizado en el registro de estado SR.

Al solicitarse una interrupción y si su correspondiente bit, junto al GIE, lo permiten, la rutina de servicio de interrupción se activa con los siguientes pasos:

1)    CPU activa, se termina la ejecución de la instrucción en curso.

2)    CPU detenida, fin de los modos de bajo consumo (si se estuviese en alguno).

3)    El valor del contador de programa se almacena en la pila.

4)    El registro de estado se almacena en la pila.

5)    De las solicitadas, se selecciona la interrupción con mayor prioridad.

6)    Su correspondiente flag de interrupción se resetea.

7)    Se ponen a ‘0’ los bits GIE, CPUOff, OscOff, SCG1 y los bits del registro de estado los de estado V, N, Z.

8)    El contenido del correspondiente vector de interrupción se carga en el contador de programa.


COMUNICACIONES EN EL MSP430

PUERTOS

Trabajando con el MSP430 no se tiene posibilidad de disponer de los buses de datos y direcciones en el exterior.

Para su comunicación con el resto de componentes y periféricos que formen parte del circuito en que se aloje el MSP430, éste dispone de 6 puertos de entrada y salida de 8 bits cada uno, que se pueden habilitar o no individualmente.

Este microcontrolador MSP430F149 dispone de 6 puertos de entrada y salida P1..P6, de 8 bits cada uno; de ellos, los puertos uno y dos tienen capacidad de producir interrupciones. Todos los registros tienen sus bits programables individualmente como entrada o salida y como pin de puerto o como periférico. Para lo cual, cada puerto dispone de cuatro registros de control para su configuración; salvo los puertos uno y dos, que disponen de seis permitiendo así trabajar con interrupciones. Como ejemplo se muestran los registros del puerto uno, siendo este caso directamente extrapolable al resto de puertos.

  • Registros de control de P1:
  1.  P1IN: Registro de solo lectura, su valor es el de la entrada del puerto.
  2. P1OUT: De lectura y escritura, su valor es el de la salida del puerto.
  3. P1IFG: Flags de interrupción de las correspondientes patillas, indica qué patillas están solicitando interrupción. Es de lectura y escritura. Este registro es propio de los puertos uno y dos.
  4. P1IES: Sirve para seleccionar individualmente si las interrupciones se solicitarán con flancos de subida o de bajada. Es propio sólo de los puertos uno y dos, siendo de lectura y escritura.
  5. P1IE: Habilita interrupción, propio de los puertos con capacidad de interrupción. De lectura y escritura.
  6. P1SEL: Sirve para seleccionar si la patilla correspondiente va a estar conectada al puerto o al periférico.

USART. PERIFÉRICO PARA COMUNICACIONES UART O SPI

El MSP430 incluye dos periféricos USART (Universal Synchronous/Asynchronous Receive Transmit), USART0 y USART1. El bit SYNC del registro de control UCTL (U0CTL para USART0 y U1CTL para USART1) selecciona entre comunicación asíncona (UART) o síncrona (SPI), con ‘0’ se selecciona la UART, mientras que con ‘1’ se selecciona el SPI. En este apartado se trata la comunicación UART del microcontrolador.

Si se trabaja en modo SPI, normalmente se hará en modo maestro, en cuyo caso, todo lo que se comenta para la comunicación asíncrona será válido, haciendo 2 consideraciones:

  • Habrá que prestar atención a poner el Chip Select a ’1′ una vez que se ha transmitido completamente el dato. Un error común es realizar el código escribiendo en el buffer de transmisión y después deshabilitar la línea de CS. Hay que considerar que tras escribir en el buffer de transmisión hay un hardware específico encargado de transmitir, el esclavo debe procesar y ejecutar el comando y hasta entonces no se puede poner CS a ’1′.
  • Para recibir datos, en modo maestro, habrá que escribir 0xFF en el bus, de modo que suministremos señal de reloj al esclavo sin enviarle ninguna orden.

Según el protocolo de comunicación UART, el receptor se sincroniza a sí mismo, y la transmisión normalmente consta de un bit se start, siete u ocho bits de datos, un bit de dirección, un bit de paridad y dos bits de STOP.

Además, puede haber dos formatos para la comunicación, el formato Idle-Line, que separa los bloques de datos y el Addres-Bit, donde los caracteres contienen un bit extra utilizado como dirección. Los periféricos USART disponen de dos fuentes principales de interrupciones, de transmisión o de recepción, sus bits de control de interrupción, flags y habilitación están localizados en los registros SFR:

URXIFG0(1) Flag de interrupción de recepción.
URXIEO(1) Habilitación de interrupción de recepción.
URXE(0) Habilita recepción.
UTXIFG0(1) Flag de interrupción de transmisión.
UTXIE0(1) Habilita interrupción de transmisión.
UTXE0(1) Habilita transmisión.

Si se deshabilita el receptor (URXEx=’0’), éste lo hace al terminar el carácter que está recibiendo o inmediatamente si no está recibiendo nada. Al deshabilitar la transmisión (UTXE=’0’), la transmisión en curso no se detendrá hasta que los datos del registro de desplazamiento (Shift Register) de transmisión y el del buffer de transmisión hayan sido transmitidos. Los datos del buffer podrán resultar dañados. Para escribir en el buffer de transmisión de forma segura, se deberá hacer con el transmisor deshabilitado, al habilitarlo, comenzará la transmisión.

GENERACIÓN DE LA FRECUENCIA DE TRABAJO

La generación del baud rate en la UART del MSP430 es típica en los microcontroladores de Texas Instruments, pero es algo más compleja que las implementaciones de otros microcontroladores, una de sus particularidades es el uso de divisor y modulador, que permite transmitir y recibir a cualquier velocidad estándar haciendo uso de cualquiera de sus señales de reloj, sean estándar o no.

Así pues, el generador de baud rate del MSP consta de un divisor y un modulador como los que se muestran en la figura 3.1. Esta combinación permite trabajar con frecuencias que no sean múltiplos de baud rates estándares. Esta técnica presenta potentes ventajas aunque sea algo compleja y posibilita que se consuma la mínima cantidad de corriente.

MSP430: Generador del baud rate USART

Generador del baud rate de la USART del MSP430

El LSB del registro de modulación es el primero encargado de llevar a cabo esta modulación, que comienza con el bit de start.

La explicación de la generación del baud rate se verá mejor con algún ejemplo:

  •  Seleccionando una señal de reloj de 32.768 Hz (BRCLK), se requiere una sincronización a 4800 baudios. Para ello el valor del divisor debería ser 6,83; el MSP430 permite que fijando el valor del divisor a 6 y añadiendo un valor al registro de modulación, se genere el baud rate requerido. En este caso, el valor del registro de modulación será 0x6F (0110 1111) y la secuencia que seguirá el generador para cada bit será 7-7-7-7-6-7-7-6

Texas Instruments suministra una serie de consideraciones para calcular estos valores de una forma rápida y sencilla. Así, el factor de la división N, que en el ejemplo anterior valía 6,83 se determina según la siguiente expresión:

MSP430: cálculo del baud rate

Ecuación para calcular el baud rate del módulo USART del MSP430

Donde N es el factor de división requerido, UxBR el registro de 16 bits correspondiente a la división, a la hora de programar realmente son dos: UxBR1 para los bits más significativos y UxBR0 para los bits menos significativos, siendo U0BR1 ó U1BR1 el registro de 8 bits del lado alto del divisor para la UART0 ó 1 respectivamente; i representa el bit actual que se se está recibiendo o transmitiendo en el paquete, n es el número de bits que se transmite en el paquete, que puede ser 7 u 8 y es el dato del actual bit de modulación.

Además, por comodidad, en las hojas características se suministran tablas con los valores de división y modulación correspondientes a los valores estándar.

El error originado con este método es despreciable y se ha comprobado la transmisión de grandes paquetes de datos con PC a velocidades de hasta 115200 baudios sin ningún error, aun así, Texas Instruments proporciona igualmente 2 expresiones para calcular el error, que se muestran a continuación, además de las mencionadas tablas. Se remite al lector interesado al manual del usuario del MSP430.

MSP430: Probabilidad de error en comunicaciones

Probabilidad de una transmisión o recepción erróneas según el baud rate del módulo del MSP430

OPERACIÓN DE INTERRUPCIÓN

Cuando se recibe un dato, el flag de recepción toma valor ‘1’, y se pone automáticamente a ‘0’ si la interrupción es atendida o si el buffer de recepción es leído.

Cuando el dispositivo está en condiciones de transmitir un dato, el buffer de transmisión está listo para escribir en él, y esto se refleja mediante el flag de transmisión. Se resetea automáticamente si la interrupción es atendida o si se escribe un carácter en el buffer.

REGISTROS DE ESTADO Y CONTROL

Los registros de control y de estado están estructurados en 8 bits y su valor es aleatorio tras una señal PUC. Se ofrece aquí la información básica de la utilidad de cada uno de estos bits. Para mayor información consultar el manual del usuario del MSP430.

REGISTROS DE CONTROL DE LA USART DEL MSP430 (U0CTL, U1CTL)

La información de estos registros determina la operación básica del módulo USART. Los bits del registro solicitan el protocolo, el formato de la comunicación y la paridad. Pueden ser programados antes de resetear el bit SWRST para deshabilitar el reloj.

El registro se divide en los bits mostrados a continuación, siendo el bit 7 el situado más a la izquierda.

BIT 7

PENA PEV SP CHAR Listen SYNC MM SWRST

 

SWRST: Pone URXIFG, URXIE, UTXIE y UTXIFG a sus valores por defecto.

  • Pasos de inicialización de la UART:
  1. SWRST=’1’
  2. SWRST =’0’
  3. Programar los valores necesarios en los registros de división y modulación.
  •  MM: Por defecto MM=’0’.
  1. MM=’0’: Protocolo Idle-Line.
  2. MM=’1’: Protocolo Address-Bit.
  •  SYNC:
  1. SYNC =’0’: Protocolo UART.
  2. SYNC=’1’: Protocolo SPI.
  • Listen:
  1. Listen = ‘0’: No hay realimentación.
  2. Listen = ‘1’: Hay realimentación interna con el receptor. (Loopback mode).
  • CHAR:
  1. CHAR = ‘0’ datos de 7 bits.
  2. CHAR = ‘1’ datos de 8 bits.
  • SP:
  1. SP = ‘0’ 1 bit de stop.
  2. SP = ’1’ 2 bits de stop.
  •  PENA: Con PENA=’1’ se habilita la paridad.
  •  PEV: Su función es válida si PENA=’1’.
  1. PEV = ‘0’: Paridad par.
  2. PEV = ‘1’: Paridad impar.

REGISTROS DE CONTROL DE TRANSMISIÓN EN EL MSP430 (U0TCTL, U1TCTL):

El registro se divide en los bits mostrados a continuación, siendo el bit 7 el situado más a la izquierda.

BIT7

No utilizado CKPL SSEL1 SSEL0 URXSE TXWake No utilizado TXEPT
  •  TXEPT: Con ‘1’ indica que el registro de desplazamiento y el buffer están vacíos.
  • TXWake: Cada transmisión utiliza su estado para inicializar la dirección-identificación característica.
  • URXSE: Con ‘1’ solicita una interrupción de servicio de recepción.
  • SSEL1, SSEL0: Definen el reloj a utilizar para generar los patrones de baudios.

= ‘00’: Reloj externo UCLK1.

= ’01’: ACLK

= ‘10’, ‘11’: SMCLK

  • CKPL: Si está a ‘0’, el reloj utilizado tiene la misma polaridad que el del sistema, si está a ‘1’ la polaridad es inversa.

REGISTRO DE CONTROL DE RECEPCIÓN DEL MSP430 (U0RCTL, U1RCTL):

BIT7

FE PE OE BRK URXEIE URXWIE RXWake RXErr
  • RXErr: Indica que algún flag de error situado a ‘1’ no se resetea automáticamente.
  • URXWIE: Con valor ‘0’, cada carácter recibido pone a ‘1’ el flag URXIFG. Con valor ‘1’, sólo los bits de dirección lo ponen a ‘1’.
  • BRK: Se pone a ‘1’ cuando se recibe una señal de Break.
  • OE (Overrun error): Se pone a ‘1’ para indicar que se ha colocado un dato en el buffer antes de que el anterior haya sido leído, es decir, que el penúltimo dato recibido ha sido perdido.
  • FE (Framming error): Con valor ‘1’ indica que no ha habido bits de paro, lo que representa que se ha perdido la sincronización y, por tanto, la transmisión. El dato leído será erróneo.

    

TEMPORIZADORES

El MSP430F149 dispone de 2 temporizadores designados como Timer A y Timer B, entre ellos tienen muy pocas diferencias; operan y se estructuran de igual modo. Por lo que sólo el temporizador A es analizado en este apartado.

CARACTERÍSTICAS GENERALES

El temporizador A posee 1 contador de 16 bits con 4 modos de operación, reloj seleccionable y configurable, de 3 a 5 registros de captura y comparación CCRx cuya operación y salida es configurable individualmente y 3 ó 5 módulos de salida con 8 modos de operación configurables individualmente para cada uno de estos módulos.

Timer A del MSP430

Arquitectura del Timer A del MSP430

El temporizador dispone de un contador de 16 bits, el cual tiene 4 modos de operación seleccionables con los bits MC0 y MC1 del registro de control TACTL. Este contador se incrementa o se decrementa con los flancos ascendentes de la señal de reloj. Puede ser leído y escrito por software y tiene capacidad de interrupción.

El temporizador se comporta de distinta forma según el valor de estos bits:

  • ‘00’ El temporizador estará parado.
  • ‘01’ Cuenta ascendente hasta que su valor sea igual al del registro CCR0, instante en el que se pone a 0.
  • ‘10’ Cuenta ascendente continuamente hasta alcanzar su valor máximo, después se pone a 0 inmediatamente.
  • ‘11’ Cuenta ascendente hasta CCR0 y luego descendente hasta 0.

SELECCIÓN DEL RELOJ Y DIVISIÓN DE FRECUENCIA

Al igual que en el resto de módulos internos, el reloj del temporizador puede ser seleccionado, bien entre relojes internos (ACLK, SMCLK), bien del reloj externo. Además puede tomarse esta señal de reloj directamente o dividirla entre dos, cuatro u ocho, tal y como se muestra en la figura anterior

INICIALIZACIÓN DEL TEMPORIZADOR A

Para detener el temporizador podemos hacerlo escribiendo ‘00’ en los bits MC0 y MC1. O bien con cualquier otro valor en estos bits, haciendo que el valor de CCR0 sea 0, para inicializar el temporizador en esta situación bastará con dar un valor determinado a CCR0.

Poniendo a ‘1’ el bit CLR del registro TACTL, se borra el valor del contador y se introducen los valores de IDx.

FLAGS

Cuando el temporizador alcanza el valor máximo en su modo de operación TAIFG toma valor ‘1’. Esto se produce incluso estando deshabilitadas las interrupciones. Este flag dura un pulso de reloj y se pone a ‘0’ automáticamente.

BLOQUE DE CAPTURA Y COMPARACIÓN

Se selecciona el modo de captura poniendo a ‘1’ el bit CAPx del registro de control CCTLx. Si la captura se lleva a cabo, el flag de interrupción CCIFG de CCTLx se pone a ‘1’, y en consecuencia, se solicita una interrupción si los bits de habilitación de interrupción GIE y CCIEx están con valor ‘1’.

Tanto el bit CCIFGx como el bit CCIEx se utilizan para los modos de comparación y de captura, CCIEx habilita la interrupción y CCIFGx tomará valor ‘1’ cuando se haya producido el evento de captura o comparación.

La captura puede utilizarse para medir el tiempo con rutinas software, medir el tiempo entre eventos hardware o medir la frecuencia del sistema.

Para detener el temporizador, habrá que detener primero la captura y luego el contador. A la hora de reinicializarlo, se inicia primero la captura y después el contador.

MODO COMPARACIÓN

Este modo de operación se selecciona haciendo ‘0’ el bit CAPx del registro de control CCTLx.

Es el modo más utilizado para generar interrupciones en intervalos específicos de tiempo o para, utilizado con la unidad de salida, generar señales que tengan relación con el tiempo como las del tipo de modulación de anchura de pulsos PWM. En esta aplicación será utilizado para generar interrupciones a una frecuencia de 100Hz, en las que tomaremos los datos con los conversores A/D.

Si el temporizador tiene el mismo valor que el registro CCRx:

-       El flag de interrupción CCIFGx del CCTLx es puesto a ‘1’.

-       Si CCIEx y GIE son ‘1’ se solicita una interrupción.

-       EQUx es llevado a la unidad de salida, afectando a OUTx según el modo de salida seleccionado.

La señal EQU0 es ‘1’ cuando el valor del contador es mayor o igual que CCR0. Las salidas de EQU1 a EQU4 son ‘1’ cuando el valor del temporizador es igual a sus correspondientes de CCR1 a CCR4.

LA UNIDAD DE SALIDA

Cada bloque de comparación y captura dispone de una unidad de salida. Ésta puede operar de ocho modos diferentes seleccionados mediante los bits OMx2, OMx1 y OMx0.

Las diferencias entre cada uno de los ocho modos de salida están descritas por el fabricante en el manual del usuario; éstas radican en que el MSP430 proporcionará unas salidas u otras en sus pines cuando el temporizador alcance el valor almacenado en CCR0. Su uso es, por ejemplo, generar automáticamente señales PWM o similares sin gastar para ello recursos de la CPU. Se remite al lector interesado a las datasheets y a los códigos suministrados de ejemplo por Texas Instruments.

MODOS DE OPERACIÓN

El temporizador dispone de 4 modos de operación, dotándolo de una gran versatilidad, por lo que cabe detenerse a observarlos.

Modo parado

Parar el temporizador es sencillo tal como se ha comentado con anterioridad. El valor del temporizador, cuando lo detengamos poniendo a ‘0’ los bits MCx, no se verá alterado.

Cuando el temporizador haya sido parado tras estar trabajando en modo      creciente-decreciente, y sea reiniciado a ese modo, comenzará a contar en la dirección en que venía haciéndolo.

Modo creciente

En este modo de operación el temporizador contará hasta el valor que haya almacenado en el registro CCR0. Llegado este momento volverá a cero y empezará a contar.

Modo continuo

En este modo de operación, el temporizador no se resetea hasta alcanzar su valor máximo. El flag de interrupción indicará cuándo su valor es igual al de CCR0. Puede ser utilizado para generar ondas desfasadas un valor CCR0; Puede hacerse que, a efectos prácticos, este modo sea igual que el anterior mediante el siguiente código.

#pragma vector TIMERA_VECTOR

__interrupt void CONT_UP (void)

{

CCR0 += CCR0;

}

Modo creciente-decreciente

El funcionamiento básico es idéntico a los anteriores salvo que, cuando el temporizador alcance el valor almacenado en CCR0, contará en sentido decreciente hasta llegar a cero y así sucesivamente.

ESTRUCTURA DE REGISTROS DEL TEMPORIZADOR

La unidad del temporizador dispone de un registro, llamado TAR (Timmer A Register), donde se almacena el valor del contador, al igual que éste, es de 16 bits. Es de lectura y escritura. Este registro dispone de un registro de control TACTL, de lectura y escritura, cuya estructura está detallada a continuación.

Dispone además de los correspondientes registros de comparación y captura CCR0, CCR1 y CCR2, que denominamos genéricamente CCRx (Capture Compare Register x) que contendrán el dato que les corresponda. Cada uno de estos registros de comparación y captura dispondrá de su correspondiente registro de control CCTLx. La función de éstos registros, de 16 bits y de lectura y escritura, se detallan en el manual de usuario del MSP430.

Registro de control del Temporizador A (TACTL)

La arquitectura de este registro se muestra a continuación, siendo el bit más significativo el 15, y estando situado a la izquierda en la representación.

 

BIT15

No utilizados .. .. .. SSEL1 SSEL0 ID1 ID0 MC1 MC0 No utilizado CLR TAIE TAIFG

Los bits del nueve al quince, al igual que el tres, no son utilizados. Como se ha descrito, los bits SSEL0 y SSEL1 se utilizan para seleccionar el reloj a utilizar, el cual puede ser dividido indicándolo en los bits ID (Input Clock Divider). También se han descrito ya los modos de operación del contador, que se seleccionan con los bits MC1 y MC0 y la función del flag TAIFG, el bit TAIE habilitará o no dichas interrupciones.

El bit CLR sirve para resetear el temporizador al escribir en él un ‘1’. Su valor se borra automáticamente y el temporizador se reinicia con el siguiente flanco del reloj.

Diferencias entre el temporizador A y el temporizador B

Además del Temporizador A, el MSP430F149 incluye un segundo temporizador, de uso similar al anterior pero con algunas pequeñas diferencias:

-       El temporizador A es de 16 bits y éste es de longitud seleccionable entre 8, 10, 12 ó 16 bits.

-       No está implementado el bit SCCI en el registro de control de los registros de captura y comparación. (Ver manual del usuario).

-       La función de los registros de captura y comparación ha cambiado levemente.

EL CONVERSOR ANALÓGICO-DIGITAL DE 12 BITS.

 

CARACTERÍSTICAS GENERALES

El conversor analógico-digital de 12 bits del MSP430 (en adelante ADC12) tiene principalmente cinco bloques funcionales que pueden ser configurados y optimizados individualmente:

  • Base del conversor analógico digital con muestreo y retención (S&H).
  • Conversión a memoria y configuración.
  • Tensión de referencia y configuración.
  • Selección y control del reloj del conversor.
  • Temporización del muestreo y control de la conversión.
MSP430 ADC

MSP430: Arquitectura del conversor ADC12

CANALES DE CONVERSIÓN

El MSP430F149 dispone de 8 canales para convertir tensiones externas, desde a0 hasta a7. Además puede convertir 4 tensiones internas, que son, las tensiones de referencia VeREF+ y VeREF-/VREF- ,con los canales internos a8 y a9 respectivamente; la tensión correspondiente a un diodo interno para determinar la temperatura del microcontrolador, con el canal interno a10; y la tensión correspondiente a la mitad de la alimentación analógica AVcc/2 con el canal interno a11.

Tensión de referencia

La tensión de referencia puede ser seleccionada interna o externamente. En caso de seleccionarse una tensión interna, se dispone de un bit para indicar si esa tensión interna de referencia son 1.5 V ó 2.5V. Así como de los bits Sref para seleccionar la tensión de referencia.

Sref Referencia positiva Referencia negativa
0 Avcc AVss
1 VREF+ interna AVss
2,3 VeREF+ externa AVss
4 Avcc VREF-/VeREF- interna o externa
5 VREF+ interna VREF-/VeREF- interna o externa
6,7 VeREF+ externa VREF-/VeREF- interna o externa

Modos de conversión

Mediante los bits CONSEQ0 y CONSEQ1, del registro de control ADC12CTL1, se selecciona el modo de conversión.

  • ‘00’ Modo convertir un solo canal.
  • ‘01’ Modo convertir una secuencia de canales.
  • ‘10’ Modo convertir de un solo canal de forma repetitiva.
  • ‘11’ Modo convertir una secuencia de canales de forma repetitiva.

Modo un solo canal

El canal a convertir se selecciona mediante los bits INCH del registro de control de conversión a memoria (ADC12MCTLx), asociado al registro de conversión a memoria (ADC12MEMx), apuntado por los bits CstartAdd, a su vez localizados en ADC12CTL1. El resultado de la conversión se almacenaré en el registro ADC12MEMx.

Modo secuencia de canales

Los bits CstartAdd apuntarán al registro de conversión a memoria ADC12MEMx donde se guardará el valor de la primera conversión de la secuencia. El resto de valores se irán almacenando consecutivamente a partir del primero apuntado. Los registros de control de la conversión a memoria correspondientes a cada uno de estos registros, ADC12MCTL contendrán la información relativa al canal a convertir, a la tensión de referencia utilizada para esa conversión, etc. Además, el registro correspondiente al último valor de la secuencia, deberá tener su bit EOS (End Of Sequence) al valor ‘1’.

Modo repetición de un solo canal y repetición de secuencia de canales

Es el modo un sólo canal repitiéndose una y otra vez hasta que se detiene. Esta detención será en tiempo de ejecución, por lo que será en la mayoría de casos mediante interrupción.

Selección del reloj y periodo de muestreo

De modo similar a lo que ocurre con otros bloques, se puede seleccionar el reloj a utilizar entre varios y se puede dividir su frecuencia, en este caso el divisor podrá tomar valores desde 1 hasta 8; mediante 2 bits para la selección ADC12SSEL1 y ADC12SSEL0 y 3 bits en este caso para el divisor de frecuencia ADC12DIV2, ADC12DIV1 y ADC12DIV0. También se puede programar el tiempo de muestreo mediante los bits SH0 y SH1 del registro ADC12CTL0.

¿TE GUSTÓ EL ARTÍCULO?

 

¿Te parece interesante que exista un blog de referencia en español sobre electrónica y sistemas embebidos? Ayuda a que Arte en 8 bits crezca, para ello sólo tienes que pulsar en los botones para compartirlo en redes sociales, Twitter o Google+. De este modo contribuirás a que Arte en 8 bits se posicione mejor, y por tanto podremos crecer e ir ofreciéndote cada vez un mejor contenido y de mayor calidad.

De antemano, muchas gracias.

BIBLIOGRAFÍA

[1] MSP430 User’s Guide. Texas Instruments.

16 Comentarios a "MSP430: Una guía de referencia en castellano"

  1. dario jimenez's Gravatar dario jimenez
    20 octubre, 2011 - 3:02 | Enlace permanente

    exelente el resumen del microcontrolador. investigo tarjetas electro, de control para maquinas soldar invertec q tienen AO, flip flops, moduladores por ancho pulso etc y seria excelente encontrarlos informacion en castellano, por ejm: mc14053bcp, ka3525a, ca3140ez . gracias .

  2. juan's Gravatar juan
    14 diciembre, 2011 - 18:10 | Enlace permanente

    disculpe una pregunta, el msp430g2231 se puede usar para comunicacion con el puerto serie de la PC???
    De antemano gracias por su respuesta.

  3. 24 enero, 2012 - 17:03 | Enlace permanente

    Buenas Javier:

    Muy buena explicación a las características que presenta la familia de microcontroladores MSP430 y que seguro, será gratamente bienvenida por todos los que trabajamos en este campo y con este tipo de familia, máxime, cuando dicha información está en castellano.

    Un saludo.

  4. MARCO ANTONIO MEDINA's Gravatar MARCO ANTONIO MEDINA
    16 marzo, 2012 - 1:45 | Enlace permanente

    MUCHAS GRACIAS, DE GRAN AYUDA , SERIA DE GRAN AYUDA PARA MI UNA REVE EXPLICACION DE LA INICIALIZACION DEL OSCILADOR INTERNO DE ESTOS MICROCONTROLADORES!

  5. cicloide2's Gravatar cicloide2
    6 mayo, 2012 - 16:53 | Enlace permanente

    ¡Exelente!, material.

    Felicitaciones y gracias.

  6. Javi's Gravatar Javi
    12 diciembre, 2012 - 13:39 | Enlace permanente

    Buenisimo! me ayuda un monton pues acabo de empezar un proyecto con el msp430, pero el mio es un FR y bueno, me ha ayudado a entenderlo mejor gracias!

  7. vicente jimenez's Gravatar vicente jimenez
    20 diciembre, 2012 - 15:54 | Enlace permanente

    MUCHISIMAS GRACIAS POR ESTE TRABAJO

  8. Jesús C's Gravatar Jesús C
    4 octubre, 2013 - 6:15 | Enlace permanente

    Hola. Una pregunta, tienes alguna idea de cómo puedo hacer para recibir tramas de manera inalambrica con el kit eZ430-RF2500 (que viene con el micro MSP430F2274) y verlo por el hyperterminal?

Deja una respuesta

20 − 12 =