Sunteți pe pagina 1din 10

MSP430- O Uso do timer-

Autor: Pedro Ernesto Veras Junior Data: 16/11/2012 Orientador: Prof. Geraldo Ramalho Bolsista Voluntrio Desenvolvimento de condio de mquina

Introduo
A maioria dos microcontroladores modernos possui timers na sua programao e isso tambm acontece com o MSP430. Dentre as funes timer que esto includas no MSP430 podemos listar: Watchdog timer, Basic timer 1, Timer_A, Timer_B.

Watchdog timer:
tem como principal objetivo proteger o sistema contra falhas do software, tais como ele ficar num loop infinito no intencional. Em suma, o Watchdog timer, faz com que o MSP430 redefina o MSP430 quando ele atinge seu limite. O comando watchdog controlado por um registrador de 16 bits chamado de WDTCTL. Ele ser prevenido contra erros de leitura por um password chamado de WDTPW=0x5A. Sendo assim ocorrer um reset, quando a instruo em WDTCTL tiver um valor diferente do password WDTPW. possvel utilizarmos o watchdog s pra gerar uma interrupo e assim fazer com que ele atue como um temporizador.

Modo watchdog:
Nesse modo se o contador realizar 32.768, 8.192, 512, 64 contagens (conforme a seleo dos bits WDTISx) ser provocado um reset do sistema. Deve-se programar o watchdog de uma maneira em que nunca seja atingida a contagem final. Com a aplicao funcionando corretamente nunca ser provocado um reset por ele. Se o programa tiver um erro o watchdog seta o registrador IFG1 (flag WDT1FG) resetando a CPU ao atingir sua contagem final.

Registradores Watchdog:
So basicamente 3 registradores: -WDTCTL -IE1 -IFG1 Como WDTCTL responsvel pelo controle geral do watchdog e possui 16 bits, vamos nos concentrar a entender cada um de seus bits:

WDTPWsenha para escrita no registrador, seu valor deve ser sempre 0x5A ou ento ocorrer um reset no sistema. WDTHOLDFaz com que o watchdog seja desligado afim de economizer energia. 0-watchdog funcionando 1-watchdog parado

WDTNMIES-

seleciona a interrupo NM1 quando WDTNM1 est ativada. 0- Interrupo NM1 na borda de subida do pino 1- interrupo NM1 na borda de descida do pino.

WDTTMSEL-

seleciona o modo de funcionamento do watchdog. 0- Modo watchdog 1- Modo temporizador

WDTCNTCL-

faz o apagamento da memria do watchdog. 0- Contagem normal 1- contagem apagada

WDTSSEL-

seleciona a fonte de clock do watchdog. 0- Clock secundrio SMCLK 1- clock auxiliar ACLK

WDTISx-

seleciona o intervalo de contagem do watchdog. 00- Clock/32768 01- clock/8192

10-clock/512 11-clock/64

Configurao do watchdog:
Podemos configurar o watchdog timer como mostrado abaixo: Apagamento de contagem do watchdog: WDTCTL = WDTPW + WDTCNTCL; Parando o watchdog: WDTCTL= WDTPW + WDTHOLD;

Basic timer (Timer 1)


O basic timer tem dois contadores de 8 bits. Sendo eles o BTCNT1 e o BTCNT2. O primeiro contador serve para gerar um sinal de clock para o mdulo LCD e o segundo pode ser utilizado como um divisor programvel que pode gerar interrupes. Pode ser utilizado para gerar um relgio de tempo real.

BTCNT1
Sua funo como dito anteriormente gerar o sinal que ir ser utilizado para gerar o sinla de clock para o LCD utilizando o ACLK( clock auxiliar). A frequencia de sada para o LCD pode ser dada por:

Onde x representa qual o bit usado em BTFRFQx que pode ser 32, 64, 128, 256, para os bits 00, 01, 10, 11.

BTCNT2
O clock desse contador pode vir do ACKL SMCLK ou at mesmo vindo da sada de BTCNT1, em que o bit usado em BTFRFQx 11 e ento ACLK/256. Quando ele atua com o clock tendo como sada o primeiro contador, ento eles atuam em cascata como um temporizador de 16 bits. O contador 2 usa BTCTL para seleo da fonte do clock, que um registrador em que os bits BTSSEL e BTDIV fazem parte dessa operao.

Interrupo do basic timer:


utilizado somente um nico tipo de interrupo e ela provm do bit BTIFG do registrador IFG2, com o vetor de interrupo sendo igual a zero.

Registradores do Basic Timer:


-BTCTL: controle do basic timer -BTCNT1: contador 1 -BTCNT2: contador 2 -IFG2: registrador em que se encontra o flag de interrupo BTIFG -IE2: registrador em que se encontra o bit de interrupo para o contador 1, BTIE.

Timer A

O timer A tambm um temporizador, mas diferente do Basic timer ele possui 16 bits. Mas se organizarmos o Basic timer utilizando os dois contadores em cascata teremos tambm 16 bits mas com a condio de que ACLK j venha dividido por 256 pois o bit 11 do flag BTFRFQx est conectado a entrada de BTSSEL. O timer A funciona basicamente com o contador TAR(16 bits) sendo alimentado por um sinal de clock vindo do flag TASSELx vindo do registrador TACTL e o sinal pode ainda ser divido por bits de IDx (1,2,4,8), pertencente ao registrador TACTL. O MCx controla os modos de contagem do contador TAR, ou seja ele seleciona seu modo de operao. MCx 00 01 10 11 modo Contagem parada Contagem de mdulo Modo contnuo (0 a 65.536) Contagem progressiva/regressiva

Sendo assim vemos que no modo 1(MCx=01) acontecer uma interrupo uma vez que a contagem de mdulo atinja o valor especificado em TACCR0. Na interrupo o flag TAIFG setado e para calcularmos o perodo da interrupo de TAIFG:

J no modo 2 com MCx=10 e sendo o modo 2 um modo continuo em que o contador vai de 0 a 65.536 contagens. Quando ele atinge valor mximo em 0xFFFF a contagem retorna a 0 e o TAIFG setado. Assim o perodo dessa interrupo calculado como sendo:

No modo 3 MCx= 11, o contador TAR realiza a contagem progressiva desde 0 at o valor programado em taccr0. Quando ele atinge esse valor ele retorna desse mesmo valor regressivamente at atingir valor 0, esse processo repetido continuamente. O perodo de tempo dessa interrupo calculado como sendo:

-Periodo da interrupo pelo TAIFG em segundos.

-Frequencia do clock em Hz.

Prescaler- Fator de diviso do prescaler de entrada do timer.

TACCRO-mdulo de contagem armazenado no registrador TACCR0.

Registradores do Timer A
Os registradores do timer A so: -TACTL -TA1CTL -TAR -TA1R

-TACCTLx -TA1CCTLx -TACCRx -TA1CCRx -TAIV -TA1IV -PxSEL

Objetivos
Relatar e detalhar o uso do timer, clculo de tempo, configurao, modos de interrupo. Usar o timer do microcontrolador msp430 para uma aplicao funcional no launchpad.

Metodologia
A realizao do relatrio foi feito em trs partes. A primeira consistiu numa pesquisa preliminar acerca do uso do timer. A segunda dedicou-se a um estudo mais detalhado e numa anlise mais ampla sobre o assunto. A fonte de pesquisa foi basicamente livros, materiais online e vdeo-aula, mas com uma nfase no livro Microcontroladores MSP430 Teoria e Prtica(Fbio Pereira) e no livro MSP430 Microcontroller basics(John Davies). A terceira foi obter o cdigo fonte de uma aplicao do uso do timer com o MSP430. Para compilar o programa foi utilizado o programa IAR da embedded workbench.

Resultados
A compilao do IAR mostrou que o programa compilou com sucesso, os Resultados foram em parte comprometidos pela falta da lanchpad para testar o programa. Espera-se que o programa realize a seguinte operao: Acender o LED durante 2 segundos, deixar o LED desligado durante 2 segundos, repetindo sempre esse padro.

Concluso
Aps realizar o estudo do timer, conclui-se que de suma importncia aprender sua configurao, modos de interrupo e o clculo de tempo. O cdigo fonte do programa foi concludo, parcialmente testado (apenas compilado no IAR) e assim os objetivos do relatrio foram concludos. Cdigo fonte:

#include <msp430g2553.h> #define LED_0 BIT0 #define LED_1 BIT6 #define LED_OUT P1OUT #define LED_DIR P1DIR int x = 0; unsigned int timerCount = 0; void main(void) { WDTCTL = WDTPW + WDTHOLD; // parar o watchdog com WDTHOLD LED_DIR |= (LED_0 + LED_1); // colocar o p1.0 e p1.6 que sao os leds ligados LED_OUT &= ~(LED_0 + LED_1); // Seta os LEDs para um estado desligado P1OUT ^= (LED_0); CCTL0 = CCIE;

TACTL = TASSEL_2 + MC_2; // TASSEL_2 poe o timer a para o clock auxiliar por que no temos cristal na launchpad //MC_2 faz com que o contador conte de 0 at 65.536 continuamente __enable_interrupt(); __bis_SR_register(LPM0 + GIE); // lpm com interrupcao } // Rotina de Interrupo do timer Ao #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A (void) { timerCount = (timerCount + 1) % 32; //vai contar at 32 pois quero dois segundos //sabemos que se temos o clock de 1mhz da memoria interna do launchpad //podemos pegar e descobrir pela formula tempo = numero de contagens / clock //o que nos da 16 contagens = 1 segundo. if(timerCount ==0) P1OUT ^= (LED_0 + LED_1); }

S-ar putea să vă placă și