Franzininho DIY – Timer0

Nesse exemplos vamos focar no uso do Timer0 como temporizador para gerar delay.

Os timers são periféricos muito importantes nos microcontroladores. Podemos usá-los para temporização, contagem de eventos, PWM, medir pulsos externos, etc. O ATtiny85 possui 2 timers, chamados de Timer0 e Timer1. Nesse exemplos vamos focar no uso do Timer0 como temporizador.

Características do Timer0

O Timer0 é um módulo temporizador/contador de 8 bits de uso geral. Isso significa que ele pode contar de 0 a 255. A funcionalidade de temporização pode ser estendida ainda mais usando os periféricos de comparação, que permitem que o temporizador conte eventos, gere sinais PWM e assim por diante. Assim é possível gerar temporizações precisas, ondas e sinais PWM independentes da CPU.

A figura a seguir exibe o diagrama de blocos simplificado do Timer0:

image 42

Resumo de recursos do Timer0

  • Duas unidades de comparação de saída independentes;
  • Registradores de comparação de saída com buffer duplo;
  • Limpa cronômetro na comparação de correspondência (recarregamento automático);
  • Modulador de largura de pulso com correção de fase (PWM) livre de glitch;
  • Período PWM variável;
  • Gerador de frequência;
  • Três fontes de interrupção independentes (TOV0, OCF0A e OCF0B);

Usando o Timer0 como temporizador

Nesse exemplos vamos usar o Timer0 para gerar um delay de 1s para piscar um LED.

Recursos necessários

  • Placa Franzininho DIY(com Micronucleus)
  • LED
  • Resistor 470 Ohms
  • Jumpers
  • Computador com as ferramentas de software instaladas

Passos para configurar o Timer0 como temporizador

Passo 1: Configurar o Timer0 para trabalhar no modo normal. Nesse modo o timer iniciará a contagem em 0 e irá até máximo de 255. Quando atingido o máximo é gerado um flag de sinalização de overflow e o timer volta a contar a partir do zero.

Para configurar o modo de operação normal, devemos configurar o registrador TCCR0A – Timer/Counter Control Register A da seguinte forma:

  • COM0A[1:0] e COM0B[1:0] = 0
image 39
  • WGM0[1:0] = 0 e TCCR0B – WGM02 = 0
image 40

Deve-se escrever o seguinte valor em TCCR0A – Timer/Counter Control Register A:

TCCR0A = 0b00000000;

Passo 2: Ajustar o prescaler do clock interno para 1024:

Para ajustar o prescale precisamos configurar os bits CS02,CS01 e CS00 do TCCR0B:

  • TCCR0B – CS0[2:0]
image 41

Deve-se escrever o seguinte valor em TCCR0B – Timer/Counter Control Register B:

TCCR0B = 0b00000101;

Calculo do delay

Estamos trabalhando com o clock interno do ATtiny85 em 16.5Mhz. Essa é a fonte de clock para o Timer0 em modo de operação normal. Como selecionamos o prescaler para dividir o clock por 1024, temos o incremento do timer0 em:

  • tempo por incremento do Timer0 = 1/(16.5M/1024) = 62 us

Assim, o tempo para o Timer0 estourar (overflow) é:

  • tempo para o Timer0 estourar = 62us x 256 = 15,89ms

Portanto, para ter um delay de 1 segundo precisamos ter:

  • quantidade de overflows do timer0 = 1/15,89ms ≃ 63 vezes

Passos para monitorar o overflow do timer e gerar o delay de 1s

  • Passo 0: Colocar TCNT0 em zero.
  • Passo 1: Aguardar a contagem do Timer0 verificando quando TOV0 vai para 1.
  • Passo 2: Limpar a flag TOV0 escrevendo 1 nela (Isso mesmo escrevendo 1).
  • Passo 3: Repetir passos 1 e 2, 63 vezes para atingir 1 segundo.
  • Passo 4: Passou um segundo – Inverter LED

Código exemplo

Simulação do exemplo

O exemplo acima pisca o LED em intervalos de 1s. Fizemos a configuração do Timer0 para operar no modo normal e com divisor de 1024. Para gerar o delay de 1s foi necessário obter 63 overflows. Após as 63 contagens de overflow é invertido o valor do PORTB1, que está ligado o LED. A configuração do pino PB1 como saída foi feito colocando o bit1 de DDRB em 1.

Projeto disponível em: https://github.com/Franzininho/exemplos-avr-libc

Outros artigos da série

<< Franzininho DIY – Instrumento musical com BuzzerFranzininho DIY – Timer 0 com Interrupção >>

Engenheiro, especialista em sistemas embarcados. Hoje é diretor de operações do portal Embarcados, onde trabalha para levar conteúdos de eletrônica, sistemas embarcados e IoT para o Brasil.

Também atua no ensino eletrônica e programação. É entusiastas do movimento maker, da cultura DIY e do compartilhamento de conhecimento, publica diversos artigos sobre eletrônica e projetos open hardware.

Com iniciativas como o projeto Franzininho e projetos na área de educação, leva a cultura maker para o Brasil capacitando e incentivando professores e alunos a usarem tecnologia em suas vidas. Participou da residência hacker 2018 no Red Bull Basement.

Notificações
Notificar
guest
1 Comentário
recentes
antigos mais votados
Inline Feedbacks
View all comments
Fabiano
Fabiano
04/08/2021 07:18

Parabéns pelo desenvolvimento.

WEBINAR

Visão Computacional para a redução de erros em processos manuais

DATA: 23/09 ÀS 17:00 H