Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Sistemas Embarcados: Temporizadores e Contadores DCA0119 Sistemas Digitais Heitor Medeiros Florencio
Temporizadores e Contadores T/C : Timer/Counter Temporizadores: Dispositivo que gera sinais pulsados em uma frequência fixa; Dispositivo configurável através de registradores de controle; Conta intervalos de tempo; Contadores: Idêntico ao temporizador; Conta pulsos de clock internos ou externos; Conta o número de eventos de uma entrada; 2
Timer/Counter Dentro dos MCUs existem vários T/C que possuem uma resolução de acordo com o número de bits. Todas as interrupções são controladas pelos T/C. O Watchdog é construído por um temporizador/contador. Watchdog é baseado em um temporizador que faz a contagem regressiva de um valor inicial definido via registro até zero. Se o MCU não resetar a contagem regressiva do temporizador, deixando chegar até o valor 0, o temporizador vai enviar um sinal para resetar o MCU. 3
ATMega328: Timer/Counter O microcontrolador ATMega328 possui temporizadores de 8 bit e de 16 bits. Timer/Counter 0 (T/C 0): o módulo mais simples de 8 bit. Timer/Counter 2 (T/C 2): módulo de 8 bits; permite a configuração do valor de topo da contagem; permite 4 modos de execução. Timer/Counter 1 (T/C 1): módulo de 16 bits; mais preciso; permite geração de ondas. 4
ATMega328: T/C 0 Características do temporizador/contador 0: Contador simples que incrementa um valor a cada ciclo de clock, podendo ser de uma fonte interna ou externa. Quando o contador passar do valor 0xFF ocorre um estouro e é gerada uma interrupção. Prescaler de 10 bits. Prescaler é o número de divisões para incremento; número de divisões do ciclos de clock. Ex.: Prescaler de 8: após 8 ciclos de clock o contador incrementa 1 unidade. Duas unidades de comparação independentes; Suporte a geração de sinais PWM; Quatro modos de operação (WGM<2:0>); 5
ATMega328: T/C 0 Contador Comparadores 6
ATMega328: T/C 0 Modo Normal : O contador sempre incrementará; Interrupção quando atingir o topo; Interrupção quando TCNT == OCR; Pode setar/resetar/toggle o pino OC quando TCNT == OCR; Modo CTC (Clear Timer on Compare Match): O contador sempre incrementará; Recomeça a contagem quando TCNT == OCR; Usado para geração de onda quadrada no pino OC (quando habilitado como pino de saída); Adequado para aplicações regulação de potência, retificação e outras usando DACs; 7
ATMega328: T/C 0 Modo CTC (Clear Timer on Compare Match): Usado para geração de onda quadrada no pino OC (quando habilitado como pino de saída); Frequência de OC: N vai depender do prescaler (1, 8, 64, 256 ou 1024); OCR valor entre 0 e 255; 8
ATMega328: T/C 0 Modo PWM Rápido: O contador sempre incrementará; Interrupção quando overflow (TCNT == 255); Interrupção quando TCNT == OCR; Utilizado para geração de sinal PWM (Pulse Width Modulation) de alta frequência; Frequência PWM: 9
ATMega328: T/C 0 Modo PWM com fase corrigida: Baseado na contagem crescente e decrescente do TCNT; Aplicações: Controle de motores; 10
Fast PWM x Phase Correct PWM 11
ATMega328: TTCR0A TTCR0A: Timer/Counter Control Register A COM0 - Modo de saída da comparação: 12
ATMega328: TTCR0A TTCR0A: Timer/Counter Control Register A WGM<1:0> - Modo do timer/counter: 13
ATMega328: TTCR0B TTCR0B: Timer/Counter Control Register B CS<2:0> - Clock select: 14
ATMega328: TTCR0B TTCR0B: Timer/Counter Control Register B FOC0<A;B> - Force Output Compare: Apenas para os modos não PWM (modo normal e CLC); Quando setado, força a saída de comparação OC produzir uma mudança; 15
ATMega328: TCNT; OCR TCNT0: Timer/Counter Register Valor do contador; OCR0<A;B>: Output Compare Register <A;B> Valor de comparação; 16
ATMega328: TIMSK0 TIMSK0: Timer/Counter Interrupt Mask Register Habilitando interrupções: OCIE0B: Habilitar interrupção do comparador B. OCIE0A: Habilitar interrupção do comparador A. TOIE0: Habilitar interrupção de overflow. 17
ATMega328: TIFR0 TIFR0: Timer/Counter 0 Interrupt Flag Register Interrupções: OCF0B: Flag da interrupção do comparador B. Bit 1 quando ocorre a interrupção; OCF0A: Flag da interrupção do comparador A. Bit 1 quando ocorre a interrupção; TOV0: Flag da interrupção de overflow. Bit 1 quando ocorre a interrupção; 18
ATMega328: T/C 1 Características do temporizador/contador 1: Contador de 16 bits; Dois comparadores independentes; Uma unidade de captura (pino ICP1); Contador de eventos externos; Quatro interrupções independentes: TOV1, OCF1A, OCF1B e ICF1; O flag ICF1 é setado quando ocorre a captura de evento no pino ICP1. Suporte a geração de sinais PWM; 19
ATMega328: T/C 1 20
ATMega328: T/C 1 21
ATMega328: T/C 1 22
ATMega328: T/C 2 Características do temporizador/contador 2: Diagrama de bloco idêntico ao T/C 0 23
ATMega328: T/C 2 Características do temporizador/contador 2: Contador de 8 bits; Dois comparadores independentes; Três interrupções independentes: TOV1, OCF1A, OCF1B; Suporte a geração de sinais PWM; Principal diferença: Operação assíncrona. O T/C 2 pode ser incrementado pelo clock interno, via prescaler, ou assicronamente através dos pinos TOSC1/2 (cristal de 32.768 Hz), quando o bit AS2 do registrador ASSR. 24
ATMega328: T/C 2 Características do temporizador/contador 2: Operação assíncrona. Sincronismo de um oscilador externo. Diagrama de bloco do contador: 25
ATMega328: T/C 2 26
ATMega328: T/C 2 27
Atividade Complementar Analise os temporizadores/contadores do MCU da família PIC, fabricante Microchip. 28
Exercícios: Temporizadores/Contadores 29
Exercício Desenvolver um programa em C e embarcar no microcontrolador ATMega328 para piscar um LED a cada 1 segundo utilizando o temporizador T/C0 do μc. 30
Exercício: Resolução Solução: Utilizar o temporizador T/C 0 para contar 1 segundo e depois alterar o valor do pino do LED (piscar); T/C 0: temporizador de 8 bits conta de 0 a 255 pulsos de clock para gerar o overflow; O período de cada pulso depende da frequência do temporizador; Se a frequência do μc for 16 MHz, o maior período possível é: CS02<2:0> = 101 : CLK CPU /1024 f TC0 = 16.000.000 = 15.625 Hz 1024 1 T TC0 = = 0, 000064 s 15. 625 Cada pulso de clock leva 0,000064s. 31
Exercício: Resolução Alternativa 01: Alterar o valor do pino do LED quando ocorrer um overflow. O temporizador TC0 demora 0,016384 para gerar um overflow. T overflow TC0 = 256 0,000064s = 0,016384 s Problema: O T/C0 deveria contar 1s. 0,016384 s 32
Exercício: Resolução Alternativa 02: Utilizar vários ciclos do temporizador para contar 1s. 1 = 61,035 61 ciclos do temporizador 0,016384 É necessário ocorrer 61 overflow (término do ciclo do temporizador) para contar 1s. 0,016384 s ~ 1,0 s 33
Exercício: Resolução Como identificar o overflow?? O bit TOV0 do registrador TIFR0 indica quando ocorre um overflow. 34
Exercício: Resolução Configurando o pino do LED e o temporizador T/C0; 35
Exercício: Resolução Esperar 61 estouros do overflow (1 segundo) para alterar o valor do LED; 36
Referências Datasheet: ATMega328, Atmel. Datasheet: PIC18F45K20, Microchip. Charles Borges de Lima. Os poderosos ucontroladores AVR. Apostila. IFSC, 2009. 37
Dúvidas? Dúvidas por email: heitorm@dca.ufrn.br 38