Download - 7a-Temporizadores_Contadores
Visão Geral: SFR e Periféricos
Registradores em SFR controlam
o funcionamento dos Periféricos
Periférico: Estrutura Básica
Uma ou mais linhas de
interrupção
Um ou mais registradores de
cada tipo
Temporizador/Contador (T/C)
� Um dos periféricos mais comuns em microcontroladores;
� Essencial para medição e controle de tempo;
� Função Temporizador:� Contagem de pulsos derivado do clock do sistema, permitindo
então estabelecer uma relação temporal;
� Função Contador:� Contagem de pulsos externos;
Características
� O elemento central do T/C é um contador;� Pode ser de 8 bits, 16 bits, ou 32 bits, geralmente configurável;
� T/C de cada microcontrolador é diferente, e pode ser configurado para funcionar em diferentes modos de operação;
� Registradores em SFR são utilizados para:� Configurar funcionamento do T/C;� Acessar valores do T/C;� Monitorar Status de funcionamento do T/C;
Aplicabilidade
� Geração de intervalos de tempo precisos;� Interrupções regulares;
� Medição da duração de pulsos externos;
� Contagem de eventos externos;
� Específicos:� Geração de sinal PWM (Pulse Width Modulation);� Watchdog;
T/C Overflow / Underflow
� Overflow� Contagem crescente;� Quando chega no limite, 0xFF (caso 8 bits), uma contagem a
mais faz o overflow, e contador vai para 0x00;
� Underflow� Contagem decrescente;� Quando chega no limite 0x00 (caso 8 bits), uma contagem a
mais faz o underflow, e contador vai para 0xFF;
� Overflow e Underflow podem ser usados para gerar interrupções;
T/C: Funcionamento básico
Exemplos
Qual o intervalo de overflow para:
� Fosc = 12 MHz, 8 bits contador; Divisor = 1 ?
� Fosc = 16 MHz, 16 bits contador; Divisor = 128?
T/C com Auto Recarga
T/C com Recarga: Exemplo
Qual o valor da recarga ?
Onde fica armazenado este valor ?
Exemplos
Qual o intervalo de overflow para:
� Fosc = 12 MHz, 8 bits contador; Divisor = 1; Auto Recarga = 0xF0; contador crescente ?
� Fosc = 16 MHz, 16 bits contador; Divisor = 128; Auto Recarga = 0x8000, contador crescente ?
T/C: Saída de Comparação (1)
T/C: Saída de Comparação (2)
� “Comparison Register” é iniciado com 0x4000;� Quando contador atinge este valor, o programa detecta o evento
(por pooling ou interrupção);� Muda “Comparison Register” para 0x8000 (+ 0x4000);� Executa a ação do evento;� Espera próximo evento;
Exemplo: geração de intervalos pelo comparador
1. Defina o valor do divisor programável;2. Zerar o contador atual e o registrador de comparação;3. Somar ao valor do registrador de comparação o valor do
delay em termos de pulsos do contador;4. Guardar este valor no registrador de comparação;5. Fazer o reset da flag (bit) de comparação;6. Aguardar até a flag (bit) de comparação ser acionada;7. Quando flag (bit) de comparação acionar (pooling ou
interrupção), executa ação periódica;8. Volta a 3.
Fonte do clock para contador
�Divisor programável:�A maioria dos microcontroladores, mas nem todos, possuem;
�Também conhecido como prescaler;
�Na maioria dos casos o clock de entrada pode ser:�Derivado do oscilador do sistema;�Entrada de sinal externo, por pino específico;
Temporização de pulsos externos:Primeira possibilidade
Método também chamado de Gated Clock
Exemplo de uso:
Qual o tempo em alto do pulso externo?
Exemplo de uso:
1. Definir o valor do divisor programável;2. Configurar para contar em nível alto ou em nível baixo;3. Configurar e habilitar a interrupção local;4. Zerar o contador;5. Habilitar a interrupção global;6. Aguardar a interrupção;7. Quando ocorrer a interrupção, calcular o valor do
tempo em função da contagem no contador;
Temporização de pulsos externos:Segunda possibilidade
Método também chamado de Modo de Captura
Exemplo de uso:
Qual o período do sinal de entrada externo?
Exemplo de uso:
1. Definir o valor do divisor programável;2. Configurar para fazer Latch sensível na borda de subida ou
descida;3. Configurar e habilitar a interrupção local;4. Habilitar a interrupção global;5. Aguardar a primeira interrupção;6. Quando ocorrer a interrupção, ler e memorizar o valor do Latch;7. Aguardar a segunda interrupção;8. Quando ocorrer a interrupção, ler o valor do Latch, e pela
diferença entre este valor e o primeiro, calcular o período;
PWM (Pulse Width Modulation)
PWM: Introdução e Definição (1)
� Modulação por Largura de Pulso (PWM – Pulse Width Modulation);
� PWM é baseado em um sinal de onda quadrada de frequência fixa (portadora);
� A razão entre o tempo em nível alto e nível baixo é a modulação do sinal: � Largura do Pulso;� Também chamada de “Duty Cycle”;
� A tensão média (informação) do sinal é dada por esta razão;
PWM: Introdução e Definição (2)
��������
��� �
������
� 100%
PWM: Introdução e Definição (3)
� Filtro Passa Baixa permite retirar a informação do sinal digital PWM;
� Modulação pode ser um sinal dinâmico:
Espectros de frequência
Espectro de frequência do sinal a gerar deve ser menor
do que frequência fundamental do PWM
Filtro Passa Baixa retira as
componentes de frequência do PWM
Circuito Digital para PWM:Exemplo
Exemplo de funcionamento
Registrador de Período = 0x8000;
Registrador de Duty Cycle = 0x1000;
Watchdog Timer
Introdução e Definição
� Contador especial utilizado para uma única finalidade: � Gerar um RESET na CPU quando o programa “trancar”;
� Watchdog timer fica contando, incrementando, e se não for zerado, pode gerar um overflow e causar um RESET na CPU;
� Em funcionamento normal:� Em um ponto do laço principal (dentro de while(1)) o
Watchdog timer é zerado antes do seu overflow;� Se o programa não trancar, o Watchdog será sempre zerado
antes do overflow, impedindo o RESET de ocorrer;
Circuito Digital Básico
Estudo dos T/C: AT89S52 e ATmega328p
T/C no AT89S52
� Possui 2 T/C basicamente idênticos (Timer 0 e Timer 1) e um terceiro (Timer 2) com mais funcionalidades;
� Registradores em SFR configuram o Modo de Operação, podendo operar como:� T/C de 8 bits ou 16 bits;� T/C de 8 bits com auto recarga;� Timer 2 somente: T/C de 16 bits com auto recarga; ou T/C em
modo de captura;
� Não possuem Divisor Programável (Prescaler);� T/C é incrementado a cada 12 pulsos de clock (1 ciclo
de máquina);
Exemplo para T/C Timer 0
Para T/C Timer 1 a arquitetura é análoga.
Modo 1: Arquitetura
÷ 12
C/T0
TMOD.2
TR0
TCON.4
GATE
0
TMOD.3
TF0
TCON.5
0
TMOD.1 TMOD.0
1
M1:M0 = 0:1
Modo 1
Osc.
T0
P3.4
XTAL
/INT0
P3.2
0 UP
1 DOWN
0 UP
1 DOWN
Arquitetura para
Timer 0
TL0
(8 bits)
TH0
(8 bits)
Modo 2: Arquitetura
÷ 12
C/T0
TMOD.2
TR0
TCON.4
GATE
0
TMOD.3
TF0
TCON.5
1
TMOD.1 TMOD.0
0
M1:M0 = 1:0
Modo 2
Osc.
T0
P3.4
XTAL
/INT0
P3.2
0 UP
1 DOWN
0 UP
1 DOWN
Arquitetura para
Timer 0
TL0
(8 bits)
TH0
(8 bits)
RELOAD
Timer 2: Capture Mode
Timer 2: Auto-Reload Mode (DCEN= 0)
Timer 2: Auto-Reload Mode (DCEN= 1)
T/C no ATmega328p
� Possui três T/C;� T/C Timer 0 de 8 bits, com dois comparadores, e com PWM;� T/C Timer 1 de 16 bits, com dois comparadores, e com PWM;� T/C Timer 2 de 8 bits, com dois comparadores, e com PWM;
Podendo ter fonte de clock independente;
� Possui Prescaler para clock;
� T/C Timer 1 pode operar em modo de captura;
� Cada T/C possui diferentes modos de operação configuráveis;
T/C Timer 0: Visão Geral
Modos de Operação
� São basicamente 4 modos� Timer 1 possui um modo a mais;� São definidos pelos bits de Waveform Generation mode (WGM)
e Compare Output mode (COM);� Todos bits localizados em SFR próprios de cada T/C Timer;
� Dois modos são dedicados a geração de sinal PWM;� Normal Mode;� CTC Mode;� Fast PWM Mode;� Phase Correct Mode;
Modo Normal
� Contador é incrementado;� Velocidade depende da frequência do sistema e do Prescaler;
� Quando chega ao topo, recomeça do 0x00;
� Gera overflow quando da passagem de 0xFF para 0x00;
� Pode ser utilizado para gerar interrupções em intervalos regulares;
Modo CTC
� CTC: Clear Timer on Compare match;� TCNTn é incrementado; Quando for igual ao registrador de
comparação (OCRnx), zera TCNTn e pode gerar interrupção;� Pode também complementar um pino de saída específico, se
configurado;
Modo Fast PWM : básico
���� ����_ !
" ∙ $%&
Onde: N ���� Prescaler
Modo Fast PWM
� Contador TCNTn incrementa de 0x00 a 0xFF;� Saída OCnx começa em “1”, quando TCNTn == OCRnx;
coloca “0” em na saída OCnx;� Pode gerar interrupção quando isto ocorrer;� Pode gerar interrupção quando Overflow;
Modo Phase Correct PWM : básico
���� ����_ !
" ∙ %'(
Onde: N ���� Prescaler
Modo Phase Correct PWM
� TCNTn é incrementado e decrementado;� Saída OCnx fica em “1” enquanto TCNTn estive abaixo do
registrador de comparação (OCRnx);
Prescaler: Timer 0 e Timer 1
Watchdog Timer no AT89S52
� WDT é o Watchdog Timer de 14 bits, incrementado a cada 12 pulsos de clock (um ciclo de máquina);
� WDTRST (SFR de endereço 0xA6) é o registrador que zera o contador;� Para zerar: escrever 0x1E e 0xE1, nesta sequencia!
� Watchdog timer é desabilitado no RESET do microcontrolador;
� É habilitado na primeira vez em que a sequencia de zerar é realizada;
� Não pode ser desabilitado (apenas pelo próprio RESET);
Watchdog Timer no ATmega328p
� O clock é dedicado ao Watchdog: 128 kHz, independente do clock central;
� Tempo de contagem configurável entre 16ms a 8s;
� Pode ser configurado para, quando no overflow:� Gerar interrupção;� Gerar um RESET na CPU;� Gerar interrupção e RESET;
� Pode ser habilitado pela programação (SFR), ou estar sempre ligado (fuse bit WDTON);
Watchdog Timer no ATmega328p
� Existe a instrução WDR que zera o Watchdog Timer;
� Pela biblioteca “avr-gcc”:
#include <avr/wdt.h>
wdt_reset(); // zera Watchdog timer
wdt_enable( valor ); // habilita o Watchdog
// Timer utilizando a
// configuração dada pelo
// “valor”
� Ler manual da biblioteca “avr-gcc” para saber possíveis valores para “valor”;
Watchdog Timer no ATmega328p