Programacion MSP430 TI Version 1.7 Noviembre

39
Curso de Programación de Microcontroladores MSP430 de 16 bits de TI en Lenguaje C. Versión 1.7 Noviembre 2010 [email protected] Tel: 01 (55) 5398 6056

Transcript of Programacion MSP430 TI Version 1.7 Noviembre

Page 1: Programacion MSP430 TI Version 1.7 Noviembre

Curso de Programación de Microcontroladores MSP430 de 16 bits de TI en Lenguaje C.

Versión 1.7

Noviembre 2010

[email protected] Tel: 01 (55) 5398 6056

Page 2: Programacion MSP430 TI Version 1.7 Noviembre

2

Contenido

Capítulo 1. Introducción 3 1.1 Acerca del manual. 3 1.2 ¿Que aplicaciones podemos realizar con estos dispositivos? 4 1.3 Arquitectura 5 1.4 ALU 6 1.5 Registros de trabajo. 6 1.6 Características del microcontrolador MSP430-F2013. 8 1.7 Empleo de la IDE IAR Embedded Workbench. 9 1.8 Modo de empleo del kit de desarrollo eZ430-F2013 13 1.9 Operaciones binarias 16 Capítulo 2. I/O digitales. 17 2.1 Configuración de pines de I/O . 17 Capítulo 3. Interrupciones. 20 3.1 Configuración de registros de interrupción I/O. 20 Capítulo 4. Timer A. 23 4.1 Configuración de registros del Timer A. 23 4.2 Interrupciones asociadas a TimerA. 23 4.3 Modos de operación 24 4.4 Timer A Capture Compare Register 0 24 Capítulo 5. SD16 (Convertidor Analógico Digital Sigma Delta) 28 5.1 Configuración de registros de SD16. 28 5.2 Formato de salida de datos 29 5.3 Modos de conversión 30 5.4 Uso del sensor de temperatura. 31 5.5 Manejo de Interrupciones. 32 Capítulo 6. Comunicación Serie 35 6.1 Configuración de registros USART 35 6.2 Norma RS232 35 Capítulo 7. PWM 38 7.1 Consideraciones generales. 38 7.2 Configuración de registros. 38 Apéndice . Modos de ahorro de energía. 41

Page 3: Programacion MSP430 TI Version 1.7 Noviembre

3

Capitulo 1.

Introducción. Con sus más de 75 años en el mercado, y desde sus orígenes en los campos petroleros en Texas, Estados Unidos, Texas Instuments se ha consolidado como una compañía líder en el mercado de la electrónica. Entre las personas que han contribuido a este esfuerzo, se encuentran premios Nobel (Jack Killby), incluyendo invenciones tales como los primeros transistores elaborados a base de silicón, los primeros circuitos integrados y las calculadoras de bolsillo. TI lindera actualmente los DSP (digital Signal Processing) y tecnología analógica, inalámbrica, sistemas de audio.

Figura 1. Texas Instruments a través del tiempo

Los microcontroladores MSP430 de Texas Instruments son dispositivos de 16 bits, con espacio de direccionamiento compartida por el procesador, memoria y periféricos. Esta familia de microcontroladores incluye una amplia variedad de chips que oscilan desde 20-pin packages con un 1K en ROM y 128 bytes en RAM( con un costo inferior a $1 USD) hasta 100-pin packages con 60K en ROM y 2K en RAM (hasta $100. USD). Una de las características más importantes de estos dispositivos es su bajo consumo de energía. Por ejemplo, en una aplicación como waterimetros, mediante una sola batería puede llegar operar durante 10 años de forma continua. Su programación puede realizarse en lenguaje ensamblador y lenguaje C/C++. En este curso emplearemos el Lenguaje C, ya que debido a su versatilidad (compatibilidad, portabilidad y robustez) su programación es rápida y sencilla, nos concentraremos en el desarrollo del algoritmo.

1.1 Acerca de este manual.

A lo largo del manual observará que se hace mención del microcontrolador como µControlador, para indicarlo de una forma más abreviada.

Page 4: Programacion MSP430 TI Version 1.7 Noviembre

4

Este manual es una recopilación de documentación proporcionada por Texas Instruments Corp. y que SyhaConsulting distribuye en este curso.

1.2 ¿Que aplicaciones podemos realizar con estos dispositivos? Como cualquier otro microcontrolador, el MSP430 puede realizar tareas de medición y control, sin embargo su característica principal se basa en aplicaciones de bajo consumo de energía.

• Equipos de instrumentación y de medición par la medicina (alcoholímetros, analizador de gas, medición de humedad, temperatura, medidores de presión en la sangre y de glucosa, etc.)

• Equipos de medición. (waterimetros, medidores de gas y electricidad)

• Equipos para deportes. (altímetros, Relojes a prueba de agua, computadoras para

bicicletas).

• Seguridad (sensores para rupturas en vidrio, control de puertas automáticas, detectores de gas/fuego/humo, etc.).

• Domótica (aire acondicionado, termostastatos, línea blanca)

• Misceláneos (taxímetros, lectores de smart cards, medición en baterías)

Para la distinción de las características de cada microcontrolador:

1.3 Arquitectura.

Los µcontroladores MSP430 emplean una arquitectura RISC de 16 bits, capaz de procesar instrucciones de bytes o words. La CPU consiste en :

• 3 stage instructtion pipeline. • Instruction decoding. • ALU de 16 bits. • 4 registros dedicados. • 12 registros de propósito general.

Page 5: Programacion MSP430 TI Version 1.7 Noviembre

5

Toda la memoria esta contenida en un espacio continúo de direccionamiento: RAM, ROM, funciones de registro especiales, registros de periféricos. Estas características le permite al desarrollador mayor flexibilidad y mejor administración de la memoria. El siguiente diagrama ilustra las características antes mencionadas.

Figura 2. Arquitectura del CPU µcontrolador MSP430.

1.4 ALU.

Esta sección de la CPU realiza operaciones de adición, sustracción, comparación operaciones lógicas (AND, OR y XOR), estas operaciones pueden afectar las banderas de overflow, zero, negative y de acarreo.

1.5 Registros de trabajo. Se tienen 16 registros de trabajo, los cuales se distribuyen de la siguiente forma:

Page 6: Programacion MSP430 TI Version 1.7 Noviembre

6

Item Registro Descripción 1

R0 - Program Counter (PC)

Es un registro de 20 bits que apunta a la siguiente instrucción a ser ejecutada. Cada instrucción emplea cierta cantidad de bytes (2,4,6 u 8), y el PC se incrementa de acuerdo a la cantidad de bytes.

2

R1 – Stack Pointer

(SP)

Este registro de 20 bits es empleado por la CPU para almacenar la dirección de retorno en la llamada a una subrutina o una interrupción.

3

R2 – Status Register

(SR)

Registro de 16 bits, indica si la operación que se realizó dio como resultado de acarreo, sobre flujo, entre otros y se refleja en la activación de sus bits (banderas)

Bit

Nombre Descripción.

V Oveflow bit.

Se coloca en 1 cuando el resultado de una operación aritmética produce un sobreflujo.

SCG1

System Clock Generator 1

Se coloca en 1 cuando se apaga el generador DCO, si DCOCLK no es usado por MCLK o SMCLK.

SCG0 System Clock Generator 0

Se coloca en 1 cuando se apaga FLL+ loop control.

OSCOFF OSC off Colocado en 1 cuando el se deshabilita el cristal LFXT1.

CPUOFF CPU off Colocado en 1 cuando la CPU se apaga.

GIE

General Interruption

Enable

Colocado en 1 cuando se activan la habilitación para interrupciones.

N Negative Bit

Colocado en 1 cuando el resultado de una operación previo produjo un valor inferior a 0.

Z Zero Bit Colocado en 1 cuando el resultado de una operación previo produjo cero

C Carry Bit

Colocado en 1cuando el resultado de una operación previo produjo un acarreo

3 R3 – Constant

Generator Register

En lenguaje ASM del MPS430, le permite emplear 24 instrucciones emuladas, de mayor complejidad.

4 R4 to R15 – General

Purpose Register. Registros de propósito general.

Tabla 1. Registros de trabajo.

Page 7: Programacion MSP430 TI Version 1.7 Noviembre

7

1.6 Características del µµµµcontrolador MSP430-F2013.

La siguiente figura nuestra un diagrama a bloques sobre la arquitectura del µcontrolador que

emplearemos, así como el de los periféricos que se poseen.

Figura 3. Arquitectura del µcontrolador MSP430x20x3.

De forma resumida, las características de este µcontrolador son:

1. MSP430F2013: 2KB + 256B Flash Memory 128B RAM

2. Bajo consumo de voltaje: De 1.8 V a 3.6 V.

3. Consumo ultrabajo de poder: � Modo activo: 300µA en 1 MHz, a 2.2 V � Standby Mode: 0.6 µA � Off Mode (RAM Retention): 0.1 µA

4. Modos de ahorro de energía (Power-Saving Modes).

1

5. Arquitectura de 16-Bit RISC, 62.5 ns de tiempo de ciclos de instrucción.

6. Configuraciones básicas para el módulo de reloj :

� Frecuencias internas superiores a 16 MHz con 4 frecuencias de calibración de ±1%

� Oscilador interno de bajo consumo LF . � Cristal 32-kHz. � Fuente digital externa de reloj.

7. Timer_A de 16-Bit con Two Capture/Compare Registers

1 Para mayor información ver ANEXO 1.

Page 8: Programacion MSP430 TI Version 1.7 Noviembre

8

8. 16-Bit Sigma-Delta A/D Converter With Differential PGA Inputs and Internal Reference .

9. Universal Serial Interface (USI) con soporte de SPI and I2C.

10. Detector Brownout.

11. No necesita de voltaje externo para su programación.

12. Programmable Code Protection by Security Fuse

13. On-Chip Emulation Logic With Spy-Bi-Wire

Figura 4. Distribución de pines del µcontrolador MSP430x20x3.

Para la programación de este dispositivo, durante este curso emplearemos la siguiente relación de manuales:

• eZ430-F2013_Development_Tool_User's_Guide_(Rev._B)_slau176b (Manual sobre la

instalación del kit eZ420-F2013) • msp430f2013 (Hoja de datos del los dispositivos MSP430x20xx). • MSP430x2xx_Family_User's_Guide_(Rev._D)_slau144d (Manual de usuario sobre el

manejo de los registros de los dispositivos MSP430x20xx)

1.7 Empleo de la IDE IAR Embedded Workbench.

Primeramente realicemos la instalación del kit eZ430-F2013, sigamos las instrucciones que se indican en el manual eZ430-F2013_Development_Tool_User's_Guide_(Rev._B)_slau176b.pdf Ahora realicemos un primer programa. Carguemos la IDE IAR Embedded Workbech: Menú INICIO ���� Todos los programas ���� IAR System ���� IAR Embedded Workbech KickStar for MSP430 VA ���� IAR Embedded Workbech.

1. Abra el workspace Flashing the LED.eww : Menú File ���� Open Workspace ���� C:\ProgramFiles\IAR Systems\Embedded Workbench 4.0\430\FET_examples\Flashing the LED.eww. (Se abrirá el workspace correspondinte).

2. De click en la pestaña msp430x2xx (C – SpyBiWire), el cual corresponde al programa

del eZ430-F2013.

3. Indiquemos el correcto dispositivo a programar en : Menú Projects ���� Options � General Options ���� Target y seleccione MSP430F2013 de

la lista de dispositivos.

Page 9: Programacion MSP430 TI Version 1.7 Noviembre

9

4. Seleccione la opción FET Debugger ����Setup ���� Connection ���� TI USB FET para indicar la interfaz por USB

5. Seleccione menú Project ���� Rebuild All para hacer compilar los archivos. 6. Seleccione menú Project ���� Debug para iniciar el C-SPY debugger. C-SPY borrará el

contenido actual del dispositivo y cargará la apliación actual en la memoria Flash del µcontrolador (NOTA: En antes de ejecutar esta instrucción, ya debe estar conectado el kit eZ430-F2013).

7. Seleccione menú Debug ���� Go para iniciar la aplicación, el led empezará a destellar. 8. Para finalizar la sesión de depurado y regresar a la sesión de Workbench, seleccione

menú Debug ���� Stop Debugging . 9. Para cerrar la aplicación, seleccione el menú File ���� Exit.

Como verá, la aplicación esta programada en el µcontrolador. Ahora realizaremos un programa desde el inicio (algunos de los pasos que seguiremos ya los realizamos en el programa anterior).

1.7.1 Creación de un proyecto: Menú INICIO ���� Todos los programas ���� IAR System ���� IAR Embedded Workbech KickStar for MSP430 VA ���� IAR Embedded Workbech. Seleccionar la primera opción Create new Project in current workspace.

Figura 5. Seleccione “Create new Project in current workspace” para iniciar.

Enseguida aparecerá la siguiente ventana, seleccione C� main.

Page 10: Programacion MSP430 TI Version 1.7 Noviembre

10

Figura 6 . En la ventana de Create New Projct , selecciones C � main.

En este punto, el programa le pedirá un nombre para el archivo, crea una nueva carpeta donde se almacenarán los archivos.

1.7.2 Configuración de opciones del proyecto.

Vamos a indicar el tipo de dispositivo a programar, para este paso seleccione menú Project ���� Options. De acuerdo a la siguiente ventana, seleccione el tipo de dispositivo a programar: MSP430F2013.

Figura 7. Selección del tipo de µcontrolador a programar.

Seleccione la opción de Debugger y coloque en la pestaña de SetUp FET Debugger.

Page 11: Programacion MSP430 TI Version 1.7 Noviembre

11

Figura 8. Selección del tipo de µcontrolador a programar.

Para finalizar, en la sección de FET Debugger, realice la selección como aparece a continuación.

Figura 9. Configuración del FET Debbuger.

Su proyecto ha sido creado, en este punto ya estamos en posición de añadir código. Tome en cuenta que solo se puede tener un proyecto abierto a la vez. La siguiente pantalla muestra los comandos más empleados:

Page 12: Programacion MSP430 TI Version 1.7 Noviembre

12

Figura 10 . Comandos clave para la elaboración de un proyecto.

1. Make / Debbug. Esta opción, compila, carga y corre el programa en el dispositivo 2. Go. Ejecuta el programa en el chip 3. Stop Debbug. Se detiene el proceso de depurado, si desea hacer modificaciones en el

código del programa, ustede debe de seleccionar esta opción. 4. Dissassembly. Este es el mapa de memoria del ez430. 5. Current Location. Indica la instrucción que se esta ejecutando

1.8 Modo de empleo del Kit de desarrollo eZ430-F2013. El kit eZ430-F2013 de Texas Instruments esta constituido por :

• El programador/depurador eZ430. • Microcontrolador MSP430F2013 • CD con documentación y programas.

Los dos primeros elementos vienen en un encapsulado de plástico; lo que pareciera ser una memoria USB convencional; se trata nada menos que de uno de los programadores más innovadores en el mundo de la electrónica. 1.8.1 Descripción de programador/depurador eZ430. Este programador / depurador es combatible con los microcontroladores de la serie MSP430F20xx, como se puede apreciar en la siguiente imagen se muestran cada una de las secciones que lo constituyen. En la tarjeta de prueba removible se encuentra además del microcontrolador MSP430F2013 un led de montaje superficial, el cual nos permitirá probar diferentes programas de forma rápida.

Page 13: Programacion MSP430 TI Version 1.7 Noviembre

13

Figura 11 . Programador / Depurador eZ430

El encapsulado de plástico es fácilmente removible, para ello emplee un pequeño desarmador plano, para hacer “palanca” en una de las muescas de dicho encapsulado. Una vez que su programa este listo, deberemos de remover la Tarjeta de pruebas y acceder a cada uno de los pines del microcontrolador; pare ello soldaremos una vaina o header en la zona que se indica como “Pines accesibles”.

Figura 12 . Como remover el encapsulado de plástico. Figura 13. Tarjeta de prueba removible lista para emplearse

Figura 14. Un ejemplo de aplicación del MSP430 con la tarjeta removible. Notas importantes:

• Durante la etapa de programación/ depuración, usted no necesitará una fuente de alimentación externa; ya que el dispositivo consume corriente del mismo puerto USB para funcionar.

• Muchos de los programas de prueba pueden funcionar con el programador conectado al

puerto USB, esto lo podemos hacer mediante el led de montaje superficial.

• Cuando se trate de introducir datos a uno de los pines del microcontrolador MSP430F2013, o hacer aplicaciones más complicadas, será necesario remover la tarjeta de de prueba removible y alimentarlo mediante una fuente externa. Recuerde que la alimentación de este dispositivo es de 1.8 a 3.6 volts. (ver página 8).

Page 14: Programacion MSP430 TI Version 1.7 Noviembre

14

Durante este curso, en cada uno de los programas se indicará que circuitería se necesita realizar; en la cual se asume que el microcontrolador MSP430F2013 recibe una alimentación de entre 1.8 a 3.6 volts.

1.9 Operaciones binarias. Las operaciones fundamentales en lógica booleana son NOT, OR y AND. Realicemos un breve repaso a cerca de estas operaciones las cuales emplearemos en la programación de los periféricos: Supongamos que tenemos las siguientes asignaciones en C: int A = 0b1101;

int B = 0b0101;

int C;

Item Operación Resultado Descripción

1 C = ~A ; C = 0b0010; Operación lógica NOT.

2 C = A | B;

C = 0b1101 (OR) 0b0101 0b1101

Operación lógica OR, instrucción empleada para realizar la activación de bits sin afectar los restantes.

3 C = A & B;

C = 0b1101 (AND) 0b0101 0b0101

Operación lógica AND, instrucción empleada para realizar la activación de bits sin afectar los restantes.

4 C = A ^ B;

C = 0b1101 (XOR) 0b0101 0b1000

Operación lógica XOR, de acuerdo a la naturaleza de esta instrucción el resultado se coloca en 1 cuando los operandos son diferentes.

5 C |= A;

( indicar el resultado)

Esta instrucción, es equivalente a C=C|A;

6 C ^= A; ( indicar el resultado)

Esta instrucción, es equivalente a C=C^A;

Tabla 2 . Operaciones binarias

NOTAS:

Page 15: Programacion MSP430 TI Version 1.7 Noviembre

15

Capítulo 2.

I/O digitales.

Todo µcontrolador posee periféricos para poder interactuar con el exterior, los dispositivos MSP430 de TI pueden configurarse para que se comporten como de periféricos de entrada o de salida, cada uno de estos periféricos pueden ser accedidos de forma independiente haciendo referencia a los pines del µcontrolador.

2.1 Configuración de pines de I/O .

Los registros que se emplean para configuración de las I/O digitales son: Item Registros Descripción del estado del bit Notas

1 PxIN Bit = 0 La entrada esta en 0 Bit = 1 La entrada esta en 1

Cada bit del puerto PxIN refleja el estado actual en la señal de entrada

2 PxOUT Bit = 0 La salida esta en 0 Bit = 1 La salida esta en 1

Además de enviar datos lógicos en alto o bajo, las resistencias pull – up/down estan deshabilitadas

3 PxDIR

Bit = 0 El pin del puerto esta configurado como de entrada Bit = 1 El pin del puerto esta configurado como de salida

Cada pin del puerto PxDIR esta configurado de forma independiente como de entrada o como de salida. Por default los pines de I/O estan configurados como de entrada.

4 PxREN

Bit = 0 Deshabilitación de las resistencias de pull up / pull down . Bit = 1 Habilitación de las resistencias de pull up / pull down .

Habilitación / Deshabilitación de resistencias Pull up / Pull down.

Tabla 3. Registros para la configuración de pines I/O (donde x, corresponde al numero de puerto).

Para poder activar (colocar en 1) o desactivar (colocar en 0) los bits de forma individual o conjunta de los registros, emplearemos los siguientes operadores:

Item Operación Símbolo 1 OR | 2 AND & 3 NOT ~ 4 XOR ^ Tabla 4. Operaciones a nivel de bits

Ejemplo, si deseamos que el pin 7 del puerto 1 (P1.7 ) este configurado como salida, entonces: P1DIR = P1DIR | 0x80.

O de forma más abreviada: P1DIR | = 0x80.

El uso del operador | nos permite que no se modifiquen los pines previamente configurados. Si quisiéramos encender un led o bien enviar un 1 lógico en el pin P1.7, sin modificar otros registros: P1DIR | = 0x80.

Page 16: Programacion MSP430 TI Version 1.7 Noviembre

16

Ahora bien, si deseáramos apagar este led, o bien enviar un cero lógico, podemos emplear la siguiente instrucción: P1OUT &= ~0x80;

Note que ~0x80 = 0x7F, que es su complemento Si quisiéramos leer el estado de un push button, emplearemos la instrucción PxIN. Para detectar que un push button fue presionado en el pin P1.1, de la siguiente forma: while( ( P1IN & 0x01 ));

o if( ( P1IN & 0x01) );

El operador OR exclusivo, permite colocar en 1 o en 0 un bit dependiendo del estado anterior en el que se encontraba: Si después de ejecutar la siguiente línea, el pin P1.0 se colocaría en 1: P1OUT ^= 0x01;

Se ejecutara nuevamente, el pin P1.0 se colocaría en 1. Note que podemos emplear notación hexadecimal o decimal. Analicemos el primer programa que destella el led colocado en el puerto 1 (pin P1.0 ).

#include <msp430x20x3.h>

int main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

P1DIR |= 0x01; // Set P1.0 to output direction

for (;;)

{

volatile unsigned int i; // volatile to prevent optimization

P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR

i = 5000; // SW Delay

do i--;

while (i != 0);

}

}

Para esta ejercicio no se necesita fuente de alimentación externa. Una vez que haya compilado y descargado el programa al microcontrolador, el led que se encuentra en la terminal P1.0 destellará a una cierta frecuencia. Conteste lo siguiente:

1. Modifique la línea del programa:

i = 5000; // SW Delay

A un valor más grande o más pequeño. ¿Qué efecto produce?.

2. ¿Qué operación binaria es la responsable de que se apague y encienda el led?

Page 17: Programacion MSP430 TI Version 1.7 Noviembre

17

Otra forma para hacer referencia a la activación de pines es mediante el empleo de las definiciones BIT_X donde X corresponde al número de bit. Por ejemplo, si deseáramos activar el bit 7 y el bit 0, podríamos realizarlo de la siguiente manera P1DIR = BIT7 + BIT0;

Que equivale a :

P1DIR = 0x81;

Ejercicios.

1. Suponga que se tienen los siguientes valores en los puertos P1 y P2. P1 = 0xF3 y P2 = 0x4D

¿Que operación realizaría para que el estado en tres pines (P1.7, P2.2 y P2.3) cambie a estado bajo sin afectar a los otros pines?

2. ¿Que operación realizaría para que el estado de los tres pines anteriores cambie a

estado alto sin afectar los restantes?

3. Realice un esquema sobre la colocación de un pushbutton para la lectura de datos.

4. Realice un programa de flujo y de conexiones que cumpla con los siguientes requerimientos.

Si el pin P1.2 detecta que un push button ha sido presionado, que se encienda un led colocado en el pin P1.0. (Recuerde que en el pin P1.0 se tiene conectado un led) Si el pin P1.3 detecta que un push button ha sido presionado, que se encienda un led colocado en el pin P1.1.

NOTAS:

Page 18: Programacion MSP430 TI Version 1.7 Noviembre

18

Capítulo 3.

Interrupciones. Una interrupción, como su nombre lo indica es una indicación de paro a una actividad o evento, debido a una actividad de mayor prioridad. Imagine una aplicación en la que el sistema de seguridad contra incendio, cuando el sistema recibe una señal de alarma debida a la aparición de fuego, el sistema inmediatamente detendrá toda actividad (por ejemplo, apagar un motor de ventilador colocado en el techo) para activar un sistema de agua contra incendio.

En los µcontroladores MSP430, las interrupciones se clasifican de la siguiente manera:

• Interrupciones No mascarables (NMI) • Interrupciones Mascarables

Una interrupción no mascarable, es aquella que puede ocurrir por la transición de flancos de bajada, falla en el oscilador y violación al acceso de la memoria flash. Una interrupción mascarable, es aquella que es causada por periféricos, incluyendo la interrupción por sobreflujo del watchdog timer. Tanto interrupciones Mascarables como No Mascarables puede ser activada de forma individual y son habilitadas por el bit GIE del Status Register. Cada uno de los pines de los

puertos P1 y P2 del µcontrolador MSP430, pueden configurarse como interrupciones externas. Los registros que intervienen en la configuración de interrupciones para los puertos de I/O son:

3.1 Configuración de registros de interrupción I/O. Item Registros Descripción del estado del bit Notas

1 PxIFG

Interrupt Flag Bit = 0 No hay interrupciones para atender. Bit = 1 Hay interrupciones para atender

Indican cuando una interrupción se ha ejecutado.

2 PxIE Interrupt Enable Bit = 0 interrupción deshabilitada. Bit = 1 interrupción habilitada.

Habilitación de las interrupciones.

3 PxIES Interrupt Edge Selected Bit = 0 Transición de bajo – alto Bit = 1 Transición de alto – bajo

Configuración de transición de alto – bajo y viceversa.

Tabla 5. Registros para manejo de interrupciones I/O.

El siguiente programa activa la interrupción del PIN 4 del puerto 1(P1.4), cuando sucede una transición de alto a bajo, se ejecuta la interrupción.

Page 19: Programacion MSP430 TI Version 1.7 Noviembre

19

#include <msp430x20x3.h>

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

P1DIR |= 0x01; // Set P1.0 to output direction

P1IE |= 0x10; // P1.4 interrupt enabled

P1IES |= 0x10; // P1.4 Hi/lo edge

P1IFG &= ~0x10; // P1.4 IFG cleared

_BIS_SR(LPM4_bits + GIE); // Enter LPM4 w/interrupt

while(1);

}

// Port 1 interrupt service routine

#pragma vector=PORT1_VECTOR

__interrupt void Port_1(void)

{

P1OUT ^= 0x01; // P1.0 = toggle

P1IFG &= ~0x10; // P1.4 IFG cleared

}

Considere el siguiente diagrama para la conexión para el Pin 4 del puerto 1( P1.4 ), físicamente el Pin 6 del µControlador. Adicionalmente se muestra el esquema para conectar un led, para el envío de datos. Para evitar efectos de ruido, se recomienda agregar un capacitor de 47 microFaradios por cada Push Button que se conecte.

Figura 16. Diagrama de conexión para una entrada de datos. Figura 17. Diagrama de conexión para salida de datos

El diagrama resultante para esta práctica es el siguiente, recuerde que para esta práctica, necesitamos de una fuente de alimentación externa:

Page 20: Programacion MSP430 TI Version 1.7 Noviembre

20

Figura 18. Diagrama de conexiones.

Ejercicios.

1. Elabore el diagrama de flujo y el diagrama de conexiones que realice los siguientes requerimientos.

� Cuando un dato “1” lógico sea leído por el pin P1.4 (mediante un interruptor), se envía

la siguiente secuencia de datos por el Puerto 1: 1,2 4,8,1,2,4,8 …..

� En caso contrario, cuando un dato “0” lógico sea leído por el pin P1.4, se envía la siguiente secuencia de datos por el Puerto 1: 8,4,2,1,8,4,2,1….

2. Del ejercicio anterior, asigne al pin 1.5 otro interruptor, de tal manera que cuando este

se ejecute, se lleva a cabo una interrupción que enviará la siguiente secuencia de datos por el Puerto 1: 8,4,2,1,8,4,2,1….

NOTAS:

Page 21: Programacion MSP430 TI Version 1.7 Noviembre

21

Capítulo 4.

Timer (Temporizador). Es muy común ver aplicaciones donde estén inmersos los sistemas de reloj y de temporizaciones para la ejecución de ciertas tareas. Tal es el caso de los semáforos que tienen cierto retardo para el encendido de las lámparas para el control de flujo de automóviles, el control de tiempos para los limpiaparabrisas de un automóvil, el control de tiempo para el calentado de alimentos en un horno de microondas, entre otros. En los µcontroladores MSP430, el sistema de timers se divide en:

• Timer A. • Timer B. • Watchdog timer.

El Timer B es más grande y más versátil que el Timer A, para el caso de µcontrolador MSP430 F2013 tenemos un Timer_A2, el cual es un 16-bit timer/counter con dos registros de capture/compare, salidas de PWM e intervalos de tiempo. Entre los registros principales que intervienen en el control de Timer A son los siguientes:

4.1 Configuración de registros del Timer A. Item Registros Descripción del estado del bit Notas

1 TACTL

Timer_A control Definición de la fuente de reloj, configuración del divisor, modos de operación, habilitación de interrupción.

2 TAR Timer_A counter Registro de 16 bits que lleva a cabo

el conteo del Timer A.

3 TACCTL0 Timer_A capture/compare control 0 Configuración de modo de

capture/compare

4 TACCR0 Timer_A capture/compare 0 Almacena el dato del conteo del

registro TAR en los modos de capture / compare.

Tabla 6. Registros para manejo del Timer A.

4.2 Interrupciones asociadas a TimerA. 1.- Interrupción generada por TimerA Capture/Compare Control 0 (TACCR0) En esta interrupción se activa el flag CCIFG, automáticamente se resetea cuando se ejecuta la interrupción de TACCR0. En modo captura (capture mode) cualquier bandera CCIFG es activada cuando el valor del timer es capturado en TACCRx. En mode comparación (compare mode) cualquier bandera CCIFG es activada si el registro TAR cuenta al valor asociado a TACCRx.

Page 22: Programacion MSP430 TI Version 1.7 Noviembre

22

2.- Interrupción generada por TimerA interrupt vector (TAIV) En esta interrupción, las banderas CCIFG de TACCR1, TACCR2 y TAIFG están asociadas a un único vector de interrupción. El registro de vector de interrupción TAIV, se emplea para determinar el tipo de interrupción.

4.3 Modos de operación

Existen cuatro modos de operación para llevar acabo el conteo, este se configura en los bits MCx del registro TACTL (Timer A Control Register) La descripción de estos modos de operación, se muestran a continuación:

Item Modo Descripción.

1 Stop El contador esta detenido

2 Up

El counter cuenta ascendente desde 0 hasta el valor indicado en TACL0(Timer A Capture Match 0), cuando alcanza este valor, se resetea y se coloca en 0. Si el valor en TACL0 es más grande que el máximo valor del Timer A counter, el counter se comporta como en modo continuo

3 Continuous

El counter cuenta ascendente desde 0 hasta el valor máximo del timer (0xFFFF), cuando el counter alcanza el máximo valor este resete y coloca en 0.

4 Up/down

El counter cuanta ascendente desde 0 hasta el valor indicado en TACL0(Timer A Capture Match 0), y después desciende hasta 0 . Si el valor en TACL0 es más grande que el máximo valor del Timer A counter, el counter se comporta como en modo continuo

Tabla 7. Modos de operación del Timer A.

4.4 Timer A Capture Compare Register 0 Existen dos registros de comparación en el Timer A, y un solo registro de counter, cada uno de estos registros puede operar el counter de forma independiente. El modulo 0 es el mas importante por que puede controlar el timer con el registro TACL0,adicionalmente posee su propias interrupciones. Para los programas mostrados en esta sección no se requiere fuente de alimentación externa. El siguiente programa realiza una temporización que se refleja en el encendido y apagado del led del pin P1.0, en una configuración de modo continuo. #include <msp430x20x3.h>

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

P1DIR |= 0x01; // P1.0 output

// TACCTL0 /* Timer A Capture/Compare Control 0 */

// Capture/ compare interrupt enable

CCTL0 = CCIE;

// TACCR0 /* Timer A Capture/Compare 0 */

Page 23: Programacion MSP430 TI Version 1.7 Noviembre

23

CCR0 = 10000;

// Registro de Control Timer_A

// TASSEL_2 -> source SMLK

// ID_3 -> input divider : 3

// MC_2 -> Continuous Mode (cuenta hasta 0xFFFF)

TACTL = TASSEL_2 + ID_3 + MC_2;

_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt

// equivalente a :

// eint(); // enable the global interrupt

// LPM0; // Enter low power mode

while(1);

}

// Timer A0 interrupt service routine

#pragma vector=TIMERA0_VECTOR

__interrupt void Timer_A (void)

{

P1OUT ^= 0x01; // Toggle P1.0

TAR = 0;

}

La interrupción se ejecuta cuando TAR alcanza el valor indicado en CCR0 (10000), entonces TAR se reinicia en 0. Nota: La linea TAR = 0, puede sustituirse por CCR0 += 10000; ya que se actualiza la referencia, y TAR realizara la misma cantidad de conteos (continuara el conteo por encima de 10000).

NOTAS:

Page 24: Programacion MSP430 TI Version 1.7 Noviembre

24

Ejercicios.

1.- Modifique la línea de programa para el registro de control Timer_A para que opere en modo ascendente (Up mode).

TACTL = TASSEL_2 + ID_3 + MC_1;

¿Cual es la diferencia? En este modo de operación, la interrupción ocurrirá cuando TAR alcanza el valor CCR0, y automáticamente este registro se colocará en 0, para nuevamente realizar el conteo hasta CCR0. Por tanto la linea TAR = 0 (o CCR0 +=10000) ya no se colocaría. El código quedaría como sigue: #include <msp430x20x3.h>

int contador;

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

P1DIR |= 0x01; // P1.0 output

// TACCTL0 /* Timer A Capture/Compare Control 0 */

// Capture compare interrupt enable

CCTL0 = CCIE;

// TACCR0 /* Timer A Capture/Compare 0 */

CCR0 = 10000;

// Registro de Control Timer_A

// TASSEL_2 -> source SMLK

// ID_2 -> input divider : 3

// MC_1 -> Up Mode (cuenta desde 0 hasta CCR0) TACTL = TASSEL_2 + ID_3 + MC_1;

_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt

while(1);

}

// Timer A0 interrupt service routine

#pragma vector=TIMERA0_VECTOR

__interrupt void Timer_A (void)

{

P1OUT ^= 0x01; // Toggle P1.0

}

2.- Calculo de tiempos para 0.5 segundo. Mediante la siguiente ecuación se determina el tiempo en el que el Timer se ejecuta en Modo Continuo (MC_2).

P1.0 = Overflow (Frecuencia) = 1MHz / (2 x TAR x ID_x ) Donde:

TAR es el registro contador del Timer A. ID_x es el divisior

Si quisiéramos que el encendido y apago del LED sucediera cada 1 segundo, con un ID_3 (igual a 8) sustituimos en la ecuación:

Page 25: Programacion MSP430 TI Version 1.7 Noviembre

25

Overflow (Frecuencia) = 1MHz / (2 x TAR x 8 )

Como la frecuencia es el inverso del tiempo:

1/ 0.5seg = 1MHz / (2 x TAR x 8 )

2 Hz = 1MHz / (2 x TAR x 8 )

Despejamos a TAR.

TAR = 1MHz / ( 2 x 2 x 8 ) = 1MHz / 32 = 31,150.

El resultado anterior, indica que el registro TAR debe de realizar 31,250 cuentas para desbordarse y dar paso a la interrupción. Por lo tanto al registro TAR lo debemos de cargar previamente con el siguiente valor:

TAR = 65,535 – 31,150 = 34,385.

Page 26: Programacion MSP430 TI Version 1.7 Noviembre

26

Capítulo 5.

SD16 (Convertidor Analógico Digital Sigma Delta) Son muy comunes los instrumentos de medición de señales analógicas que digitalizan estas señales para su posterior procesamiento. Una aplicación muy común es el monitoreo y control de temperatura. Un factor considerable cuando se trata de convertidores analógicos a digitales (ADC) es el grado de resolución que estos poseen, el cual esta definido por la cantidad de bits que lo constituyen. De este modo, un convertidor de 16 bits tendrá mayor precisión que uno de 8 bits, ya que en el primer caso obtendríamos 216 -1 (65535 )valores diferentes en comparación a un 2

8 (255)

valores analógicos. Entre las características más importantes del Convertidor Analógico Digital del µcontrolador MSP430F2013 se encuentran: • 16 bit sigma – delta. • 8 entradas analógicas multiplexadas • Selección de voltaje de referencia (1.2 volt) vía software. • Selección de referencia externo/interno vía software. • Sensor de temperatura integrado. • Modulación de frecuencia de entrada arriba de 1.1 MHz • Buffer con alta impedancia de entrada • Selección de modo de bajo consumo.

5.1 Configuración de registros de SD16. Item Registros Descripción NOTAS

1 SD16CTL SD16_A control Divisor de reloj, modo de consumo bajo, fuentes de reloj, habilitación de interrupción.

2 SD16IV SD16_A interrupt vector Selección de interrupción: - SD16MEMx overflow - SD16_A Interrupt

3 SD16CCTL0 SD16_A channel 0 control

Habilitación de buffer de alta impedancia, selección de modo unipolar, modos de conversión, oversampling, LSB toogle, banderas de interrupción por sobreflujo, habilitación de interrupción, habilitación de conversión.

4 SD16MEM0 SD16_A conversión

Memory

En este registro se almacena el resultado de la conversión.

5 SD16INCTL0 SD16_A input control

Generación de retardo después del inicio de conversión, preamplificación de ganancia, selección de canal de entrada diferencial (sensor de temperatura).

6 SD16AE SD16_A analog enable Habilitación de entradas externas

Tabla 8. Registros para manejo del convertidor AD Sigma/Delta .

Page 27: Programacion MSP430 TI Version 1.7 Noviembre

27

En el registro SD16MEM0 este registro almacena el resultado de la conversión (por cada paso de decimación en el filtro digital). El bit SD16IFG se coloca en 1 cuando un nuevo dato es escrito en el registro SD16MEM0

5.2 Formato de salida de datos Los modos de salida datos en el registro SD16MEM0 son:

• Complemento a 2. • Offset Binario • Modo unipolar

Se selecciona de acuerdo a la selección de los bits SD16DF y SD16UNI (del registro SD16CCTL0).

Tabla 9. Configuración de formato de salida de datos.

La siguiente imagen ilustra el resultado de la conversión de la entrada de voltaje

Figura 19. Conversión del voltaje de entrada

Page 28: Programacion MSP430 TI Version 1.7 Noviembre

28

5.3 Modos de conversión Para la configuración de los modos de conversión, se habilita un bit SD16SNGL del registro SD16CCTL0 (SD16_A Control Register)

Tabla 10. Selección del modo de conversión.

Single Conversion. Para el inicio de conversión, colocamos en 1 el bit SD16SC del registro SD16CCTL0 (SD16_A Control Register 0), y SD16SNGL = 1. El bit SD16SC se limpiará automáticamente una vez que se haya completado la conversión. Es recomendable que el resultado de la conversión almacenado en el registro SD16MEM0 sea leido antes de que el bit SD16SC sea limpiado, ya que pudiera leerse un valor inválido

Continuous Conversion. Cuando el bit SD16SNGL = 0, la conversión en modo continua es seleccionada e iniciará la conversión cuando el bit de SD16SC sea colocado en 1. El siguiente diagrama ilustra la diferencia de los diferentes modos de conversión :

Figura 20. Modos de conversión Analógico / Digital

Page 29: Programacion MSP430 TI Version 1.7 Noviembre

29

5.4 Uso del sensor de temperatura. Para el uso del sensor de temperatura SD16INCHx = 110 and sets SD16REFON = 1. No es posible emplear referencias externas para la conversión del sensor de temperatura. El offset de error del sensor de temperatura puede ser grande, por lo que ha que calibrarlo en la mayoría de las aplicaciones.

Figura 21. Sensor de temperatura para el µcontrolador MSP430F2013

Consultando la hoja de datos del MSP430F2013, se emplea la siguiente formula para calcular el voltaje de salida del sensor:

Page 30: Programacion MSP430 TI Version 1.7 Noviembre

30

5.5 Manejo de Interrupciones. Las dos fuentes de interrupciones por ADC son:

SD16IFG SD16_A interruption flag. Se habilita cuando una nueva conversión esta disponible, este registro se resetea cuando el registro SD16MEM0 es leido o limpiado via software. NOTA : Cuando el bit SD16SC = 1 (registro SD16CCTL0), inicia la conversión.

SD16OVIFG SD16_A overflow interruption flag El bit SD16IFG es colocado en 1, cuando en el registro SD16MEM0 se ha colocado el resultado de la conversión. Un requerimiento de interrupción es generada, cuando los bits SD16IE y GIE son habilitados. El siguiente programa realiza un conversión Analógico Digital. #include <msp430x20x3.h>

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

P1DIR |= 0x01; // Set P1.0 to output direction

// Registro de control

SD16CTL = SD16REFON + SD16SSEL_1; // 1.2V ref, SMCLK

// Registro de control de entrada

SD16INCTL0 = SD16INCH_1; // A1+/-

// Registro de control SD16_A

SD16CCTL0 = SD16UNI + SD16IE; // 256OSR, unipolar, interrupt enable

// Registro de habilitacion de entrada Analogica

SD16AE = SD16AE2; // P1.1 A1+, A1- = VSS

SD16CCTL0 |= SD16SC; // Set bit to start conversion

_BIS_SR(LPM0_bits + GIE);

while(1);

}

#pragma vector = SD16_VECTOR

__interrupt void SD16ISR(void)

{

// El resultado de la conversion se coloca en SD16MEM0

if (SD16MEM0 < 0x7FFF) // SD16MEM0 > 0.3V?, clears IFG

P1OUT &= ~0x01;

else

P1OUT |= 0x01;

}

El voltaje de referencia interno que hace mención el programa anterior es de 1.2 volts., el valor máximo que se puede leer vía software es:

V FSR (FULL SCALE RANGE) = V REF / 2 = (1.2)/ 2 = 0.6 volts De esta manera, cuando se leen 0.6 volts el registro SD16MEM0 tendría un valor máximo de 0xFFFF o bien 65,535. En la línea del programa:

if (SD16MEM0 < 0x7FFF) // 0x7FFF = 32,767.

Page 31: Programacion MSP430 TI Version 1.7 Noviembre

31

Se pregunta si se han leido menos de 0.3 volts. Por todo lo anterior, en el programa cuando se leen menos de 0.3 volts el led que esta en el pin P1.0 permanecerá apagado y cuando se lee un valor mayor a este, se encenderá. El diagrama resultante para esta práctica es el siguiente.

Figura 22. Lectura de ADC

Para el caso del sensor de temperatura, se deberá seleccionar en el registro SD16INCTL0 la configuración correcta (SD16INCTL0 = 0x06). Capture el siguiente programa, en el cual el microcontrolador si detecta que hay más de 30ºC, encenderá el led colocado en el pin P1.0. #include <msp430x20x3.h>

volatile unsigned int temp = 0;

void main( void )

{

int temperatura;

WDTCTL = 0x5A80; // Stop WDT

//Configure ADC and onboard Temperature Sensor

P1DIR |= 0x01;

SD16INCTL0 = 0x06; // Fourth input sample causes 1st Interrupt,

// Gain = 1, Channel = Temp sensor

SD16CTL = 0x00CC; // Clock divider = 8, low power mode is disabled,

// SRC = MCLK , VMID Buffer on, Onboard Ref on

SD16CCTL0 = 0x100A; //Unipolar, Offset Binary, Enable Interrupts start conv.

_BIS_SR(GIE); // Globally enable interrupts

while(1)

{

// Se realiza la conversion de temperatura

temperatura = (int)(100 * ((float)temp/65536)) - 25;

// Si la temperatura excede los 30ºC se enciende el led

if(temperatura > 30)

{

P1OUT |= 0x01;

}

else

{

P1OUT &= ~0x01;

}

}// fin de while

}// fin de main

Page 32: Programacion MSP430 TI Version 1.7 Noviembre

32

// Interrupt Handler for ADC Conversion Complete

#pragma vector=SD16_VECTOR

__interrupt void SD16ISR(void)

{

temp = SD16MEM0; // Copy ADC (T_sensor) reading to a global variable

}

Note que en la línea del programa: temperatura = (int)(100 * ((float)temp/65536)) - 25;

Se realiza la conversión de datos digitales a datos analógicos reales, el valor de – 25 corresponde a un offset que pudiese variar para calibrara el sensor de temperatura.

NOTAS:

Page 33: Programacion MSP430 TI Version 1.7 Noviembre

33

Capítulo 6.

Comunicación Serie.

6.1 Universal Serial Interfase. Los ucontroladores MSP430, poseen uno o varios módulos Universal Serial Interface (USI) que a su vez proveén del hardware necesario para realizar comunicación serie bajos los modos SPI e I

2C. Entre las características del módulo USI se incluyen:

• Modo UART (Universal Asynchronous Receiver/Transmitter) • Modo SPI(Serial Pheriferical Interface). • Modo I

2C(IC 2 active wires).

• Modo de transmisión maestro - esclavo. • Longitud variable de datos. • Programación de generación del reloj.

En esta práctica veremos la comunicación en modo UART, cabe mencionar que el ucontrolador MSP430F2013 no posee el hardware para establecer esta comunicación, sin embargo es posible implementarlo mediante el uso del TimerA.

6.2 Norma RS-232. La norma RS-232 es un protocolo de comunicación serial ya establecido que define la transmisión física entre una terminal DTE (Data Terminal Equipment) y un módem DCE (Data Communication Equipment). Este protocolo define un uno lógico como una señal comprendida en el rango de -5V a -15 V y un cero lógico como una señal dentro del rango +5V a +15V. Bajo esta terminología, la primera transición de 1 a 0 lógico, define un bit de inicio (Star bit) a la que le siguen 5, 6, 7 u 8 bits de datos. El octavo bit se puede utilizar como un bit de paridad (mecanismo para detección de errores); al final de la transmisión, la señal debe regresar al valor lógico cero; esto se define como el bit de parada (stop bit), que puede configurarse en 1, 1.5 o 2 bits de parada. El conector normalizado para este protocolo es el conector V24 (25 pines); sin embargo, en equipos de cómputo es más utilizado el conector DB9 de 9 pines (figura 15); los pines de este conector se muestran en la tabla 10.

Figura 23. Conector DB9 para RS232 Tabla 11. Pines de conexión RS232 conector DB9.

Page 34: Programacion MSP430 TI Version 1.7 Noviembre

34

6.3 Desarrollo Instrucciones: Arme el siguiente diagrama para establecer la comunicación entre el ucontrolador MSP40F2013 y la PC (emplearemos la hyperterminal de Windows).

Figura. 24. Circuito para comunicación serie.

El siguiente programa realiza la transmisión de datos mediante el protocolo RS232, bajo el siguiente formato de datos 2400 bps / 8 bits de datos / Sin paridad / 1 bit de stop. #define RXD 0x02 // RXD on P1.1

#define TXD 0x20 // TXD on P1.5

// Conditions for 2400 Baud SW UART, ACLK = 32768

#define Bitime_5 0x06 // ~ 0.5 bit length + small adjustment

#define Bitime 0x0E // 427us bit length ~ 2341 baud

unsigned int RXTXData;

unsigned char BitCnt;

void TX_Byte (void);

void RX_Ready (void);

#include <msp430x20x3.h>

void main (void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

CCTL0 = OUT; // TXD Idle as Mark

TACTL = TASSEL_1 + MC_2; // ACLK, continuous mode

P1SEL = TXD + RXD; //

P1DIR = TXD; //

// Mainloop

for (;;)

{

RX_Ready(); // UART ready to RX one Byte

_BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/ interr until char RXed

TX_Byte(); // TX Back RXed Byte Received

}

}

Page 35: Programacion MSP430 TI Version 1.7 Noviembre

35

// Function Transmits Character from RXTXData Buffer

void TX_Byte (void)

{

BitCnt = 0xA; // Load Bit counter, 8data + ST/SP

while (CCR0 != TAR) // Prevent async capture

CCR0 = TAR; // Current state of TA counter

CCR0 += Bitime; // Some time till first bit

RXTXData |= 0x100; // Add mark stop bit to RXTXData

RXTXData = RXTXData << 1; // Add space start bit

CCTL0 = CCIS0 + OUTMOD0 + CCIE; // TXD = mark = idle

while ( CCTL0 & CCIE ); // Wait for TX completion

}

// Function Readies UART to Receive Character into RXTXData Buffer

void RX_Ready (void)

{

BitCnt = 0x8; // Load Bit counter

CCTL0 = SCS + OUTMOD0 + CM1 + CAP + CCIE; // Sync, Neg Edge, Cap

}

// Timer A0 interrupt service routine

#pragma vector=TIMERA0_VECTOR

__interrupt void Timer_A (void)

{

CCR0 += Bitime; // Add Offset to CCR0

// TX

if (CCTL0 & CCIS0) // TX on CCI0B?

{

if ( BitCnt == 0)

CCTL0 &= ~ CCIE; // All bits TXed, disable interrupt

else

{

CCTL0 |= OUTMOD2; // TX Space

if (RXTXData & 0x01)

CCTL0 &= ~ OUTMOD2; // TX Mark

RXTXData = RXTXData >> 1;

BitCnt --;

}

}

// RX

else

{

if( CCTL0 & CAP ) // Capture mode = start bit edge

{

CCTL0 &= ~ CAP; // Switch from capture to compare mode

CCR0 += Bitime_5;

}

else

{

RXTXData = RXTXData >> 1;

if (CCTL0 & SCCI) // Get bit waiting in receive latch

RXTXData |= 0x80;

BitCnt --; // All bits RXed?

if ( BitCnt == 0)

//>>>>>>>>>> Decode of Received Byte Here <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

{

CCTL0 &= ~ CCIE; // All bits RXed, disable interrupt

_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)

}

//>>>>>>>>>> Decode of Received Byte Here <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

}

}

}

NOTAS:

Page 36: Programacion MSP430 TI Version 1.7 Noviembre

36

Capítulo 7.

PWM (Pulse Width Modulation) La gran mayoría de los ucontroladores tienen la capacidad de implementar un convertidor analógico - digital, la operación inversa para la generación de voltajes analógicos basados en valores digitales, no esta disponible de forma directa para los ucontroladores MSP430. Sin embargo podemos emplear la funcionalidad del TimerA para emular un convertidor digital - analógico. Una de las aplicaciones es el control de dispositivos de potencia. Note que en la generación de señal de PWM no se genera un nivel analógico, mas bien se genera mediante un switcheo rápido en la señal digital (aplicación de voltaje on / off muchas veces por segundo en el dispositivo de carga ) En el Timer A, se emplea el Modo de comparación para la generación de señales de salida de PWM, existen 8 modos de generación de señales PWM. Los modos de salida son definidos por los bits OUTMODx (del registro TACCTLx, Capture/Compare Control Register), que se describen en la siguiente tabla:

Tabla 12.

Page 37: Programacion MSP430 TI Version 1.7 Noviembre

37

7.1 Desarrollo Instrucciones: Arme el siguiente diagrama el cual controla la velocidad de un motor de CD mediante la PWM emitida por el ucontrolador MSP40F2013. Note que la etapa de control y de potencia se encuentran aisladas mediante un optoacoplador (CI 4N32) y por tanto las fuentes de alimentación se deben de encontrar aisladas y sus referencias (Tierra) no deben de ser comunes.

( donde +5 v < Vcc < +12 v )

Figura. 25. Circuito para control de velocidad por PMW.

El siguiente programa envia una salida de PWM a través del pin P1.2 empleando el Timer_A en configuración Up Mode. El valor en CCR0 (512-1) define el periodo y el valor en CCR1 los ciclos de la señal PWM. Un 75% de los ciclos se colcan en P1.2. #include <msp430x20x3.h>

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

P1DIR |= 0x0C; // P1.2 and P1.3 output

P1SEL |= 0x0C; // P1.2 and P1.3 TA1/2 options

CCR0 = 512; // PWM Period

CCTL1 = OUTMOD_7; // CCR1 reset/set

CCR1 = 384; // CCR1 PWM duty cycle

TACTL = TASSEL_2 + MC_1; // SMCLK, up mode

_BIS_SR(CPUOFF); // Enter LPM0

}

Page 38: Programacion MSP430 TI Version 1.7 Noviembre

38

Los bits de los registros P1SEL se emplean para definir la funcionalidad de los pines I/O o de los periféricos asociados. Cuando P1SELx = 1, las interrupciones de los pines de correspodientes se deshabilitan. ( Ver 8.2.5 del manual de operación MSP430x2xx_Family_User's_Guide_(Rev._D)_slau144d.pdf)

La salida OUTx es cambiada cuando el timer cuenta arriba del valor en CCR1 y regresa a CCR0 al valor 0, dependiendo del outputmode.

Figura 18. Salida de formas de onda de Timer_A en configuración Up Mode.

Ejercicios. 1.- Compile y descargue el programa variando el valor del ciclo del pulso, en la línea:

CCR1 = 384;

¿Qué cambios nota en la velocidad del motor en el motor?

2.- Diseñe un programa y agregue los componentes necesarios al diagrama anterior para que el motor aumente su velocidad, disminuya su velocidad y pare completamente. NOTA : Antes de realizar cualquiera de estas acciones, tome en cuenta que debe de detener al TIMER, por lo que hacer la modificación correspondiente y posteriormente ejecuta el TIMER, considere la siguiente porción de código propuesto.

TACTL |= MC_0 // Detiene el timer

CCR1 |= 50; // Incrementa el contenido del CCR1.

TACTL |= TASSEL_2 + MC_1; //Ejecuta el timer

NOTAS:

Page 39: Programacion MSP430 TI Version 1.7 Noviembre

39

Apéndice Modos de consumo ultrabajo de energía. La familia de los microcontroladores MSP430 esta diseñada para aplicaciones de consumo ultrabajo de energía para ello, emplea diferentes modos de operación: 1.- Consumo ultrabajo de energía. 2.- Rendimiento en velocidad de operación. 3.- Reducción individual de consumo de corriente en periféricos individuales. Para hacer referencia a los modos de ahorro de energía se emplea la sentencia LMP que significa Low - Power Mode. La siguiente figura muestra una grafica que indica el consumo de corriente en diferentes modos de operación.

SCG1 SCG0 OSCOFF CPUOFF MODE CPU & CLOCKS Estatus

0 0 0 0 Activo - CPU esta activa, habilitación de fuentes de reloj activas

0 0 0 1 LPM0 - CPU , MCLK estan deshabilitados. - SMCLK, ACLK estan activos

0 1 0 1 LPM1

- CPU , MCLK estan deshabilitados. - DCO y generador DC estan deshabilitados si DCO no es usado por SMCLK. - ACLK esta activo

1 0 0 1 LPM2

- CPU , MCLK, SMCLK, DCO deshabilitados - Generador DC habilitado. - ACLK esta activo.

1 1 0 1 LPM3

- CPU , MCLK, SMCLK, DCO y generador DC deshabilitado. - ACLK esta activo.

1 1 1 1 LPM4 - CPU y todas las fuentes de reloj deshabilitadas.

Tabla 13 . Modos de ahorro de energía

Recuerde que los bits SCG1, SCG0, OSCOFF Y CPUOFF; corresponden a cuatro de los bits del SR (Status Register ver pag. 6 ), por lo que la activación de estos modos de ahorro de energía se pueden ejecutar en una sola instrucción. Por ejemplo en la siguiente línea del programa:

_BIS_SR( LPM4_bits); //Bits Set in Status Register( Activa los bits del modo LMP4 )