Professional Documents
Culture Documents
Contenido
Captulo 1. Introduccin 1.1 Acerca del manual. 1.2 Que aplicaciones podemos realizar con estos dispositivos? 1.3 Arquitectura 1.4 ALU 1.5 Registros de trabajo. 1.6 Caractersticas del microcontrolador MSP430-F2013. 1.7 Empleo de la IDE IAR Embedded Workbench. 1.8 Modo de empleo del kit de desarrollo eZ430-F2013 1.9 Operaciones binarias I/O digitales. 2.1 Configuracin de pines de I/O . Interrupciones. 3.1 Configuracin de registros de interrupcin I/O. Timer A. 4.1 Configuracin de registros del Timer A. 4.2 Interrupciones asociadas a TimerA. 4.3 Modos de operacin 4.4 Timer A Capture Compare Register 0 SD16 (Convertidor Analgico Digital Sigma Delta) 5.1 Configuracin de registros de SD16. 5.2 Formato de salida de datos 5.3 Modos de conversin 5.4 Uso del sensor de temperatura. 5.5 Manejo de Interrupciones. Comunicacin Serie 6.1 Configuracin de registros USART 6.2 Norma RS232 PWM 7.1 Consideraciones generales. 7.2 Configuracin de registros. Modos de ahorro de energa. 3 3 4 5 6 6 8 9 13 16 17 17 20 20 23 23 23 24 24 28 28 29 30 31 32 35 35 35 38 38 38 41
Captulo 2.
Captulo 3.
Captulo 4.
Captulo 5.
Captulo 6.
Captulo 7.
Apndice .
Capitulo 1.
Introduccin.
Con sus ms de 75 aos en el mercado, y desde sus orgenes en los campos petroleros en Texas, Estados Unidos, Texas Instuments se ha consolidado como una compaa lder en el mercado de la electrnica. 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 silicn, los primeros circuitos integrados y las calculadoras de bolsillo. TI lindera actualmente los DSP (digital Signal Processing) y tecnologa analgica, inalmbrica, sistemas de audio.
Los microcontroladores MSP430 de Texas Instruments son dispositivos de 16 bits, con espacio de direccionamiento compartida por el procesador, memoria y perifricos. 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 caractersticas ms importantes de estos dispositivos es su bajo consumo de energa. Por ejemplo, en una aplicacin como waterimetros, mediante una sola batera puede llegar operar durante 10 aos de forma continua. Su programacin 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 programacin es rpida y sencilla, nos concentraremos en el desarrollo del algoritmo.
4 Este manual es una recopilacin de documentacin proporcionada por Texas Instruments Corp. y que SyhaConsulting distribuye en este curso.
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 propsito general.
5 Toda la memoria esta contenida en un espacio contino de direccionamiento: RAM, ROM, funciones de registro especiales, registros de perifricos. Estas caractersticas le permite al desarrollador mayor flexibilidad y mejor administracin de la memoria. El siguiente diagrama ilustra las caractersticas antes mencionadas.
1.4 ALU.
Esta seccin de la CPU realiza operaciones de adicin, sustraccin, comparacin operaciones lgicas (AND, OR y XOR), estas operaciones pueden afectar las banderas de overflow, zero, negative y de acarreo.
6 Item 1 Registro R0 - Program Counter (PC) Descripcin Es un registro de 20 bits que apunta a la siguiente instruccin a ser ejecutada. Cada instruccin emplea cierta cantidad de bytes (2,4,6 u 8), y el PC se incrementa de acuerdo a la cantidad de bytes.
Este registro de 20 bits es empleado por la CPU para almacenar la direccin de retorno en la llamada a una subrutina o una interrupcin.
Registro de 16 bits, indica si la operacin que se realiz dio como resultado de acarreo, sobre flujo, entre otros y se refleja en la activacin de sus bits (banderas)
Bit
Nombre
Descripcin. Se coloca en 1 cuando el resultado de una operacin aritmtica produce un sobreflujo. Se coloca en 1 cuando se apaga el generador DCO, si DCOCLK no es usado por MCLK o SMCLK. Se coloca en 1 cuando se apaga FLL+ loop control. Colocado en 1 cuando el se deshabilita el cristal LFXT1. Colocado en 1 cuando la CPU se apaga. Colocado en 1 cuando se activan la habilitacin para interrupciones. Colocado en 1 cuando el resultado de una operacin previo produjo un valor inferior a 0. Colocado en 1 cuando el resultado de una operacin previo produjo cero Colocado en 1cuando el resultado de una operacin previo produjo un acarreo
Oveflow bit. System Clock Generator 1 System Clock Generator 0 OSC off CPU off General Interruption Enable Negative Bit Zero Bit Carry Bit
N Z C
3 4
En lenguaje ASM del MPS430, le permite emplear 24 instrucciones emuladas, de mayor complejidad. Registros de propsito general.
Tabla 1. Registros de trabajo.
De forma resumida, las caractersticas 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: 300A en 1 MHz, a 2.2 V Standby Mode: 0.6 A Off Mode (RAM Retention): 0.1 A 4. Modos de ahorro de energa (Power-Saving Modes).
1
5. Arquitectura de 16-Bit RISC, 62.5 ns de tiempo de ciclos de instruccin. 6. Configuraciones bsicas para el mdulo de reloj : Frecuencias internas superiores a 16 MHz con 4 frecuencias de calibracin 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
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 programacin. 12. Programmable Code Protection by Security Fuse 13. On-Chip Emulation Logic With Spy-Bi-Wire
Para la programacin de este dispositivo, durante este curso emplearemos la siguiente relacin de manuales: eZ430-F2013_Development_Tool_User's_Guide_(Rev._B)_slau176b instalacin 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) (Manual sobre la
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 pestaa 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.
9 4. Seleccione la opcin FET Debugger indicar la interfaz por USB 5. Seleccione men Project Setup Connection TI USB FET para
6. Seleccione men Project Debug para iniciar el C-SPY debugger. C-SPY borrar el contenido actual del dispositivo y cargar la apliacin actual en la memoria Flash del controlador (NOTA: En antes de ejecutar esta instruccin, ya debe estar conectado el kit eZ430-F2013). 7. Seleccione men Debug Go para iniciar la aplicacin, el led empezar a destellar.
8. Para finalizar la sesin de depurado y regresar a la sesin de Workbench, seleccione men Debug Stop Debugging . 9. Para cerrar la aplicacin, seleccione el men File Exit.
Como ver, la aplicacin 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).
main.
10
main.
En este punto, el programa le pedir un nombre para el archivo, crea una nueva carpeta donde se almacenarn los archivos.
11
Para finalizar, en la seccin de FET Debugger, realice la seleccin como aparece a continuacin.
Su proyecto ha sido creado, en este punto ya estamos en posicin de aadir cdigo. Tome en cuenta que solo se puede tener un proyecto abierto a la vez. La siguiente pantalla muestra los comandos ms empleados:
12
Esta opcin, compila, carga y corre el programa en el dispositivo Ejecuta el programa en el chip Se detiene el proceso de depurado, si desea hacer modificaciones en el cdigo del programa, ustede debe de seleccionar esta opcin. Este es el mapa de memoria del ez430. Indica la instruccin que se esta ejecutando
Los dos primeros elementos vienen en un encapsulado de plstico; lo que pareciera ser una memoria USB convencional; se trata nada menos que de uno de los programadores ms innovadores en el mundo de la electrnica. 1.8.1 Descripcin 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 adems del microcontrolador MSP430F2013 un led de montaje superficial, el cual nos permitir probar diferentes programas de forma rpida.
13
El encapsulado de plstico es fcilmente removible, para ello emplee un pequeo 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.
Notas importantes: Durante la etapa de programacin/ depuracin, usted no necesitar una fuente de alimentacin 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 ms complicadas, ser necesario remover la tarjeta de de prueba removible y alimentarlo mediante una fuente externa. Recuerde que la alimentacin de este dispositivo es de 1.8 a 3.6 volts. (ver pgina 8).
14 Durante este curso, en cada uno de los programas se indicar que circuitera se necesita realizar; en la cual se asume que el microcontrolador MSP430F2013 recibe una alimentacin de entre 1.8 a 3.6 volts.
Item 1
Operacin C = ~A ;
Resultado C = 0b0010; C = 0b1101 (OR) 0b0101 0b1101 C= 0b1101 (AND) 0b0101 0b0101 C= 0b1101 (XOR) 0b0101 0b1000
Descripcin Operacin lgica NOT. Operacin lgica OR, instruccin empleada para realizar la activacin de bits sin afectar los restantes. Operacin lgica AND, instruccin empleada para realizar la activacin de bits sin afectar los restantes. Operacin lgica XOR, de acuerdo a la naturaleza de esta instruccin el resultado se coloca en 1 cuando los operandos son diferentes. Esta instruccin, es equivalente a C=C|A;
C = A | B;
C = A & B;
C = A ^ B;
NOTAS:
15
Captulo 2.
I/O digitales.
Todo controlador posee perifricos para poder interactuar con el exterior, los dispositivos MSP430 de TI pueden configurarse para que se comporten como de perifricos de entrada o de salida, cada uno de estos perifricos pueden ser accedidos de forma independiente haciendo referencia a los pines del controlador.
PxDIR
PxREN
Tabla 3. Registros para la configuracin 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 1 2 3 4 Operacin OR AND NOT XOR Smbolo | & ~ ^
Ejemplo, si deseamos que el pin 7 del puerto 1 (P1.7 ) este configurado como salida, entonces: P1DIR = P1DIR | 0x80. O de forma ms abreviada: P1DIR | = 0x80.
El uso del operador | nos permite que no se modifiquen los pines previamente configurados. Si quisiramos encender un led o bien enviar un 1 lgico en el pin P1.7, sin modificar otros registros: P1DIR | = 0x80.
16 Ahora bien, si deseramos apagar este led, o bien enviar un cero lgico, podemos emplear la siguiente instruccin: P1OUT &= ~0x80;
Note que ~0x80 = 0x7F, que es su complemento Si quisiramos leer el estado de un push button, emplearemos la instruccin 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 despus de ejecutar la siguiente lnea, el pin P1.0 se colocara en 1: P1OUT ^= 0x01; Se ejecutara nuevamente, el pin P1.0 se colocara en 1. Note que podemos emplear notacin 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; P1DIR |= 0x01; for (;;) { volatile unsigned int i; P1OUT ^= 0x01; i = 5000; do i--; while (i != 0); } }
Para esta ejercicio no se necesita fuente de alimentacin 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 lnea del programa:
i = 5000; // SW Delay
A un valor ms grande o ms pequeo. Qu efecto produce?. 2. Qu operacin binaria es la responsable de que se apague y encienda el led?
17 Otra forma para hacer referencia a la activacin de pines es mediante el empleo de las definiciones BIT_X donde X corresponde al nmero de bit. Por ejemplo, si deseramos activar el bit 7 y el bit 0, podramos 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 operacin realizara 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 operacin realizara para que el estado de los tres pines anteriores cambie a estado alto sin afectar los restantes? 3. Realice un esquema sobre la colocacin 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:
18
Captulo 3.
Interrupciones.
Una interrupcin, como su nombre lo indica es una indicacin de paro a una actividad o evento, debido a una actividad de mayor prioridad. Imagine una aplicacin en la que el sistema de seguridad contra incendio, cuando el sistema recibe una seal de alarma debida a la aparicin 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 interrupcin no mascarable, es aquella que puede ocurrir por la transicin de flancos de bajada, falla en el oscilador y violacin al acceso de la memoria flash. Una interrupcin mascarable, es aquella que es causada por perifricos, incluyendo la interrupcin 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 configuracin de interrupciones para los puertos de I/O son:
PxIFG
PxIE
PxIES
El siguiente programa activa la interrupcin del PIN 4 del puerto 1(P1.4), cuando sucede una transicin de alto a bajo, se ejecuta la interrupcin.
19
#include
<msp430x20x3.h>
void main(void) { WDTCTL = WDTPW + WDTHOLD; P1DIR |= 0x01; P1IE |= 0x10; P1IES |= 0x10; P1IFG &= ~0x10; _BIS_SR(LPM4_bits + GIE); while(1); } // Port 1 interrupt service routine #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { P1OUT ^= 0x01; P1IFG &= ~0x10; }
// // // // //
Stop watchdog timer Set P1.0 to output direction P1.4 interrupt enabled P1.4 Hi/lo edge P1.4 IFG cleared
Considere el siguiente diagrama para la conexin para el Pin 4 del puerto 1( P1.4 ), fsicamente el Pin 6 del Controlador. Adicionalmente se muestra el esquema para conectar un led, para el envo de datos. Para evitar efectos de ruido, se recomienda agregar un capacitor de 47 microFaradios por cada Push Button que se conecte.
El diagrama resultante para esta prctica es el siguiente, recuerde que para esta prctica, necesitamos de una fuente de alimentacin externa:
20
Ejercicios.
1. Elabore el diagrama de flujo y el diagrama de conexiones que realice los siguientes requerimientos. Cuando un dato 1 lgico sea ledo por el pin P1.4 (mediante un interruptor), se enva la siguiente secuencia de datos por el Puerto 1: 1,2 4,8,1,2,4,8 .. En caso contrario, cuando un dato 0 lgico sea ledo por el pin P1.4, se enva 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 interrupcin que enviar la siguiente secuencia de datos por el Puerto 1: 8,4,2,1,8,4,2,1.
NOTAS:
21
Captulo 4.
Timer (Temporizador).
Es muy comn ver aplicaciones donde estn inmersos los sistemas de reloj y de temporizaciones para la ejecucin de ciertas tareas. Tal es el caso de los semforos que tienen cierto retardo para el encendido de las lmparas para el control de flujo de automviles, el control de tiempos para los limpiaparabrisas de un automvil, 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 ms grande y ms verstil 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:
2 3
TAR TACCTL0
22 2.- Interrupcin generada por TimerA interrupt vector (TAIV) En esta interrupcin, las banderas CCIFG de TACCR1, TACCR2 y TAIFG estn asociadas a un nico vector de interrupcin. El registro de vector de interrupcin TAIV, se emplea para determinar el tipo de interrupcin.
Up
Continuous
// TACCTL0 /* Timer A Capture/Compare Control 0 */ // Capture/ compare interrupt enable CCTL0 = CCIE; // TACCR0 /* Timer A Capture/Compare 0 */
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; TAR = 0; }
// Toggle P1.0
La interrupcin 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:
24
Ejercicios.
1.- Modifique la lnea 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 operacin, la interrupcin ocurrir cuando TAR alcanza el valor CCR0, y automticamente 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 colocara. El cdigo quedara como sigue:
#include <msp430x20x3.h> int contador; void main(void) { WDTCTL = WDTPW + WDTHOLD; P1DIR |= 0x01;
// 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); while(1); } // Enter LPM0 w/ interrupt
// 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 ecuacin 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 quisiramos que el encendido y apago del LED sucediera cada 1 segundo, con un ID_3 (igual a 8) sustituimos en la ecuacin:
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 interrupcin. Por lo tanto al registro TAR lo debemos de cargar previamente con el siguiente valor: TAR = 65,535 31,150 = 34,385.
26
Captulo 5.
Descripcin
SD16_A control
NOTAS
Divisor de reloj, modo de consumo bajo, fuentes de reloj, habilitacin de interrupcin. Seleccin de interrupcin:
SD16IV
SD16CCTL0
Habilitacin de buffer de alta impedancia, seleccin de modo unipolar, modos de conversin, oversampling, LSB toogle, banderas de interrupcin por sobreflujo, habilitacin de interrupcin, habilitacin de conversin. En este registro se almacena el resultado de la conversin. Generacin de retardo despus del inicio de conversin, preamplificacin de ganancia, seleccin de canal de entrada diferencial (sensor de temperatura). Habilitacin de entradas externas
SD16MEM0
SD16INCTL0
SD16AE
27 En el registro SD16MEM0 este registro almacena el resultado de la conversin (por cada paso de decimacin en el filtro digital). El bit SD16IFG se coloca en 1 cuando un nuevo dato es escrito en el registro SD16MEM0
28
Single Conversion.
Para el inicio de conversin, colocamos en 1 el bit SD16SC del registro SD16CCTL0 (SD16_A Control Register 0), y SD16SNGL = 1. El bit SD16SC se limpiar automticamente una vez que se haya completado la conversin. Es recomendable que el resultado de la conversin almacenado en el registro SD16MEM0 sea leido antes de que el bit SD16SC sea limpiado, ya que pudiera leerse un valor invlido
Continuous Conversion.
Cuando el bit SD16SNGL = 0, la conversin en modo continua es seleccionada e iniciar la conversin cuando el bit de SD16SC sea colocado en 1. El siguiente diagrama ilustra la diferencia de los diferentes modos de conversin :
29
Consultando la hoja de datos del MSP430F2013, se emplea la siguiente formula para calcular el voltaje de salida del sensor:
30
SD16IFG
SD16_A interruption flag. Se habilita cuando una nueva conversin 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 conversin.
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 conversin. Un requerimiento de interrupcin es generada, cuando los bits SD16IE y GIE son habilitados. El siguiente programa realiza un conversin Analgico Digital.
#include <msp430x20x3.h>
void main(void) { WDTCTL = WDTPW + WDTHOLD; P1DIR |= 0x01; // Registro de control SD16CTL = SD16REFON + SD16SSEL_1;
// Registro de control de entrada SD16INCTL0 = SD16INCH_1; // Registro de control SD16_A SD16CCTL0 = SD16UNI + SD16IE;
// A1+/-
// Registro de habilitacion de entrada Analogica SD16AE = SD16AE2; // P1.1 A1+, A1- = VSS SD16CCTL0 |= SD16SC; _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; } // Set bit to start conversion
El voltaje de referencia interno que hace mencin el programa anterior es de 1.2 volts., el valor mximo que se puede leer va 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 tendra un valor mximo de 0xFFFF o bien 65,535. En la lnea del programa:
if (SD16MEM0 < 0x7FFF) // 0x7FFF = 32,767.
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 prctica es el siguiente.
Para el caso del sensor de temperatura, se deber seleccionar en el registro SD16INCTL0 la configuracin correcta (SD16INCTL0 = 0x06). Capture el siguiente programa, en el cual el microcontrolador si detecta que hay ms de 30C, 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 30C se enciende el led if(temperatura { P1OUT |= 0x01; } else { P1OUT &= ~0x01; } }// fin de while }// fin de main > 30)
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 }
Se realiza la conversin de datos digitales a datos analgicos reales, el valor de 25 corresponde a un offset que pudiese variar para calibrara el sensor de temperatura.
NOTAS:
33
Captulo 6.
Comunicacin Serie.
6.1 Universal Serial Interfase.
Los ucontroladores MSP430, poseen uno o varios mdulos Universal Serial Interface (USI) que a su vez proven del hardware necesario para realizar comunicacin serie bajos los modos SPI e I2C. Entre las caractersticas del mdulo USI se incluyen: Modo UART (Universal Asynchronous Receiver/Transmitter) Modo SPI(Serial Pheriferical Interface). Modo I2C(IC 2 active wires). Modo de transmisin maestro - esclavo. Longitud variable de datos. Programacin de generacin del reloj.
En esta prctica veremos la comunicacin en modo UART, cabe mencionar que el ucontrolador MSP430F2013 no posee el hardware para establecer esta comunicacin, sin embargo es posible implementarlo mediante el uso del TimerA.
34
6.3 Desarrollo
Instrucciones: Arme el siguiente diagrama para establecer la comunicacin entre el ucontrolador MSP40F2013 y la PC (emplearemos la hyperterminal de Windows).
El siguiente programa realiza la transmisin 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 #define TXD // 0x02 0x20 // RXD on P1.1 // TXD on P1.5
Conditions for 2400 Baud SW UART, ACLK = 32768 0x06 0x0E // ~ 0.5 bit length + small adjustment // 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; CCTL0 = OUT; TACTL = TASSEL_1 + MC_2; P1SEL = TXD + RXD; P1DIR = TXD; // Mainloop for (;;) { RX_Ready(); _BIS_SR(LPM3_bits + GIE); TX_Byte(); } }
// UART ready to RX one Byte // Enter LPM3 w/ interr until char RXed // TX Back RXed Byte Received
35
// Function Transmits Character from RXTXData Buffer void TX_Byte (void) { BitCnt = 0xA; while (CCR0 != TAR) CCR0 = TAR; CCR0 += Bitime; RXTXData |= 0x100; RXTXData = RXTXData << 1; CCTL0 = CCIS0 + OUTMOD0 + CCIE; while ( CCTL0 & CCIE ); } // 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; // TX // // // // // // // // Load Bit counter, 8data + ST/SP Prevent async capture Current state of TA counter Some time till first bit Add mark stop bit to RXTXData Add space start bit TXD = mark = idle Wait for TX completion
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:
36
Captulo 7.
Tabla 12.
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 alimentacin se deben de encontrar aisladas y sus referencias (Tierra) no deben de ser comunes.
El siguiente programa envia una salida de PWM a travs del pin P1.2 empleando el Timer_A en configuracin Up Mode. El valor en CCR0 (512-1) define el periodo y el valor en CCR1 los ciclos de la seal PWM. Un 75% de los ciclos se colcan en P1.2.
#include <msp430x20x3.h>
void main(void) { WDTCTL = WDTPW + WDTHOLD; P1DIR |= 0x0C; P1SEL |= 0x0C; CCR0 = 512; CCTL1 = OUTMOD_7; CCR1 = 384; TACTL = TASSEL_2 + MC_1; _BIS_SR(CPUOFF); }
// // // // // // //
Stop WDT P1.2 and P1.3 output P1.2 and P1.3 TA1/2 options PWM Period CCR1 reset/set CCR1 PWM duty cycle SMCLK, up mode
// Enter LPM0
38 Los bits de los registros P1SEL se emplean para definir la funcionalidad de los pines I/O o de los perifricos asociados. Cuando P1SELx = 1, las interrupciones de los pines de correspodientes se deshabilitan. ( Ver 8.2.5 del manual de operacin 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.
Ejercicios.
1.- Compile y descargue el programa variando el valor del ciclo del pulso, en la lnea:
CCR1 = 384;
Qu cambios nota en la velocidad del motor en el motor? 2.- Disee 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 modificacin correspondiente y posteriormente ejecuta el TIMER, considere la siguiente porcin de cdigo propuesto.
TACTL CCR1 TACTL |= MC_0 // Detiene el timer |= 50; // Incrementa el contenido del CCR1. |= TASSEL_2 + MC_1; //Ejecuta el timer
NOTAS:
39
SCG1 0 0 0
SCG0 0 0 1
OSCOFF 0 0 0
CPUOFF 0 1 1
LPM2
1 1
1 1
0 1
1 1
LPM3 LPM4
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 activacin de estos modos de ahorro de energa se pueden ejecutar en una sola instruccin. Por ejemplo en la siguiente lnea del programa:
_BIS_SR( LPM4_bits); //Bits Set in Status Register( Activa los bits del modo LMP4 )