quarta-feira, setembro 25, 2019

Timer1 do ATmega328 - Parte 2

Continuando o nosso estudo do funcionamento e programação do Timer1, vamos examinar o modo de operação. Como vimos na primeira parte, o coração do Timer1 é um contador, que é atualizado conformes os pulsos de um clock. O modo de operação define a sequência de contagem e o que acontece com os pinos controlados pelo Timer1. Neste post vamos nos concentrar nos modos "não PWM" (que ficam para para um post específico).


A seleção do modo de funcionamento é feita através de dois conjuntos de bits nos registradores TCCR1A e TCCR1B.

O primeiro conjunto são os 4 bits  do WGM - Waveform Generation Mode, que afetam a sequência de contagem:


Os quatro bits permitem definir 16 modos (0 a 15). O modo 0 é o modo "normal", os modos 1, 2, 3, 10 e 11 são chamados de "PWM Phase Correct", os modos 4 e 12 são chamados de CTC (Clear Timer on Compare), os modos 5, 6, 7, 14 e 15 são chamados "Fast PWM", os mods 8 e 9 são chamados "PWM Phase and Frequency Correct". O modo 13 é reservado e não deve ser usado.

Modo WGM13 WGM12 WGM11 WGM10 Modo                       TOP
  0     0     0     0     0  Normal                     0xFFFF
  1     0     0     0     1  PWM Phase Correct, 8 bits  0xFF
  2     0     0     1     0  PWM Phase Correct, 9 bits  0x1FF
  3     0     0     1     1  PWM Phase Correct, 10 bits 0x3FF
  4     0     1     0     0  CTC                        OCR1A
  5     0     1     0     1  Fast PWM, 8 bits           0xFF
  6     0     1     1     0  Fast PWM, 9 bits           0x1FF
  7     0     1     1     1  Fast PWM, 10 bits          0x3FF
  8     1     0     0     0  PWM Phase and Freq Correct ICR1
  9     1     0     0     1  PWM Phase and Freq Correct OCR1A
 10     1     0     1     0  PWM Phase Correct          ICR1
 11     1     0     1     1  PWM Phase Correct          OCR1A
 12     1     1     0     0  CTC                        ICR1
 13     1     1     0     1  reservado
 14     1     1     1     0  Fast PWM                   ICR1
 15     1     1     1     1  Fast PWM                   OCR1A

Na tabela acima, TOP é o valor máximo para a contagem.

O segundo conjunto são os quatro bits COM (Compare Output Mode) do TCCR1B. O Timer1 tem dois módulos de comparação (A e B), cada um podendo controlar um pino. O pino OC1A é controlado pelos bits COM1A1 e COM1A0; O pino OC1B é controlado pelos bits COM1B1 e COM1B0.


Quando os dois bits COM associados a um pino estão em zero, o Timer1 não controla o pino, permitindo o seu uso normal em outras funções. O significado das outras combinações dependem do WGM.

Modo Normal

O modo normal é o mais simples: o contador é incrementado a cada clock voltando a 0 após 0xFFFF. Quando o contador dá a volta, o bit TOV (timer overflow) do registrador TIFR1 é setado, o que pode gerar uma interrupção (interrupções serão objeto de um outro post).

As unidades de comparação podem ser usadas neste modo. Quando a contagem atingir o valor em OCR1A ou OCR1B, o bit correspondente no registrador TIFR1 (OCFA e OCFB) é setado, o que pode gerar uma interrupção. Se os bits COM forem diferentes de zero, será também mudado o estado do pino correspondente (OC1A e OC1B):

COM1x1 COM1x0 Ação
  0      1    Inverte o nível do pino
  1      0    Coloca o pino no nível baixo
  1      1    Coloca o pino no nível alto

O modo normal é útil quando queremos contar um tempo, diretamente pela leitura do contador ou usando a unidade de captura.

Modos CTC

Os modos CTC são semelhantes ao normal, porém a contagem volta a zero quando o contador atingir o valor em OCR1A (modo 4) ou ICR1A (modo 12). Quando o contador dá a volta é ligado o bit OCF1A ou ICF1 do registrador TIFR1 é ligado, o que pode gerar uma interrupção.

As unidades de comparação funcionam da mesma forma que no modo normal.

Os modos CTC são úteis para gerar interrupções periódicas ou geração simples de sinais nos pinos OC1A ou OC1B


Nenhum comentário: