P. 1
EL TIMER A

EL TIMER A

|Views: 2|Likes:
Publicado porlescksid

More info:

Published by: lescksid on Aug 18, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

11/22/2014

pdf

text

original

EL TIMER A

El timer a es un temporizador/contador el cual utilizaremos para nuestras aplicaciones con distintos fines ya que con el podemos medir y generar intervalos de tiempo, utilizarlo como contador de eventos, generar PWM a distintas frecuencias, muestrear señales etc. Para ello requerimos de conocer este periférico para poder configurarlo a convencía, para ello dividiremos esta sección en 2, una de ellas es el uso de el timer a como temporizador, la otra es el uso del timer a en modo captura comparación.

TIMER_A COMO TEMPORIZADOR
Si tenemos un contador de pulsos al cual le insertamos una señal cuadrada de cierto periodo conocido, entonces después de cierto tiempo al consultar la cuenta podremos calcular el tiempo que ha transcurrido desde que iniciamos la cuenta. En si este es el principio básico de este periférico.

Podemos ver en el diagrama a bloques del Timer_A que hay un multiplexor de 4 entradas y una salida el cual es controlado por TASSELx después de ello hay un divisor de frecuencias controlado por IDx el cual puede dividir la señal por 2, 4 y 8, después esta señal ya seleccionada y dividida pasa a alimentar al contador/temporizador de 16 bits almacenando la cuenta en el registro llamado TAR, además este contador/temporizador es controlado por los bits MCx los cuales se encargan de controlar el modo de cuenta del contador/temporizador. También podemos ver que tanto al divisor de frecuencia como al contador/temporizador cuentan con un bit mas llamado TACLR el cual se encarga de resetear los valores tanto del TAR como del IDx. Por ultimo podemos ver que la única salida con la que cuenta este modulo es la TAIFG, es decir que depende como configuremos a este modulo en conjunto de en que momento será enviada la interrupción a la CPU. A continuación describiremos los bits específicos antes mencionados junto con los valores que pueden tomar. TAR En este modo existe un registro de 16 bits llamado TAR (Timer A Register) el cual es incrementado o decrementado por cada flanco ascendente de la señal cuadrada del reloj, es decir que en este registro se almacena la cuenta de pulsos de periodo conocido de la señal cuadrada que incide en el contador. Este registro es el mas importante de el timer a el cual se puede tanto leer como escribir en el. TASSELx e IDx

ascendente/descendente.. la selección de esto se hace mediante los bits llamados TASSELx (Timer A Source Select) y además estas fuentes pueden ser divididas por 2. Depende de los modos de cuenta el momento en el que la interrupción será generada. Tanto TASSELx como IDx son conjuntos de 2 bits dentro de este registro. TASSELx ocupa las posiciones 8 y 9 del registro de 16 bits TACTL y puede adquirir los siguientes valores. (Para mayor información con respecto a las fuentes de reloj visitar la sección del sistema de reloj). o o o o 00 detenido 01 ascendente 10 continuo 11 ascendente/descendente MODOS DE CUENTA 1. o o o o 00 TACLK Reloj del Timer_A (Timer_A Clock) 01 ACLK Reloj auxiliar (Auxiliary Clock) 10 SMCLK Reloj sub principal (Semi Master Clock) 11 INCLK No disponible para nuestro caso IDx ocupa las posiciones 6 y 7 del registro de 16 bits TACTL y puede adquirir los siguientes valores. después de ello su descripción individual mas detallada. ascendente. En la siguiente imagen se puede ver mejor este modo de cuenta. después de eso la cuenta se reinicia y continua de nuevo. a continuación te mostramos una tabla con sus valores. o o o o 00 Frecuencia de entrada/1 01 Frecuencia de entrada/2 10 Frecuencia de entrada/4 11 Frecuencia de entrada/8 MCx El modo de cuenta es controlado por estos dos bits dependiendo del valor de estos dos bits podemos elegir entre los 4 modos de cuenta disponibles: detenido.MODO ASCENDENTE En este modo el contador/temporizador contara desde cero hasta el valor almacenado en TACCR0. 8 con los birs llamados IDx (Input Divider) ambos se encuentran en el registro llamado TACTLx (Timer A Control Register) . continuo. 4.El contador se puede alimentar de diferentes fuentes de reloj tanto internas como externas. .

con ellos podemos generar intervalos de tiempo independientes. posteriormente veremos como implementar esto para generar intervalos de tiempo independientes. Además de generar estos periodos podemos hacer uso de los registros TACCR0 y TACCR1.. así la bandera de interrupción es colocada cuando la cuenta pasa desde 0xFFFF a 0x0.. por lo cual TASSELx debe ser 01. además utilizaremos un divisor por 4 para obtener una frecuencia de 1MHz y así un periodo de 1us. con esta señal alimentaremos a nuestro contador/temporizador. para ello cargamos 1000 en TACCR0 y por ultimo iniciaremos la cuenta al poner en MCx el valor de 01. A continuación una imagen que ilustra de mejor manera este modo. Lo único que resta es definir la rutina de servicio a la interrupción además del vector de interrupción correspondiente para por ejemplo encender y apagar un led cada 1ms. 2.MODO ASCENDENTE/DESCENDENTE . para eso IDx debe ser 10. 3. así podemos generar interrupciones con periodo de 65535(Tsrc) donde Tsrc es el periodo de la fuente que seleccionamos con su respectivo divisor de frecuencia. En el ejemplo anterior este Tsrc es de 1us por tanto con esas configuraciones se pueden generar interrupciones con un periodo de 65.La interrupción se genera en el momento en el que la cuenta en TAR cambia de el valor de TACCR0 a 0. Lo que deseamos es interrumpir a la CPU cada 1ms por lo que deben de transcurrir 1000 pulsos de la señal que hemos configurado para que esto ocurra. Imaginemos que tenemos una frecuencia de 4MHZ externa mediante un cristal de cuarzo conectado en las terminales del puerto dos.535ms.MODO CONTINUO En este modo el contador/temporizador cuenta de manera repetida hasta el valor máximo permitido el cual es 0xFFFF y después regresa a cero.

. A continuación mostramos un diagrama a bloques de un modulo de captura y comparación. en nuestro caso el microcontrolador MSP430G2231 solo cuenta con 2 (CCR0 y CCR1). La precisión de la medición depende de muchos factores como la interferencia que puede generar la CPU o el hardware con el que se realiza.En este modo el contador/temporizador cuenta desde cero hasta el valor de TACCR0 de manera ascendente y después cuenta de manera descendente hasta cero. TIMER EN CAPTURA Casi todos los dispositivos cuentan con tres de estos módulos de captura y comparación. como podemos ver en todos los casos la bandera de interrupción TAIFG es generada cuando la cuenta pasa por cero. así como de la fuente de reloj aplicada además de el numero de bits involucrados en la medición. El modo de captura nos servirá para realizar mediciones de tiempo. así el periodo será de el doble del valor almacenado en TACCR0. como por ejemplo para medir velocidades de computo o bien para medir periodos de tiempo generados por fuentes externas. A continuación una imagen que muestra este modo de cuenta. En este modo la interrupción se genera cuando la cuenta pasa de 0x0001 a 0x0000. donde te explicaremos los bits que interfieren en la configuración de este modulo. Es bueno mencionar que independientemente del numero de módulos todos son idénticos. lo mismo ocurre con los dispositivos mas pequeños de esta familia. Esto nos será útil para la generación de pulsos simétricos.

o o 0 Modo de comparación 1 Modo de captura El grupo de bits llamado CCISx (Capture Compare Input Select) nos ayudara a seleccionar de donde provendrá nuestra señal a medir. ya sea flaco de bajada. Cuando una captura ocurre el valor del TAR es copiado en TACCRx y la bandera de interrupción llamada CCIFG es colocada. este ocupa la posición 8 del registro llamado TACCTLx. estos bits están en las posiciones 14 y 15 de TACCTLx o o o o 00 No hay captura 01 Captura con flanco ascendente 10 Captura en flanco descendente 11 Captura en ambos flancos CCI . CMx Los bits CMx nos ayudaran a seleccionar el flanco de captura de la señal de entrada. de subida o ambos. o o o o 00 Bit CCIxA del encapsulado 01 Bit CCIxB del encapsulado 10 GND 11 VCC Nuestro dispositivo solo cuenta con CCI0A y CCI1A los cuales se ubican en los puertos P1. este esta en los bits 12 y 13 de TACCTLx. estos los configuramos para esta función a través del registro P1SEL poniendo a 1 los bits 1 y 2 de este registro.CAP El bit CAP (Capture Mode) nos servirá para seleccionar este modo ya que el modulo en si puede trabajar en captura o comparación.1 y P1.2.

El bit CCI nos ayudara para leer en cualquier momento el nivel lógico de la entrada. este esta ubicado en la posición 3 del registro TACCTLx. este modo lo usaremos principalmente para generar PWM o interrupciones a intervalos específicos en el momento en que TAR cuente al valor de los registros TACCRx. A continuación mostramos un diagrama a bloques de los módulos de comparación y captura. o o 0 Captura asincrona 1 Captura síncrona COV Un sobre flujo lógico es provisto en cada registro de captura comparación para indicar que una segunda captura ha ocurrido antes de que el valor de la primera captura sea leído. estos bits que no hemos mencionado serán utilizados para la configuración del modo de comparación. TIMER EN COMPARACION Este modo es seleccionado cuando CAP=1. SCS El bit llamado SCS nos ayudara a sincronizar la entrada con el reloj del contador/temporizador. para explicar esta sección usaremos el mismo diagrama que la sección anterior. La unidad de salida esta presente en todo modulo de captura comparación esta es la que usaremos para generar señales PWM cada unidad cuenta con . o o 0 No ha ocurrido sobre flujo en la captura 1 Ocurrió sobre flujo en la captura Como podemos ver el registro utilizado para la configuración de este modulo aun tiene muchos bits que no hemos usado.

. MODO ASCENDENTE ...La salida es reiniciada cuando el contador/temporizador cuenta al valor en TACCRx. después es puesta a 1 cuando el contador/temporizador cuenta al valor de TACCR0 A continuación mostraremos unas imágenes donde podemos ver como es que esto afecta a la señal de PWM en la salida según cada modo de cuenta y su respectivo modo de salida. 010. 110.-Modo Colocar.La salida es conmutada cuando el contador/temporizador cuenta al valor en TACCRx y es reiniciada cuando el contador/temporizador cuenta al valor de TACCR0.-Modo Conmutar/Reiniciar..La salida es puesta a cero cuando el contador/temporizador cuenta al valor de TACCRx y permanece ahí hasta que otro modo de salida sea seleccionado.Modo Conmutar.. es puesta a 1 cuando el contador/temporizador cuenta al valor en TACCR0 111.La salida es puesta a 1 cuando en contador/temporizador cuenta al valor de TACCRx y es puesto a 0 cuando el contador/temporizador cuenta al valor de TACCR0. estos modos de salida serán configurados por el grupo de tres bits llamados OUTMODx que se encuentran en TACCTLx..ocho modos de operación que generan diferentes señales de salida. el periodo de salida es el doble que el periodo del contador/temporizador 101. En este modo la salida es igual al contenido del bit OUTx en este mismo registro 001.Modo Reiniciar.Modo Conmutar/Colocar.. 011. A continuación una lista con los valores que pueden tomar estos tres bits además de una descripción de la función que cumplen de acuerdo a cada valor asignado.-Modo Salida. 000..La salida es conmutada cuando el contador/temporizador cuenta al valor de TACCRx..La salida es conmutada cuando el contador/temporizador cuenta al valor de TACCRx. La salida pasa a 1 cuando el contador/temporizador cuenta al valor en TACCRx y permanece así hasta que el contador/temporizador sea reiniciado u otro modo de salida sea seleccionado..Modo Colocar/Reiniciar.. 100.Modo Reiniciar/Colocar.

MODO CONTINUO .

MODO ASENDENTE/DESCENDENTE .

A partir de conocer tanto el modo de cuenta como el modo de salida podremos obtener la señal de PWM que mejor nos convenga con el periodo y ciclo útil que queramos. .

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->