Descargar

Microcontrolador MSP430


  1. ¿Que es un Timer?
  2. Registro de cada timer
  3. Ejemplos de programación
  4. Restricción en el uso de los timers
  5. Operación
  6. Modos de operación de los timers
  7. Modo captura
  8. Modo comparación
  9. Unidades de salida
  10. Bibliografía

¿Que es un Timer?

Corresponde a un "contador" de eventos que esta sincronizado con alguna fuente de reloj. Este se encarga de cuantificar el tiempo entre eventos que podemos definir.

Usos del Timer

  • Aplicaciones de tiempo real.

  • Contador para ciertos eventos, dependiendo de la aplicación

  • Algunos contadores permiten generar avisos, con los cuales podemos implementar o realizar funciones bajo ciertas condiciones que manejemos.

Timers A – B. Del microcontrolador MSP430.

Principales características que constan ambos timer"s :

  • Timer/contador de 16 bit (máximo)

  • Fuente de reloj seleccionable y configurable.

  • se puede pre-escalar la entrada de reloj en 1, 2, 4 u 8.

  • Registros configurables para captura o comparación.

  • Salidas configurables con capacidad PWM.

  • Registro del vector de interrupciones para decodificación rápida de todas las interrupciones de los Timers

Principales diferencias entre ambos timers:

  • El registro de cuenta puede ser configurable de 8, 10, 12 o 16 bits, sólo implementado en el timer B. En el Timer A es fijo de 16 bits.

  • Timer_B tiene 7 registro de captura/comparación, mientras que Timer_A solo tiene 3 registros.

  • Los registros TBCCRx del timer B tienen buffers dobles y pueden ser agrupados. No esta implementado en el Timer A ambas características.

  • Todas las salidas del Timer B pueden ser llevadas a un estado de alta impedancia.

Diagrama de Bloques Timer A:

edu.red

Diagrama de bloques timer A.

Diagrama de bloques Timer B

edu.red

Diagrama de bloques timer B.

Registro de cada timer

Regsitro de Control del timer

TACL, Registro de Control del Timer_A

15

14

13

12

11

10

9

8

No usado

TASSELx

7

6

5

4

3

2

1

0

Idx

MCx

No usado

TACLR

TAIE

TAIFG

TBCL, Registro de Control del Timer_B

15

14

13

12

11

10

9

8

No usado

TBLGRPx

CNTLx

No usado

TBSSELx

7

6

5

4

3

2

1

0

Idx

MCx

No usado

TBCLR

TBIE

TBIFG

Registro de control de Captura/comparación

TACCTLx Registro de Control de Captura/Comparación

15

14

13

12

11

10

9

8

CMx

CCISx

SCS

SCCI

No usado

CAP

7

6

5

4

3

2

1

0

OUTMODx

CCIE

CCI

OUT

COV

CCIFG

TBCCTLx Registro de Control de Captura/Comparación

15

14

13

12

11

10

9

8

CMx

CCISx

SCS

CLLDx

CAP

7

6

5

4

3

2

1

0

OUTMODx

CCIE

CCI

OUT

COV

CCIFG

Registro de los vectores de interrupción

Timer_A Registro del Vector de Interrupcion

15

14

13

12

11

10

9

8

0

0

0

0

0

0

0

0

7

6

5

4

3

2

1

0

0

0

0

0

TAIVx

0

Timer_B Registro del Vector de Interrupcion

15

14

13

12

11

10

9

8

0

0

0

0

0

0

0

0

7

6

5

4

3

2

1

0

0

0

0

0

TBIVx

0

Otros registros :

  • TAR : corresponde al registro donde se almacena la cuenta en el timer A

TBR : corresponde al registro donde se almacena la cuenta en el timer B

  • TACCRx: registro donde se almacena el valor capturado o de comparación, según sea el caso. Solo consta de 3 registros en el timer A.

TBCCRx: registro donde se almacena el valor capturado o de comparación, según sea el caso. Solo consta de 3 registros en el timer B.

Ejemplos de programación

Usando el Timer_A en modo comparación para generar una salida de onda cuadrada de ciclo de trabajo de 50%.

void InitTimer_A(void)

{

P1SEL = 0x80;

P1DIR |= BIT7; //Salida Dallas habilitada 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

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;

}

Ejemplo de captura en el Timer_B

Captura el valor del timer ante una interrupción externa, aplicada a través del botón 1.

edu.red

Restricción en el uso de los timers

El hecho de utilizar una tarjeta de desarrollo nos limitar en no poder usar todas las salidas o entradas para los timers por lo que se hace necesario ver nuestras limitaciones.

edu.red

En el Timer A solo podemos utilizar los siguientes datos:

Solo podemos utilizar el pin P1.0 como señal de entrada de reloj externo. Y en la etapa de salida solo podemos usar el pin P1.7 (DALLAS) para algún uso de medición u otro.

Los demás pines son ocupados para otras funciones por lo que es muy importante tener estas limitaciones presente al momento de querer medir o inyectarle señal al timer A.

edu.red

En el Timer B solo podemos utilizar los siguientes datos:

Este ofrece más posibilidad de interaccion externa, además los pines P4.4 P4.5 y P4.6 corresponden a los botones. Por lo que solo pueden ser usados como entradas. Las salidas habilitadas corresponden a los pines P4.0 (ACL) y P4.1 (SDL). Una observación es que estos últimos pines también pueden ser usados como entradas, obviamente no al mismo tiempo.

Operación

Como Timer contador de 16 bits

El registro TAR (TBR) de 16 bits del timer/contador puede ser incrementado o decrementado dependiendo del modo de operación. También puede ser leído o escrito por software. El timer B permite variar el largo del contador.

El timer puede generar interrupciones cuando se produzcan desbordamientos

El registro TAR puede ser borrado seteando el valor del bit TACLR. Además se borra el divisor de reloj como la dirección de conteo. Equivalente para el Timer B.

El timer A inicia la cuenta en los siguientes casos:

  • MCx > 0 y la fuente de reloj está activa.

  • Si el modo de operación es up o bien up/down, el timer puede ser detenido cargando un 0 en TACCR0. La cuenta puede ser reiniciada cargando un valor distinto de 0 a TACCR0. En este caso, el timer parte incrementando la cuenta desde 0.

El Timer B inicia la cuenta en los siguientes casos:

  • MCx > 0 y la fuente de reloj está activa.

  • Si el modo de operación es up o bien up/down, el timer puede ser detenido cargando un 0 en TBCL0. La cuenta puede ser reiniciada cargando un valor distinto de 0 a TBCL0. En este caso, el timer parte incrementando la cuenta desde 0.

Selección de fuente de reloj y divisor.

El reloj puede ser configurado a través del registro TACTL (TBCTL) en los bits TASSELx (TBSSELx). Seleccionándose una fuente interna o externa.

  • TACLK (TBCLK) que se encuentra configurado por defecto, es decir es configurado con los bits en TASSELx (TBSSELx) en 00.

  • ACLK, que corresponde al reloj auxiliar configurable con los bits TASSELx (TBSSELx) en 01.

  • SMCLK que es el sub-sistema del reloj maestro, se configura con los bits TASSELx (TBSSELx) en 10.

  • El reloj externo, que se configura con los bits TASSELx (TBSSELx) en 11.

La fuente de reloj puede ser pasada directamente al temporizador o dividida por 2, 4 ó 8, usando los bits

Modos de operación de los timers

Tiene 4 modos de operación

Se setean utilizando los bits de MCx

edu.red

Basta cambiar el registro TACCR0 por TBCL0 y en el caso continuo cuenta hasta el valor seteado en los bits TBCNTLx.

Up mode (Incrementando)

TIMER A

edu.red

Up mode.

El timer cuenta repetitivamente hasta el valor indicado por el registro de comparación TACCR0

Cuando el valor del timer alcanza el valor de TACCR0, se empieza la cuenta nuevamente desde cero.

Si el UP MODE es seleccionado cuando el valor del timer es mayor que TACCR0, el timer inmediatamente empieza la cuenta desde cero.

edu.red

Up mode configuración de flags.

El TACCR0 CCIFG flag de interrupción es activado cuando el valor del timer alcanza el valor de TACCR0.

EL flag de interrupción TAIFG es activado cunado el timer cuenta desde TACCR0 a cero.

TIMER B

Es utilizado si el período del timer debe ser distinto de la cuenta máxima TBRMAX. El timer cuenta repetidamente desde 0 al valor del latch de comparación TBCL0, el que define el período como se ve en la siguiente figura:

edu.red

Seteo de los flags de interrupción (TBIFG y TBCCR0 CCIFG)

edu.red

Al cambiar el valor de TBCL0 mientras el timer está contando y cuando el modo de carga de TBCL0 está en inmediato, existen dos casos: si el nuevo período es mayor o igual al antiguo, o mayor que el valor actual de la cuenta, el timer cuenta hasta el nuevo valor. Si el nuevo período es menor que el valor actual de cuenta, el timer se resetea a 0 para reiniciar la cuenta (puede ocurrir una cuenta más antes de volver a 0).

Modo continuo

TIMER A

edu.red

Modo continúo

En este modo el timer cuenta repetitivamente hasta el valor de 0FFFFh y empieza nuevamente desde cero.

edu.red

Modo continúo configuración de flags.

El flag de interrupciones es activado cuando el time cuenta desde 0FFFFh a 0h

En este modo, el timer cuenta repetidamente hasta TBRMAX y recomienza desde 0. El latch de comparación TBCL0 trabaja en este caso como cualquiera de los otros registros de captura/comparación.

edu.red

Seteo del flag de interrupción (TBIFG)

edu.red

edu.red

 

Uso del Modo Continuo

  • Puede usarse para generar:

  • Intervalos de tiempo independientes

  • Frecuencias de salida independientes

  • Cuando se completa un intervalo se genera una interrupción.

  • El intervalo de tiempo siguiente es sumado al Latch TBCLx en la rutina de servicio de interrupción.

  • El intervalo de tiempo se controla por Hardware, por lo que no hay un impacto en latencia de interrupción.

  • Pueden usarse hasta 7 intervalos o frecuencias diferentes usando los registros de Captura/Comparación

Modo Up/Down

Timer A

edu.red

Up/Down mode.

Es utilizado cuando se necesita obtener un pulso simetrico.

El timer cuenta repetitivamente hasta un valor TACCR0 y luego decrementa su valor hasta cero.

La dirección de conteo se encuentra latcheada. Lo que permite al timer se detenido y luego encendido, contando en la misma dirección que había quedado antes de ser detenido.

Si el valor del bit TACLR es seteado se limpia la dirección en que se estaba contando además del valor del TAR y del TACLK divider.

edu.red

Up/Down mode configuración de flags.

En este modo el flag de interrupción TACCR0 CCIFG y el flag de interrupción TAIFG están activos solo una vez por periodo, separados por medio periodo del timer.

TACCR0 CCIFG se activa cuando el timer cuenta TACCR0-1.

TAIFG se activa cuando el timer cuenta cero.

edu.red

 

Timer B

Este modo se usa si el período del Timer debe ser diferente a TBR(max) y si se necesita la generación de pulsos simétricos

El período es de 2 veces el valor de TBLC0

Si TBCL0 > TBR(max), el contador opera en modo continuo, i.e., no cuenta desde TBR(max) a 0

Puede interrumpirse la cuenta y luego reiniciarla desde la dirección en que estaba, dado que ésta es almacenada en el Latch

El bit TBCLR se usa para borrar la dirección de cuenta del Latch, también borra TBR y el divisor TBCLK, esto permite que la cuenta se reinicie de 0

edu.red

El flag de interrupción TBCCR0 CCIFG se activa cuando la cuenta ascendente del timer pasa de TBCL0-1 a TBCL0

El flag de interrupción TBIFG se activa cuando la cuenta descendente del timer pasa de 0001h a 0000h

Ambos flag de interrupción se activan 1 vez por período y se separan por 1/2 período

Modo captura

Este modo se selecciona con el bit CAP = 1, del registro de control TACCTLx (TBCCTLx). 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 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 (TBCCRx)

El flag de interrupción CCIFG es seteado

La captura de la señal puede ser asincrónica con respecto del timer del reloj y causa de una condición de carrera.

edu.red

En el timer B existe una pequeña diferencia:

El bit SCS sincroniza la captura con el ciclo de reloj siguiente, esto evita "race condition", pues la señal de captura puede ser asincrónica con el reloj del Timer

edu.red

Si ocurre una captura, el valor del Timer se copia en el registro TBCCRx y se activa el flag de interrupción CCIFG

Se cuenta con rebalse lógico en cada registro para indicar si una segunda captura se realiza antes de que se lea la primera. (COV=1)

COV se resetea por Software

Modo comparación

Timer A

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

Timer B

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 TBR cuenta hasta el valor almacenado en el registro TBCCRx:

  • Si TBR cuenta al valor de un TBCLx:

  • Se activa el flag de interrupción CCFIG

  • Señal interna EQUx=1

  • EQUx afecta la salida, de acuerdo al modo de salida

  • Latch de comparación TBCLx

  • TBCLx mantiene el valor a comparar con el valor del Timer. (TBCLx es "buffered " por TBCCRx)

El dato a comparar se escribe en cada TBCCRx y se transfiere automáticamente a TBCLx

Cuando se activa la comparación, TBCCRx finaliza el control de usuario, i.e., no existe acceso directo a TBCLx

Eventos de Carga

El momento de la transferencia lo selecciona el usuario con los bits de CLLDx

El nuevo dato se transfiere de TBCCRx a TBCLx

CLLDx Descripción

00 inmediatamente al escribirse en TBCCRx

01 cuando TBR cuenta a 0

10 modo up y continuo:

  • Cuando TBR cuenta a 0

  • Modo up down:

  • Cuando TBR cuenta al valor antiguo de TBCLx o a 0

11 Cuando TBR cuenta al valor antiguo de TBCLx

Agrupación de Latch de comparación

Pueden agruparse juntos para actualizaciones simultaneas de los bits de TBCLGRPx

Condiciones para la carga grupal:

Debe ocurrir el evento de carga

Todos los registros TBCCRx del grupo deben actualizarse, incluso cuando cuando el valor nuevo es igual al antiguo

edu.red

El evento de carga del grupo es definido por los bits CLLDx del menor de los latch de comparación TBCCRx del grupo, con excepción de TBCLGRP =3

Si CLLDx = 0 del TBCCRx que controla, los latch de comparación se actualizan automáticamente cuando su TBCCRx correspondiente es escrito, i.e., No están agrupados.

Unidades de salida

Cada bloque de captura/comparación contiene una unidad de salida, que es usada para generar distintas señales. Cada señal de salida tiene ocho modos de operación configurables en el registro TACCTLx (TBCCTLx). Estos son los que muestran a continuación:

edu.red

Es muy similar en muchos aspectos con el Timer B, se recomienda revisar la documentación en ingles sobre los modos de salida para el iemr B para ver los reistros distintos que se usan.

Interrupción Timer_A

Existen 2 vectores de interrupción de 16 bits asociados con el timer_A:

  • TACCR0 vector de interrupción del TACCR0 CCIFG

  • TAIV vector de interrupción para todo los otros CCIFG y TAIFG

En modo captura, cualquiera flag CCIFG es "seteado" cuando un valor del timer es capturado al registro TACCRx asociado. En modo comparación, cualquiera flag CCIFG es seteado cuando TAR cuenta el valor asociado al TACCRx. Por sofware también puede ser seteado o borrado cualquier flag CCIFG. Todo los flags CCIFG solicitan una interrupción cuando los bits CCIE correspondientes y el GIE son seteados.

Interrupción TACCR0

El flag TACCR0 CCIFG tiene alta importancia en el Timer_A. El flag TACCR0 CCIFG es reseteado automáticamente cuando la interrupción TACCR0 la solicitud de interrupción fue atendida.

edu.red

Flag de interrupción TACCR0 de la Captura/Comparación

TAIV, Vector generador de interrupciones

Los flag de interrupciones TACCR1 CCIFG, TACCR2 CCIFG, y TAIFG son priorizados y combinados como una fuente simple de vector de interrupción. El registro TAIV es usado para saber cual flag solicitó una interrupción.

Interrupción Timer_B

Existen 2 vectores de interrupción asociados con el timer_B:

  • TBCCR0 vector de interrupción del TBCCR0 CCIFG

  • TBIV vector de interrupción para todo los otros CCIFG y TBIFG

En modo captura, cualquiera flag CCIFG es "seteado" cuando un valor del timer es capturado al registro TBCCRx asociado. En modo comparación, cualquiera flag CCIFG es seteado cuando TBR cuenta el valor asociado al TBCLx. Por SW también puede ser seteado o borrado cualquier flan CCIFG. Todo los flags CCIFG solicitan una interrupción cuando los bits CCIE correspondientes y el GIE son seteados.

Vector de interrupción TBCCR0

Este vector tiene la más alta prioridad de interrupción del Timer B. El flag CCIFG (TBCCR0) es automáticamente reseteado cuando la solicitud de interrupción fue atendida.

Vector de interrupción TBIV

El flag TBIFG y los flags CCIFG (TBCCRx), comparación al TBCCR0, son priorizados y combinados como una fuente simple de vector de interrupción. El registro TBIV es usado para saber cual flag solicitó una interrupción.

La comparación más alta habilita la interrupción generando un número en el registro TBIV, esto puede ser para entrar automáticamente a la rutina apropiada.

En síntesis, las interrupciones de ambos Timers cumplen la misma función.

A continuación se muestran los registros del Timer A y B con su respectiva descripción:

Registros del Timer_A

edu.red

Registros del Timer_B

edu.red

Bibliografía

(TIPO, TÍTULO, AUTOR, EDITORIAL Y AÑO):

BÁSICA

  • Programming and Customizing the AVR Microcontroller, Dhananjav V. Gadre, McGraw-Hill editorial, 2001.

  • Microcontrolador PIC16F84A Desarrollo de proyectos, Enrique Palacios, Fernando Remiro y Lucas J. López, Segunda edición, Editorial Ra-Ma, 2006.

  • The 8051 Microcontroller, MacKenzie I. Scott, Second Edition, Prentice Hall editorial, 1999.

  • Microcontroladores "PIC":Diseño Práctico de Aplicaciones, José María Angulo Usategui, Ignacio Angulo Martínez, Tercera edición, Editorial Mc-graw-Hill Interamericana, 2003.

CONSULTA:

  • AVR Enhanced RISC Microcontroller Data Book, Atmel Corporation, 2001.

  • Embedded Microcontroller, Intel Corporation, 1994.

Handbook of Microcontroller, Predko M., Tab Books, 1999

Enviado por: Ing.+Lic. Yunior Andrés Castillo S.

"NO A LA CULTURA DEL SECRETO, SI A LA LIBERTAD DE INFORMACION"®

Santiago de los Caballeros, República Dominicana, 2016.

"DIOS, JUAN PABLO DUARTE, JUAN BOSCH Y ANDRÉS CASTILLO DE LEÓN – POR SIEMPRE"®

 

 

 

Autor:

Paola Rojas.

Pablo Naveas.

Christian Pelissier.

Claudio Ramirez.

Carlos Silva.