Microcontroladores 2 EL08D Turma M12 - UTFPR
Transcript of Microcontroladores 2 EL08D Turma M12 - UTFPR
Temporizador / Contador
Microcontroladores 2EL08D
Turma M12
Prof. Gabriel KovalhukE-mail: [email protected]
Site: http://paginapessoal.utfpr.edu.br/kovalhuk
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TEMPORIZADORES / CONTADORES NO
MSP430Este material foi retirado do livro: “MSP430 Microcontroller Basics”, Jonh Davis e do documento e “MSP430x2xx Family User's Guide”, Texas Intruments
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Temporizadores / Contadores
Periférico comum (obrigatório) em sistemas
microprocessados;
Na família MSP430, os temporizadores são definidos
por tipo e são essencialmente iguais (por tipo) para
todos os elementos da família;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Tipos de temporizadores:
Watchdog Timer: Presente em todos os dispositivos.
Sua função principal é prevenir o mau funcionamento
do sistema devido a falhas/erros do software. Porém,
o watchdog pode ser configurado como temporizador
comum;
Basic Timer 1: presente nas famílias 4xx. Fornece o
clock para o driver de LCD;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A: É um temporizador de uso geral, pode ser
usado em diversas aplicações, como gerador de
tempo, gerador de sinais PWM, contadores de
eventos, medidas de largura de pulso, etc.;
TIMER B: Semelhante ao TIMER A com algumas
extensões;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A:
Temporizador/contador de 16 bits, assíncrono, de uso
geral;
Possui 4 modos de operação;
Pode gerar diversas interrupções;
Possui registradores de captura/comparação, que
podem ser usados para gerar sinais PWM, medição
de períodos, medição de intervalos de tempos;
Pode operar a partir de diversas fontes de clock;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A:
Trabalha independentemente da CPU (a CPU é
usada somente para configuração do
temporizador/contador);
A nomenclatura do temporizador/contador indica
algumas informações sobre o temporizador:
TIMER0A3 Indica quantas unidades de
captura/comparação que o timer possui
Indica o tipo do timer, neste caso, tipo A
Indica qual é o timer. Quando existem
mais de um timer, são numerados como
1, 2, etc.
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A:
O MSP430G2553 possui dois temporizadores/
contadores deste tipo: TIMER0A3 e TIMER1A3;
E o MSP430G2452 possui apenas um temporizador/
contador, o TIMER0A3;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A:
O TIMER A é composto de dois blocos básicos:
Bloco do contador
Bloco de comparação e captura;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Diagrama em blocos do TIMER A:
Bloco
Contador
3 Blocos de
Captura e
Comparação
CCR1CCR0
CCR2
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Diagrama em blocos do TIMER A:
CONTADOR
CCR0 CCR1 CCR2
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A: Bloco do contador
Os sinais com ■ são ligados ao registrador de controle
(neste caso TACTL);
15 0
TARClear RC
Count
Mode
Divider
1/2/4/8
00
01
10
11
EQU0
Set TAIFG
TACLKACLK
SMCLKINCLK
0123456789101112131415
TA
IFG
TA
IE
TA
CLR
MC
x
IDx
TA
SS
ELx
unused
unused
REGISTRADOR TACTL
TASSELx
IDx MCx
TACLR
Timer Clock
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A:
Bloco do contador
O Bloco TAR é o contador propriamente dito, incrementa
ou decrementa a cada rampa de subida do clock;
Pode ser acessado, via software, para leitura e escrita;
Pode gerar interrupção quando ocorre o estouro da
contagem (seta o bit TAIFG);
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A:
Bloco do contador
O sinal de clock pode ser dividido por 1, 2, 4 ou 8,
selecionado pelos bits IDx do registrador TACTL;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A:
Bloco do contador
A fonte de clock para o temporizador é selecionada
pelos bits TASSELx do registrador TACTL;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A:
Bloco do contador
O contador possui 4 modos de operação, selecionados
pelos bit MCx do registrador TACTL;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A:
Bloco do contador
O sinal TACLR do registrador TACTL reseta o contador,
o divisor de clock e a direção de contagem;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A: o Registrador TAxCTL
Configura o bloco de contagem do
temporizador/contador;
É um registrador de 16 bits acessado por software;
Cada conjunto de bits determinam cada um dos
controles do bloco de contagem;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A: o Registrador TAxCTL
TASSELx: Seleciona o sinal de clock do temporizador;
IDx: seleciona o fator de divisão do clock (1, 2, 4 ou 8);
MCx: seleciona o modo de contagem do temporizador;
TACLR: reseta a contagem;
TAIE: habilita a interrupção do TIMER;
TAIFG: flag indicando que existe uma interrupção
deste TIMER pendente;
15 14 13 12 11 10 9 8
não usados TASSELx
rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0)
7 6 5 4 3 2 1 0
IDx MCx - TACLR TAIE TAIFG
rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0) rw-(0)
TASSELx
IDx MCx TACLR TAIE TAIFG
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A: o Registrador TAxCTL
Para se configurar o temporizador, basta setar ou resetar os bits
do TAxCTL conforme está no User Guide (SLAU144J, pág. 370);
Para facilitar a configuração, existem defines para estes bits no
arquivo “msp430g2553.h”. Assim, por exemplo, para se configurar
o TIMERA03 para usar o SMCLK como clock, divisão do clock por
4, modo UP e para gerar interrupção, pode-se fazer o com a
seguinte linha em liguagem C:
TA0CTL |= TASSEL_2 // seleciona SMCLK
+ ID_2 // divisao do clock por 4
+ MC_1 // modo UP
+ TAIE; // habilita interrupcao
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A: Blocos de Captura/Comparação
São três blocos iguais na maioria dos dispositivos;
Alguns dispositivos possuem apenas dois ou um bloco de
captura e comparação;
A quantidade destes blocos é especificada no sufixo do timer
(TIMER_A3)
O bloco CCR0 tem prioridade sobre os demais:
O registrador TACCR0 é usado para determinar o período
de contagem do temporizador;
Sua interrupção tem prioridade maior que os demais
blocos;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A: Blocos de Captura/Comparação
CCR0
TACCR0
Comparator 0
EQU0
Set TACCR0
CCIFG
OUT0 Signal
Registrador
de Captura /
comparação
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A: Blocos de Captura/Comparação
CCR0
TACCR0
Comparator 0
EQU0
Set TACCR0
CCIFG
OUT0 Signal
Circuito de
comparação
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A: Blocos de Captura/Comparação
CCR0
TACCR0
Comparator 0
EQU0
Set TACCR0
CCIFG
OUT0 Signal
Seleciona o
sinal de
captura
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A: Blocos de Captura/Comparação
CCR0
TACCR0
Comparator 0
EQU0
Set TACCR0
CCIFG
OUT0 Signal
Sinaliza
interrupção
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A: Blocos de Captura/Comparação
CCR0
TACCR0
Comparator 0
EQU0
Set TACCR0
CCIFG
OUT0 Signal
Sinal de
saída,
associado
aos pinos
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A: Blocos de Captura/Comparação
CCR0
TACCR0
Comparator 0
EQU0
Set TACCR0
CCIFG
OUT0 Signal
Determinam
como será a
saída
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Modos de Operação do TIMER A
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Modos de Operação do TIMER A
O TIMER A possui 4 modos de operação, selecionados
pelos bit MCx do registrador TACTL:
0 0 – modo STOP: contador parado;
0 1 – modo UP: contador crescente, com módulo de
contagem programável;
1 0 – modo CONTINUOS: contador em modo
crescente, de 0 a FFFFh;
1 1 – modo UP/DOWN: contador
progressivo/regressivo;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Modo STOP
A contagem do registrador TAR permanece parada,
mantendo o seu último valor;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Modo UP
O registrador TAR incrementa sua contagem
repetidamente até o valor do registrador de
comparação TACCR0, que define o período de
contagem;
O número de contagens por período é TACCR0+1;
O flag de interrupção TACCR CCIFG é setado quando
a contagem atinge o valor de TACCR0;
O flag de interrupção TAIFG é setado quando o TIMER
passa de TACCR0 para zero;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A Modo UP:
Setado quando
TAR -> 0
Setado quando
TAR == TACCR0
Set TACCR0
CCIFG
TACCR0
Comparator 0
EQU0
CCR0
OUT0 Signal
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
TIMER A Modo UP:
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Modo Contínuo
O registrador TAR incrementa sua contagem
repetidamente até o valor máximo (0xFFFF) e retorna
a zero;
O flag de interrupção TAIFG é setado quando o TIMER
passa de 0xFFFF para zero;
Os registradores TACCRx podem ser usados para
gerar marcações de tempo intermediárias, podendo
também gerar interrupções nestas marcações;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Modo Contínuo
Uma interrupção pode ser gerada quando TAR passa
de 0xFFFF para 0x0000 (TAIFG);
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Modo Contínuo
Marcações de tempo podem ser adicionadas pelos
registradores TACCRx, podendo também gerar
interrupções;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Modo UP/DOWN
O registrador TAR conta progressivamente de 0 até o valor
em TACCR0 e, depois conta de maneira decrescente de
TACCR0 até 0;
Neste modo, os flags de interrupção TACCR0 CCIFG e
TAIFG são setados somente uma vez durante um período,
separados por ½ período de tempo;
O TACCR0 CCIFG é setado quando o timer conta do
TACCR0- 1 a TACCR0 e o TAIFG é setado quando o timer
completa a contagem decrescente de 0001h a 0000h;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Modo UP/DOWN
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Interrupções
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Interrupções:
• O MSP430G2553 possui dois TIMERS;
• O TIMER0 pode gerar 3 interrupções:
• uma exclusiva para o CCR0:
#pragma vector=TIMER0_A0_VECTOR
• Outra para o TAR (TAIFG) e outra para o CCR1:
#pragma vector=TIMER0_A1_VECTOR
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Interrupções:
• O TIMER1 pode gerar 4 interrupções:
• uma exclusiva para o CCR0:
#pragma vector=TIMER1_A0_VECTOR
• Outra para TAR (TAIFG), CCR1 e CCR2:
#pragma vector=TIMER1_A1_VECTOR
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Interrupções:
• A interrupção do TIMER1 tem prioridade maior que a do
TIMER 0;
• Para cada TIMER, a interrupção do CCR0 tem
prioridade maior que as outras interrupções (TAR,
CCR1 e CCR2);
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Interrupções:
Vetores de interrupção do MSP430G2553:
#define TRAPINT_VECTOR (0 * 2u) /* 0xFFE0 TRAPINT */
#define PORT1_VECTOR (2 * 2u) /* 0xFFE4 Port 1 */
#define PORT2_VECTOR (3 * 2u) /* 0xFFE6 Port 2 */
#define ADC10_VECTOR (5 * 2u) /* 0xFFEA ADC10 */
#define USCIAB0TX_VECTOR (6 * 2u) /* 0xFFEC USCI A0/B0 Transmit */
#define USCIAB0RX_VECTOR (7 * 2u) /* 0xFFEE USCI A0/B0 Receive */
#define TIMER0_A1_VECTOR (8 * 2u) /* 0xFFF0 Timer0)A CC1, TA0 */
#define TIMER0_A0_VECTOR (9 * 2u) /* 0xFFF2 Timer0_A CC0 */#define WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */
#define COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */
#define TIMER1_A1_VECTOR (12 * 2u) /* 0xFFF8 Timer1_A CC1-3, TA1 */
#define TIMER1_A0_VECTOR (13 * 2u) /* 0xFFFA Timer1_A CC0 */#define NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maskable */
#define RESET_VECTOR (15 * 2u) /* 0xFFFE Reset [Highest Priority] */Maior
Prioridade
Menor
Prioridade
PR
IOR
IDA
DE
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Exemplo 01
Faça um programa para que o LED vermelho do kit (que está
no pino P1.0) altere seu estado (ligado ou desligado) a cada
0,5s.
Condições:
Usar o SMCLK como fonte de clock;
Usar o modo UP;
Ajustar a divisão de clock para obter uma interrupção a
cada 0,5s
Calcular o valor de TACCR0 para obter 0,5s;
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Exemplo (“esqueleto” do programa com interrupção do TIMER 0):
#pragma vector=TIMER0_A1_VECTOR__interrupt void timer0(){
……… // rotina de interrupçãoTA0CTL &= ~TAIFG; // indica que a interrupcao ja foi atendida
}void main(){
WDTCTL = WDTPW+WDTHOLD; // destiva wathchdogTA0CTL |= ……; // configura o TIMER (seleciona o sinal
// de clock, o modo de operação, a// divisão do clock, etc. Ver pág 19)
TACCR0 = 0xXXXX; // define o período de contagem
……… // configure P1.0 como saida__bis_SR_register(LPM0_bits + GIE); // coloca no modo LPM0 e
// habilita GIE }
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Exemplo 02
Faça um programa para que o LED vermelho do kit (que está
no pino P1.0) altere seu estado (ligado ou desligado) a cada
0,5s, controlado pelo TIMER 0 e o LED verde do kit (que está
no pino P1.6) altere seu estado a cada 0,1s, controlado pelo
TIMER 1 (serão usadas duas interrupções).
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Esqueleto do programa da tarefa 2 (continua na próxima
página):
#pragma vector=TIMER0_A1_VECTOR // define interrupção do TIMER0__interrupt void timer0(){
………TA0CTL &= ~TAIFG; //indica que a interrupcao ja foi atendida
}
#pragma vector=TIMER1_A1_VECTOR // define interrupção do TIMER1__interrupt void timer1(){
………TA1CTL &= ~TAIFG; //indica que a interrupcao ja foi atendida
}
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
void main(){
WDTCTL = WDTPW+WDTHOLD; // destiva wathchdogTA0CTL |= ……; // configura o TIMER (seleciona o sinal
// de clock, o modo de operação, a// divisão do clock, etc.
TA0CCR0 = 0xXXXX; // define o período de contagem
TA1CTL |= ……; // configura o TIMER (seleciona o sinal// de clock, o modo de operação, a// divisão do clock, etc.
TA1CCR0 = 0xYYYY; // define o período de contagem
……… // configure P1.0 e P1.6 como saida
__bis_SR_register(LPM0_bits + GIE); // coloca no modo LPM0 e// habilita GIE
}
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Registradores do TIMER A
Verificar a configuração destes registradores no MSP430
User Guide (arquivo slau144i.pdf)
Temporizador / Contador
EL08D – Microcontroladores 2Prof. Gabriel Kovalhuk 2018/1
Bibliografia:
• [DAVIES], DAVIES Jonh H., MSP430 Microcontroller
Basics, Elsevier 2008.
• [SLAU144J] MSP430x2xx Family User's Guide, Texas
Instruments, 2013.