timer a - Departamento de Electrónica

Anuncio
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Diseño con Microcontroladores
TIMER_A
El Timer_A es un timer/contador de 16 bit con tres registros de captura/comparación.
El Timer_A soporta múltiples capturas/comparaciones y temporización de intervalos de
tiempo; también genera salidas PWM.
El Timer_A además tiene la capacidad de generar interrupciones. Las interrupciones
pueden ser generadas por un contador en condiciones de desborde y desde cada registro de
captura/comparación.
El Timer_A incluye:
•
•
•
•
•
•
Timer/contador asincrónico de 16 bit con cuatro modos de operación.
Fuente de reloj seleccionable y configurable.
Tres registros configurables en captura/comparación.
Salidas configurables con capacidad PWM.
Entradas asincrónicas y salidas con latch.
Registro del vector de interrupciones para decodificación rápida de todas las
interrupciones del Timer_A.
Figura 1. Diagrama de bloques del Timer_A
Paola Andrea Rojas Contreras
Se habilita la captura estando seteado el bit CAP del
registro de control TACCTLx. Si el bit está en cero
corresponde al modo comparación
16-01-2004
9
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Diseño con Microcontroladores
OPERACIÓN:
La estructura y operación del Timer_A se encuentran a continuación:
• El Timer_A puede leer y escribir vía software, además puede generar interrupciones, al
igual que watchdog timer. El registro que contiene esta información es el TAR.
• El reloj puede ser configurado a través del registro TACTL en los bits TASSELx. La
selección del reloj podrá ser interno o externo. Las opciones que se tienen son las
siguientes:
o TACLK que se encuentra configurado por defecto, es decir es configurado
con los bits en TASSELx en 00.
o ACLK, que corresponde al reloj auxiliar configurable con los bits
TASSELx en 01.
o SMCLK que es el sub-sistema del reloj maestro, se configura con los bits
TASSELx en 10.
o Finalmente, el reloj externo, que se configura con los bits TASSELx en 11.
• La fuente de reloj puede ser pasada directamente al temporizador o dividida por 2, 4 ó 8,
usando los bits IDx.
Los modos de operación del temporizador son cuatro. Este se selecciona con los bits MCx.
MCx
00
01
Modo
Detenido
Incrementando
10
Continuo
11
Subida/Bajada
Descripción
El timer está detenido
El timer cuenta repetitivamente desde cero hasta el valor
de TACCR0.
El timer cuenta repetitivamente desde cero hasta
0FFFFh.
El timer cuenta repetitivamente desde cero hasta el valor
de TACCR0 y regresa hasta cero.
Figura 2. Modos de operación Timer A
Más detalles de los modos de configuración se pueden encontrar en el manual de
microcontroladores de la familia MSP430x1xx.
MODO CAPTURA
Este modo se selecciona con el bit CAP = 1, del registro de control TACCTLx. El modo
captura es usado para registrar eventos temporales. Puede ser usado para cálculos de
velocidad o mediciones de tiempo. Las entradas de captura CCIxA y CCIxB están
Paola Andrea Rojas Contreras
16-01-2004
9
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Diseño con Microcontroladores
conectadas a pines externos o señales internas y son seleccionadas con los bits CCISx. Una
captura ocurre en el canto seleccionado de la señal de entrada. Si una captura ocurre:
•
El valor del temporizador es copiado en el registro TACCRx
•
El flag de interrupción CCIFG es seteado
Figura 3. Captura de la señal
MODO COMPARACIÓN
La comparación se selecciona cuando el bit CAP está en cero. El modo de comparación se
usa para generar señales de salida PWM o interrupciones en un intervalo específico.
Cuando el TAR cuenta hasta el valor almacenado en el registro TACCRx:
•
•
•
•
La interrupción del flag CCIFG es seteada.
La señal interna EQUx = 1.
EQUx afecta la salida según el modo de salida.
La señal de entrada CCI es latcheada en SCCI
UNIDADES DE SALIDA
Cada bloque de captura/comparación contiene una unidad de salida, que es usada para
generar distintas señales, por ejemplo del tipo PWM. Cada señal de salida tiene ocho
modos de operación configurables en el registro TACCTLx. Estos son los que muestran a
continuación:
OUTMODx
000
MODO
Output
001
Set
Paola Andrea Rojas Contreras
DESCRIPCIÓN
La señal de salida OUTx está definida por el bit OUTx. La
señal OUTx se actualiza inmediatamente cuando OUTx es
actualizado.
La salida está seteada cuando la cuenta del temporizador llega
al valor TACCRx. Se mantiene seteado hasta un reset del
timer, o hasta que otro modo de salida más sea seleccionado y
afecte la salida.
16-01-2004
9
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Diseño con Microcontroladores
010
Toggle/Reset
011
Set/Reset
100
Toggle
101
Reset
110
Toggle/Set
111
Reset/Set
La salida cambia su estado (de cero a uno si estaba en cero, y
de uno a cero si estaba en uno), cuando la cuenta del timer
llega al valor de TACCRx. Es reseteada cuando la cuenta del
timer llega al valor de TACCR0.
La salida es seteada cuando el temporizador cuenta hasta el
valor TACCRx. Esta será reseteada cuando el temporizador
cuente hasta el valor TACCR0.
La salida cambia su estado (de cero a uno si estaba en cero, y
de uno a cero si estaba en uno), cuando la cuenta del timer
llega al valor de TACCRx. La salida periódica es del doble
del período del temporizador.
La salida es reseteada cuando el temporizador cuenta hasta el
valor TACCRx. Se mantiene reseteada hasta que otro modo
de salida más sea seleccionado y afecte la salida
La salida cambia su estado (de cero a uno si estaba en cero, y
de uno a cero si estaba en uno), cuando la cuenta del timer
llega al valor de TACCRx. Es seteada cuando la cuenta del
temporizador llega al valor TACCR0.
La salida es reseteada cuando el temporizador cuenta hasta el
valor TACCRx. Es seteada cuando el valor del temporizador
llega al valor TACCR0.
Figura 4. Modos de operación de la salida
Registros del Timer_A
Figura 5. Registros del Timer_A
Algunos de los registros del Timer_A se muestran a continuación:
TACTL, Registro de Control del Timer_A
Paola Andrea Rojas Contreras
16-01-2004
9
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Diseño con Microcontroladores
Figura 6. Registro TACTL del Timer_A
TAR, Registro del Timer_A
Figura 7. Registro TAR del Timer_A
TACCTLx, Registro de Control Captura/Compara
Figura 8. Registro TACCTLx del Timer_A
TAIV, Registro de interrupción del Timer_A
Figura 9. Registro TAIV del Timer_A
Paola Andrea Rojas Contreras
16-01-2004
9
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Diseño con Microcontroladores
Ejemplos.
Los siguientes ejemplos son algunas aplicaciones de la utilización del Timer_A. Se ha
empleado el modo de tiempo continuo en ambos ejemplos:
EJEMPLO 1.
Ejemplo básico del uso del Timer_A, en el cual se emplea el modo continuo con la unidad
de salida Reset/Set:
#include <msp430x14x.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "MSP430lib.c"
void InitTimer_A(void);
void main (void)
{
InitOsc();
InitPorts();
InitLCD();
InitTimer_A();
}
void InitTimer_A(void)
{
P1SEL = 0x80;
P1DIR |= BIT7;
// inicialización osciladores
// inicialización puertos
// inicialización LCD
// inicialización Timer A
//enable Dallas output
BCSCTL1 &= ~DIVA0;
// ACLK = XT1 / 4 = 2 MHz
BCSCTL1 |= DIVA1;
TACTL = ID1 | ID0 | TASSEL0 | TAIE; // stop timer, use ACLK / 8 = 250 kHz, gen. int.
TACTL |= MC1;
// start timer in continuous up-mode
//_EINT();
// enable interrupts
TACCTL2 = OUTMOD2 | OUTMOD1 | OUTMOD0 | CCIS0;
// en este caso el Timer_A está en Reset/set
TACCTL2 &= ~CAP;
//está en modo de comparación
TACCR0 = 0xAAAA;
TACCR2 = 0x5555;
}
La figura 3 muestra la forma de onda que se genera con el uso del Timer_A, en modo
continuo. Ella se puede contrastar con las formas de ondas que se generan en modo
continuo en forma teórica, la salida es reseteada cuando el temporizador cuenta hasta el
valor TACCRx. Es seteada cuando el valor del temporizador llega al valor TACCR0
(figura 4):
Paola Andrea Rojas Contreras
16-01-2004
9
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Diseño con Microcontroladores
Figura 10. Forma de onda generada por el ejemplo 1.
Figura 11. Ejemplo de las señales de salida en el modo continuo.
Paola Andrea Rojas Contreras
16-01-2004
9
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Diseño con Microcontroladores
EJEMPLO 2.
En el siguiente ejemplo se muestra el uso de las interrupciones junto con el uso de la
pantalla de cristal líquido (LCD). En cada interrupción se envía un carácter a la LCD:
#include <msp430x14x.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "MSP430lib.c"
void InitTimer_A(void);
int ii, jj;
char Message [] = "Uso del Timer_A";
void main (void)
{
ii = 0;
jj = 0;
InitOsc();
InitPorts();
InitLCD();
InitTimer_A();
}
void InitTimer_A(void)
{
P1SEL = 0x80;
P1DIR |= BIT7;
// inicialización osciladores
// inicialización puertos
// inicialización LCD
// inicialización Timer A
//enable Dallas output
BCSCTL1 &= ~DIVA0;
// ACLK = XT1 / 4 = 2 MHz
BCSCTL1 |= DIVA1;
TACTL = ID1 | ID0 | TASSEL0 | TAIE; // stop timer, use ACLK / 8 = 250 kHz, gen. int.
TACTL |= MC1;
// start timer in continuous up-mode
_EINT();
// enable interrupts
TACCTL2 = OUTMOD2 | CCIS0;
// en este caso el Timer_A está en Toggle
TACCTL2 &= ~CAP;
TACCR0 = 0xAAAA;
TACCR2 = 0x5555;
}
#pragma vector=TIMERA1_VECTOR
__interrupt void TCPClockHandler (void)
{
if (TAIV == 10)
// check for timer overflow, reset int.-flag
{
if (ii++ == 4)
{
Paola Andrea Rojas Contreras
16-01-2004
9
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
DEPARTAMENTO DE ELECTRONICA
Diseño con Microcontroladores
//STATUS_LED_ON;
P2OUT ^= BIT1;
if (jj < sizeof (Message)-1)
{
SEND_CHAR(Message[jj++]);
if (jj == 15) SEND_CMD (DD_RAM_ADDR2);
if (jj == 31)
{
SEND_CMD(CLR_DISP);
SEND_CMD(CUR_HOME);
}
}
else
{
jj = 0;
SEND_CMD(CLR_DISP);
SEND_CMD(CUR_HOME);
}
ii = 0;
}
}
}
Figura 12. Forma de onda generada por el ejemplo 2.
Paola Andrea Rojas Contreras
16-01-2004
9
Descargar