7a-temporizadores_contadores

53
Visão Geral: SFR e Periféricos Registradores em SFR controlam o funcionamento dos Periféricos

Upload: filipe-caceres

Post on 09-Dec-2015

215 views

Category:

Documents


2 download

DESCRIPTION

7a-Temporizadores_Contadores

TRANSCRIPT

Page 1: 7a-Temporizadores_Contadores

Visão Geral: SFR e Periféricos

Registradores em SFR controlam

o funcionamento dos Periféricos

Page 2: 7a-Temporizadores_Contadores

Periférico: Estrutura Básica

Uma ou mais linhas de

interrupção

Um ou mais registradores de

cada tipo

Page 3: 7a-Temporizadores_Contadores

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;

Page 4: 7a-Temporizadores_Contadores

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;

Page 5: 7a-Temporizadores_Contadores

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;

Page 6: 7a-Temporizadores_Contadores

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;

Page 7: 7a-Temporizadores_Contadores

T/C: Funcionamento básico

Page 8: 7a-Temporizadores_Contadores

Exemplos

Qual o intervalo de overflow para:

� Fosc = 12 MHz, 8 bits contador; Divisor = 1 ?

� Fosc = 16 MHz, 16 bits contador; Divisor = 128?

Page 9: 7a-Temporizadores_Contadores

T/C com Auto Recarga

Page 10: 7a-Temporizadores_Contadores

T/C com Recarga: Exemplo

Qual o valor da recarga ?

Onde fica armazenado este valor ?

Page 11: 7a-Temporizadores_Contadores

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 ?

Page 12: 7a-Temporizadores_Contadores

T/C: Saída de Comparação (1)

Page 13: 7a-Temporizadores_Contadores

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;

Page 14: 7a-Temporizadores_Contadores

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.

Page 15: 7a-Temporizadores_Contadores

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;

Page 16: 7a-Temporizadores_Contadores

Temporização de pulsos externos:Primeira possibilidade

Método também chamado de Gated Clock

Page 17: 7a-Temporizadores_Contadores

Exemplo de uso:

Qual o tempo em alto do pulso externo?

Page 18: 7a-Temporizadores_Contadores

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;

Page 19: 7a-Temporizadores_Contadores

Temporização de pulsos externos:Segunda possibilidade

Método também chamado de Modo de Captura

Page 20: 7a-Temporizadores_Contadores

Exemplo de uso:

Qual o período do sinal de entrada externo?

Page 21: 7a-Temporizadores_Contadores

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;

Page 22: 7a-Temporizadores_Contadores

PWM (Pulse Width Modulation)

Page 23: 7a-Temporizadores_Contadores

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;

Page 24: 7a-Temporizadores_Contadores

PWM: Introdução e Definição (2)

��������

��� �

������

� 100%

Page 25: 7a-Temporizadores_Contadores

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:

Page 26: 7a-Temporizadores_Contadores

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

Page 27: 7a-Temporizadores_Contadores

Circuito Digital para PWM:Exemplo

Page 28: 7a-Temporizadores_Contadores

Exemplo de funcionamento

Registrador de Período = 0x8000;

Registrador de Duty Cycle = 0x1000;

Page 29: 7a-Temporizadores_Contadores

Watchdog Timer

Page 30: 7a-Temporizadores_Contadores

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;

Page 31: 7a-Temporizadores_Contadores

Circuito Digital Básico

Page 32: 7a-Temporizadores_Contadores

Estudo dos T/C: AT89S52 e ATmega328p

Page 33: 7a-Temporizadores_Contadores

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);

Page 34: 7a-Temporizadores_Contadores

Exemplo para T/C Timer 0

Para T/C Timer 1 a arquitetura é análoga.

Page 35: 7a-Temporizadores_Contadores

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)

Page 36: 7a-Temporizadores_Contadores

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

Page 37: 7a-Temporizadores_Contadores

Timer 2: Capture Mode

Page 38: 7a-Temporizadores_Contadores

Timer 2: Auto-Reload Mode (DCEN= 0)

Page 39: 7a-Temporizadores_Contadores

Timer 2: Auto-Reload Mode (DCEN= 1)

Page 40: 7a-Temporizadores_Contadores

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;

Page 41: 7a-Temporizadores_Contadores

T/C Timer 0: Visão Geral

Page 42: 7a-Temporizadores_Contadores

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;

Page 43: 7a-Temporizadores_Contadores

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;

Page 44: 7a-Temporizadores_Contadores

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;

Page 45: 7a-Temporizadores_Contadores

Modo Fast PWM : básico

���� ����_ !

" ∙ $%&

Onde: N ���� Prescaler

Page 46: 7a-Temporizadores_Contadores

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;

Page 47: 7a-Temporizadores_Contadores

Modo Phase Correct PWM : básico

���� ����_ !

" ∙ %'(

Onde: N ���� Prescaler

Page 48: 7a-Temporizadores_Contadores

Modo Phase Correct PWM

� TCNTn é incrementado e decrementado;� Saída OCnx fica em “1” enquanto TCNTn estive abaixo do

registrador de comparação (OCRnx);

Page 49: 7a-Temporizadores_Contadores

Prescaler: Timer 0 e Timer 1

Page 50: 7a-Temporizadores_Contadores

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);

Page 51: 7a-Temporizadores_Contadores

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);

Page 52: 7a-Temporizadores_Contadores

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”;

Page 53: 7a-Temporizadores_Contadores

Watchdog Timer no ATmega328p