Anda di halaman 1dari 5

Prctica 2 Ensamblador

Timer(PWM)
Prez Camacho Jess Asmeth
Ingeniera en Sistemas Computacionales,
Instituto Tecnolgico de Tuxtla Gutirrez,
Tuxtla Gutirrez Chiapas
killerMstr1@gmail.com

AbstractEn este documento se recopila toda la informacin


utilizada para el diseo de la prctica en ensamblador.

I. I NTRODUCCIN
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 seales etc.
II. DESARROLLO DE CONTENIDOS
Si tenemos un contador de pulsos al cual le insertamos una
seal cuadrada de cierto periodo conocido, entonces despus
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 bsico de este perifrico.

Fig. 1. Modulo Timer

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 despus de ello hay un divisor de frecuencias
controlado por IDx el cual puede dividir la seal por 2, 4 y 8,
despus esta seal ya seleccionada y dividida pasa a alimentar

al contador/temporizador de 16 bits almacenando la cuenta en


el registro llamado TAR, adems este contador/temporizador
es controlado por los bits MCx los cuales se encargan de
controlar el modo de cuenta del contador/temporizador.
Tambin 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 interrupcin a la
CPU. A continuacin describiremos los bits especficos antes
mencionados junto con los valores que pueden tomar.
1) 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 seal cuadrada del reloj,
es decir que en este registro se almacena la cuenta de pulsos
de periodo conocido de la seal 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.
2) TASSELx e IDx : El contador se puede alimentar de
diferentes fuentes de reloj tanto internas como externas, la
seleccin de esto se hace mediante los bits llamados TASSELx
(Timer A Source Select) y adems estas fuentes pueden ser
divididas por 2, 4, 8 con los birs llamados IDx (Input Divider)
ambos se encuentran en el registro llamado TACTLx (Timer A
Control Register) . Tanto TASSELx como IDx son conjuntos
de 2 bits dentro de este registro. (Para mayor informacin con
respecto a las fuentes de reloj visitar la seccin del sistema
de reloj). TASSELx ocupa las posiciones 8 y 9 del registro de
16 bits TACTL y puede adquirir los siguientes valores.
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.
00 Frecuencia de entrada/1
01 Frecuencia de entrada/2
10 Frecuencia de entrada/4
11 Frecuencia de entrada/8
3) 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, ascendente,


continuo, ascendente/descendente. Depende de los modos de
cuenta el momento en el que la interrupcin ser generada, a
continuacin te mostramos una tabla con sus valores, despus
de ello su descripcin individual mas detallada.
00 detenido
01 ascendente
10 continuo
11 ascendente/descendente

2) MODO
CONTINUO:
En
este
modo
el
contador/temporizador cuenta de manera repetida hasta
el valor mximo permitido el cual es 0xFFFF y despus
regresa a cero, as la bandera de interrupcin es colocada
cuando la cuenta pasa desde 0xFFFF a 0x0, 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. A continuacin una imagen
que ilustra de mejor manera este modo.

A. MODOS DE CUENTA
1) MODO ASCENDENTE : En este modo el contador/temporizador contara desde cero hasta el valor almacenado
en TACCR0, despus de eso la cuenta se reinicia y continua de
nuevo. En la siguiente imagen se puede ver mejor este modo
de cuenta.
Fig. 3. Modo continuo

En el ejemplo anterior este Tsrc es de 1us por tanto con


esas configuraciones se pueden generar interrupciones con
un periodo de 65.535ms. Adems de generar estos periodos
podemos hacer uso de los registros TACCR0 y TACCR1, con
ellos podemos generar intervalos de tiempo independientes,
posteriormente veremos como implementar esto para generar
intervalos de tiempo independientes.
3) MODO ASCENDENTE/DESCENDENTE: En este modo
el contador/temporizador cuenta desde cero hasta el valor de
TACCR0 de manera ascendente y despus cuenta de manera
descendente hasta cero. Esto nos ser til para la generacin
de pulsos simtricos, as el periodo ser de el doble del valor
almacenado en TACCR0. A continuacin una imagen que
muestra este modo de cuenta.

Fig. 2. Modo ascendente

La interrupcin se genera en el momento en el que la cuenta


en TAR cambia de el valor de TACCR0 a 0. Imaginemos que
tenemos una frecuencia de 4MHZ externa mediante un cristal
de cuarzo conectado en las terminales del puerto dos, con esta
seal alimentaremos a nuestro contador/temporizador, por lo
cual TASSELx debe ser 01, adems utilizaremos un divisor
por 4 para obtener una frecuencia de 1MHz y as un periodo
de 1us, para eso IDx debe ser 10.
Lo que deseamos es interrumpir a la CPU cada 1ms por lo
que deben de transcurrir 1000 pulsos de la seal que hemos
configurado para que esto ocurra, para ello cargamos 1000
en TACCR0 y por ultimo iniciaremos la cuenta al poner en
MCx el valor de 01. Lo nico que resta es definir la rutina de
servicio a la interrupcin adems del vector de interrupcin
correspondiente para por ejemplo encender y apagar un led
cada 1ms.

Fig. 4. Modo ascendente/descendente

En este modo la interrupcin se genera cuando la cuenta


pasa de 0x0001 a 0x0000, como podemos ver en todos los
casos la bandera de interrupcin TAIFG es generada cuando
la cuenta pasa por cero.
B. TIMER EN CAPTURA
El modo de captura nos servir para realizar mediciones de
tiempo, como por ejemplo para medir velocidades de computo
o bien para medir periodos de tiempo generados por fuentes
externas. La precisin de la medicin depende de muchos
factores como la interferencia que puede generar la CPU o
el hardware con el que se realiza, as como de la fuente de
reloj aplicada adems del nmero de bits involucrados en la
medicin.

A continuacin un diagrama de bloques de un modulo de


captura y comparacin, donde te explicaremos los bits que
interfieren en la configuracin de este mdulo.

5) COV: Un sobre flujo lgico es provisto en cada registro


de captura comparacin para indicar que una segunda captura
ha ocurrido antes de que el valor de la primera captura sea
ledo.
0 No ha ocurrido sobre flujo en la captura
1 Ocurri sobre flujo en la captura
Como podemos ver el registro utilizado para la configuracin de este modulo aun tiene muchos bits que no hemos
usado, estos bits que no hemos mencionado sern utilizados
para la configuracin del modo de comparacin.
C. TIMER EN COMPARACION
Este modo es seleccionado cuando CAP=1, este modo lo
usaremos principalmente para generar PWM o interrupciones
a intervalos especficos en el momento en que TAR cuente al
valor de los registros TACCRx. A continuacin un diagrama
de bloques de los mdulos de comparacin y captura.

Fig. 5. Diagrama de bloques (Modo captura)

1) CAP: El bit CAP (Capture Mode) nos servir para


seleccionar este modo ya que el modulo en si puede trabajar
en captura o comparacin, este ocupa la posicin 8 del registro
llamado TACCTLx.
0 Modo de comparacin
1 Modo de captura El grupo de bits llamado CCISx
(Capture Compare Input Select) nos ayudara a seleccionar de
donde provendr nuestra seal a medir, este esta en los bits
12 y 13 de TACCTLx.
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.1 y P1.2, estos
los configuramos para esta funcin a travs del registro P1SEL
poniendo a 1 los bits 1 y 2 de este registro.
2) CMx: Los bits CMx nos ayudaran a seleccionar el flanco
de captura de la seal de entrada, ya sea flaco de bajada, de
subida o ambos. Cuando una captura ocurre el valor del TAR
es copiado en TACCRx y la bandera de interrupcin llamada
CCIFG es colocada, estos bits estn en las posiciones 14 y 15
de TACCTLx
00 No hay captura
01 Captura con flanco ascendente
10 Captura en flanco descendente
11 Captura en ambos flancos
3) CCI: El bit CCI nos ayudara para leer en cualquier
momento el nivel lgico de la entrada, este esta ubicado en la
posicin 3 del registro TACCTLx.
4) SCS: El bit llamado SCS nos ayudara a sincronizar la
entrada con el reloj del contador/temporizador.
0 Captura asincrona
1 Captura sncrona

Fig. 6. Diagrama de mdulo de comparacin

La unidad de salida esta presente en todo modulo de captura


comparacin esta es la que usaremos para generar seales
PWM cada unidad cuenta con ocho modos de operacin
que generan diferentes seales de salida, estos modos de
salida sern configurados por el grupo de tres bits llamados
OUTMODx que se encuentran en TACCTLx. A continuacin
una lista con los valores que pueden tomar estos tres bits
adems de una descripcin de la funcin que cumplen de
acuerdo a cada valor asignado.
000.-Modo Salida. En este modo la salida es igual al
contenido del bit OUTx en este mismo registro
001.-Modo Colocar. 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.
010.-Modo Conmutar/Reiniciar.- 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.
011.- Modo Colocar/Reiniciar.- La salida es puesta a 1
cuando en contador/temporizador cuenta al valor de TACCRx

Fig. 7. Modo Ascendente (PWM)

Fig. 9. Modo Ascendente/Descendente (PWM)

111.- Modo Reiniciar/Colocar.- La salida es reiniciada


cuando el contador/temporizador cuenta al valor en TACCRx,
despus es puesta a 1 cuando el contador/temporizador cuenta
al valor de TACCR0 A continuacin unas imgenes donde
podemos ver como es que esto afecta a la seal de PWM en
la salida segn cada modo de cuenta y su respectivo modo de
salida.
A partir de conocer tanto el modo de cuenta como el modo
de salida podremos obtener la seal de PWM que mejor nos
convenga con el periodo y ciclo til que queramos.
Posteriormente para realizar la prctica se declara los mdulos a utilizar, se direciona los puertos de salida del pwm y se
afecta a la variable correspondiente, para utilizar el mdulo del
timer en este caso se afecto la variable TACCR1 para variar la
intensidad del led y se direcciono el puerto P1.2 como salida
del pwm.

Fig. 8. Modo Continuo (PWM)

y es puesto a 0 cuando el contador/temporizador cuenta al


valor de TACCR0.
100.- Modo Conmutar.- La salida es conmutada cuando el
contador/temporizador cuenta al valor de TACCRx, el periodo
de salida es el doble que el periodo del contador/temporizador
101.- Modo 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.
110.- Modo Conmutar/Colocar.- La salida es conmutada
cuando el contador/temporizador cuenta al valor de TACCRx,
es puesta a 1 cuando el contador/temporizador cuenta al valor
en TACCR0

III. C ONCLUSIN
El modulo del timer del msp430g2553 nos ofrece varias
funciones, una de las funciones se representa en esta prctica,
existen diferentes modos de manejo del PWM y en esta
prctica se utilizado afectado la variable TACCR1, no fue
muy complejo, solo se necesitan declarar los mdulos y las
variables a utilizar, en esta prctica solo se utiliza un mdulo
pero uniendo todos los mdulos del LaunchPad msp430g2553
podremos hacer grandes cosas.
[?]
R EFERENCES
[1] http://www.ccs.neu.edu/home/noubir/Courses/SWARM/S09/slides/msp430clocks-timers.pdf
[2] http://homepages.ius.edu/RWISMAN/C335/HTML/msp430Timer.HTM
[3] http://web.eng.fiu.edu/watsonh/eel4730/slap113.pdf
[4] https://courses.cs.washington.edu/courses/cse466/11au/calendar/04Interrupts-posted.pdf
[5] http://dbindner.freeshell.org/msp430/

https://www.youtube.com/watch?v=oOWDnlvPUUA
Fig. 10. Resultados de la prctica

Anda mungkin juga menyukai