Você está na página 1de 24

16.

16-bit Timer/Counter1 with PWM

16.1 Características

• Design de 16 bits verdadeiro (ou seja, permite PWM de 16 bits)


• Duas unidades de comparação de saída independentes
• Registros de comparação de saída com buffer duplo
• Uma unidade de captura de entrada
• Cancelador de ruído de captura de entrada
• Limpar o cronômetro na correspondência de comparação (recarregamento automático)
• Modulador de largura de pulso (PWM) sem falhas e com correção de fase
• Período PWM Variável
• Gerador de frequência
• Contador de Eventos Externo
• Quatro fontes de interrupção independentes (TOV1, OCF1A, OCF1B e ICF1)

16.2 Visão geral

A unidade Timer/Contador de 16 bits permite temporização precisa da execução do programa


(gerenciamento de eventos), geração de ondas, e medição de temporização de sinal. A maioria das
referências a registradores e bits nesta seção são escritas na forma geral. Um “n” minúsculo
substitui o Número do Timer/Contador e um “x” minúsculo substitui o canal da unidade de
Comparação de Saída. No entanto, ao usar o registrador ou bit define em um programa, a forma
precisa deve ser usada, ou seja, TCNT1 para acessar Valor do contador Timer/Counter1 e assim por
diante. Um diagrama de blocos simplificado do Timer/Contador de 16 bits é mostrado na
Figura 16-1. Para a colocação real de E/S pinos, consulte ”Pinagem
ATmega48A/PA/88A/PA/168A/PA/328/P” na página 12. Registros de E/S acessíveis à CPU,
incluindo bits de E/S e pinos de E/S, são mostrados em negrito. O registro de E/S específico do
dispositivo e as localizações dos bits estão listados em a ”Descrição do Registro” na página 140. O
bit PRTIM1 em ”PRR – Power Reduction Register” na página 54 deve ser escrito em zero para
habilitar Módulo Timer/Counter1.

Figure 16-1. 16-bit Timer/Counter Block Diagram(1)


Note: 1. Refer to Figure 1-1 on page 12, Table 14-3 on page 91 and Table 14-9 on page 97 for
Timer/Counter1 pin placement and description.

16.2.1 Registros

O temporizador/contador (TCNT1), registradores de comparação de saída (OCR1A/B) e registrador


de captura de entrada (ICR1) são todos registradores de 16 bits. Procedimentos especiais devem ser
seguidos ao acessar os registradores de 16 bits. Esses procedimentos são descritos na seção
”Acessando registradores de 16 bits” na página 122. Os registradores de controle do
temporizador/contador (TCCR1A/B) são registradores de 8 bits e não possuem restrições de acesso
à CPU. Pedidos de interrupção (abreviados para Int.Req. na figura) os sinais são todos visíveis no
registrador de sinalização de interrupção do temporizador (TIFR1). Todas as interrupções são
individualmente mascarado com o Registro de Máscara de Interrupção do Temporizador (TIMSK1).
TIFR1 e TIMSK1 não são mostrados na figura. O Timer/Contador pode ser cronometrado
internamente, através do prescaler, ou por uma fonte externa de clock no pino T1. O bloco lógico
Clock Select controla qual fonte de clock e borda o Timer/Counter usa para incrementar (ou
decremento) seu valor. O Timer/Contador fica inativo quando nenhuma fonte de relógio é
selecionada. A saída do Clock A lógica selecionada é chamada de relógio do temporizador (clkT1).
Os Registros de Comparação de Saída com buffer duplo (OCR1A/B) são comparados com o valor
do Timer/Contador tempo. O resultado da comparação pode ser usado pelo Waveform Generator
para gerar um PWM ou variável saída de frequência no pino de comparação de saída (OC1A/B).
Consulte ”Unidades de comparação de saída” na página 128. O evento compare match também
definirá o sinalizador Compare Match (OCF1A/B), que pode ser usado para gerar um Solicitação de
interrupção de comparação de saída. O Registro de Captura de Entrada pode capturar o valor do
Timer/Contador em um determinado evento externo (acionado por borda) em no pino de captura de
entrada (ICP1) ou nos pinos do comparador analógico (consulte ”Comparador analógico” na página
243)

A unidade de captura de entrada inclui uma unidade de filtragem digital (noise canceler) para
reduzir a chance de captura picos de ruído. O valor TOP, ou valor máximo do Timer/Contador, pode
em alguns modos de operação ser definido pelo OCR1A Register, o ICR1 Register, ou por um
conjunto de valores fixos. Ao usar OCR1A como valor TOP em um PWM modo, o registro OCR1A
não pode ser usado para gerar uma saída PWM. No entanto, o valor TOP será neste caso seja
armazenado em buffer duplo, permitindo que o valor TOP seja alterado em tempo de execução. Se
for necessário um valor TOP fixo, o O Registro ICR1 pode ser usado como alternativa, liberando o
OCR1A para ser usado como saída PWM.

16.2.2 Definições

As seguintes definições são usadas extensivamente em toda a seção:

BOTTOM
O contador atinge o BOTTOM quando se torna 0x0000.
MAX
O contador atinge seu MAXimum quando se torna 0xFFFF (decimal 65535).
TOP
O contador atinge o TOP quando se torna igual ao valor mais alto na contagem seqüência. O
valor TOP pode ser atribuído a um dos valores fixos: 0x00FF, 0x01FF, ou 0x03FF, ou ao
valor armazenado no registro OCR1A ou ICR1. A tarefa é dependente do modo de operação.

16.3 Acessando registradores de 16 bits

O TCNT1, OCR1A/B e ICR1 são registradores de 16 bits que podem ser acessados pela CPU do
AVR através dos dados de 8 bits ônibus. O registrador de 16 bits deve ser acessado por byte usando
duas operações de leitura ou gravação. Cada temporizador de 16 bits tem um registro único de 8 bits
para armazenamento temporário do byte alto do acesso de 16 bits. O mesmo registro temporário é
compartilhado entre todos os registradores de 16 bits dentro de cada temporizador de 16 bits.
Acessar o byte baixo aciona a leitura de 16 bits ou operação de gravação. Quando o byte baixo de
um registrador de 16 bits é escrito pela CPU, o byte alto armazenado no registrador temporário e o
byte baixo escrito são copiados para o registrador de 16 bits no mesmo ciclo de clock. Quando o
byte baixo de um registrador de 16 bits é lido pela CPU, o byte alto do registrador de 16 bits é
copiado para o registrador temporário no mesmo ciclo de clock em que o byte baixo é lido. Nem
todos os acessos de 16 bits usam o registro temporário para o byte alto. Lendo os registradores de
16 bits OCR1A/B não envolve o uso do registro temporário. Para fazer uma gravação de 16 bits, o
byte alto deve ser escrito antes do byte baixo. Para uma leitura de 16 bits, o byte baixo deve ser lida
antes do byte alto. Os exemplos de código a seguir mostram como acessar os registradores de timer
de 16 bits assumindo que nenhuma interrupção atualiza o registro temporário. O mesmo princípio
pode ser usado diretamente para acessar o OCR1A/B e ICR1 Registros. Observe que ao usar “C”, o
compilador manipula o acesso de 16 bits.
Assembly Code Examples(1)
...
; Set TCNT1 to 0x01FF

ldi r17,0x01
ldi r16,0xFF
out TCNT1H,r17
out TCNT1L,r16

; Read TCNT1 into r17:r16

in r16,TCNT1L
in r17,TCNT1H
...

C Code Examples(1)

unsigned int i;
...
/* Set TCNT1 to 0x01FF */

TCNT1 = 0x1FF;

/*Read TCNT1 into i */

i = TCNT1;
...

Observação: 1. Consulte ”Sobre exemplos de código” na página 17. Para registradores de E/S
localizados em mapa de E/S estendido, as instruções “IN”, “OUT”, “SBIS”, “SBIC”, “CBI” e
“SBI” devem ser substituído por instruções que permitem acesso a E/S estendida. Tipicamente
“LDS” e “STS” combinados com “SBRS”, “SBRC”, “SBR” e “CBR”

O exemplo de código assembly retorna o valor TCNT1 no par de registradores r17:r16. Os


exemplos de código a seguir mostram como fazer uma gravação atômica do conteúdo do Registro
TCNT1. Escrevendo qualquer um dos os registradores OCR1A/B ou ICR1 podem ser feitos usando
o mesmo princípio
Assembly Code Example(1)

TIM16_ReadTCNT1:
; Save global interrupt flag
in r18,SREG
; Disable interrupts
cli
; Read TCNT1 into r17:r16
in r16,TCNT1L
in r17,TCNT1H
; Restore global interrupt flag
out SREG,r18
ret

C Code Example(1)
unsigned int TIM16_ReadTCNT1( void )
{
unsigned char sreg;
unsigned int i;
/* Save global interrupt flag */
sreg = SREG;
/* Disable interrupts */
_CLI();
/* Read TCNT1 into i */
i = TCNT1;
/* Restore global interrupt flag */
SREG = sreg;
return i;
}

Observação: 1. Consulte ”Sobre exemplos de código” na página 17. Para registradores de E/S
localizados em mapa de E/S estendido, as instruções “IN”, “OUT”, “SBIS”, “SBIC”, “CBI” e
“SBI” devem ser substituído por instruções que permitem acesso a E/S estendida. Tipicamente
“LDS” e “STS” combinados com “SBRS”, “SBRC”, “SBR” e “CBR”.

O exemplo de código assembly retorna o valor TCNT1 no par de registradores r17:r16. Os


exemplos de código a seguir mostram como fazer uma gravação atômica do conteúdo do Registro
TCNT1. Escrevendo qualquer um dos os registradores OCR1A/B ou ICR1 podem ser feitos usando
o mesmo princípio.

Assembly Code Example(1)


TIM16_WriteTCNT1:
; Save global interrupt flag
in r18,SREG
; Disable interrupts
cli
; Set TCNT1 to r17:r16
out TCNT1H,r17
out TCNT1L,r16
; Restore global interrupt flag
out SREG,r18
ret
C Code Example(1)
void TIM16_WriteTCNT1( unsigned int i )
{
unsigned char sreg;
unsigned int i;
/* Save global interrupt flag */
sreg = SREG;
/* Disable interrupts */
_CLI();
/* Set TCNT1 to i */
TCNT1 = i;
/* Restore global interrupt flag */
SREG = sreg;
}

Observação: 1. Consulte ”Sobre exemplos de código” na página 17. Para registradores de E/S
localizados em mapa de E/S estendido, as instruções “IN”, “OUT”, “SBIS”, “SBIC”, “CBI” e
“SBI” devem ser substituído por instruções que permitem acesso a E/S estendida. Tipicamente
“LDS” e “STS” combinados com “SBRS”, “SBRC”, “SBR” e “CBR”.

O exemplo de código assembly requer que o par de registradores r17:r16 contenha o valor a ser
gravado em TCNT1.

16.3.1 Reusing the Temporary High Byte Register

Se estiver gravando em mais de um registrador de 16 bits onde o byte alto é o mesmo para todos os
registradores gravados, então o byte alto byte só precisa ser escrito uma vez. No entanto, observe
que a mesma regra de operação atômica descrita anteriormente também se aplica neste caso.

16.4 Timer/Counter Clock Sources

O Timer/Contador pode ser cronometrado por uma fonte de clock interna ou externa. A fonte do
relógio é selecionada por a lógica Clock Select que é controlada pelos bits Clock Select (CS12:0)
localizados no controle Timer/Counter Registrador B (TCCR1B). Para obter detalhes sobre fontes
de relógio e prescaler, consulte ”Timer/Counter0 e Timer/Counter1 Prescalers” na página 147.

16.5 Counter Unit

A parte principal do Timer/Contador de 16 bits é a unidade contadora bidirecional programável de


16 bits. Figura 16-2 mostra um diagrama de blocos do contador e seus arredores.

Figure 16-2. Counter Unit Block Diagram

Descrição do sinal (sinais internos):

Count Incrementa ou diminui TCNT1 em 1.


Direction Selecione entre incremento e decremento.
Clear Limpa TCNT1 (definir todos os bits para zero).
clkT1 Temporizador/Contador.
TOP Sinaliza que TCNT1 atingiu o valor máximo.
BOTTOM Sinaliza que TCNT1 atingiu o valor mínimo (zero).
O contador de 16 bits é mapeado em dois locais de memória de E/S de 8 bits: Counter High
(TCNT1H) contendo a parte superior oito bits do contador e Counter Low (TCNT1L) contendo os
oito bits inferiores. O Registrador TCNT1H pode ser acessado indiretamente pela CPU. Quando a
CPU faz um acesso ao local de I/O TCNT1H, a CPU acessa o registrador temporário de byte alto
(TEMP). O registro temporário é atualizado com o valor TCNT1H quando o TCNT1L é lido e o
TCNT1H é atualizado com o valor do registro temporário quando o TCNT1L é gravado. Isso
permite que a CPU leia ou grave todo o valor do contador de 16 bits em um ciclo de clock por meio
do barramento de dados de 8 bits. É importante observar que existem casos especiais de escrita no
registrador TCNT1 quando o contador é contagem que dará resultados imprevisíveis. Os casos
especiais são descritos nas seções onde são de importância. Dependendo do modo de operação
usado, o contador é zerado, incrementado ou decrementado a cada temporizador relógio (clkT1). O
clkT1 pode ser gerado a partir de uma fonte de clock externa ou interna, selecionada pelo Clock
Select bits (CS12:0). Quando nenhuma fonte de clock é selecionada (CS12:0 = 0) o timer é parado.
No entanto, o valor TCNT1 pode ser acessado pela CPU, independentemente de o clkT1 estar
presente ou não. Uma substituição de gravação da CPU (tem prioridade over) todas as operações de
compensação ou contagem. A sequência de contagem é determinada pela configuração dos bits do
modo Waveform Generation (WGM13:0) localizados nos registradores de controle do
temporizador/contador A e B (TCCR1A e TCCR1B). Existem conexões estreitas entre como o
contador se comporta (contagens) e como as formas de onda são geradas nas saídas de comparação
de saída OC1x. Para obter mais detalhes sobre sequências de contagem avançadas e geração de
formas de onda, consulte ”Modos de operação” na página 131. O sinalizador de estouro do
temporizador/contador (TOV1) é definido de acordo com o modo de operação selecionado pelo
WGM13:0 bits. TOV1 pode ser usado para gerar uma interrupção da CPU.

16.6 Input Capture Unit

O Timer/Contador incorpora uma unidade de Captura de Entrada que pode capturar eventos
externos e dar a eles um carimbo de data/hora indicando a hora da ocorrência. O sinal externo
indicando um evento, ou vários eventos, pode ser aplicado através do pino ICP1 ou,
alternativamente, através da unidade de comparação analógica. Os carimbos de tempo podem então
ser usados para calcular frequência, ciclo de trabalho e outras características do sinal aplicado.
Alternativamente, os carimbos de data e hora podem ser usados para criar um log dos eventos.
A unidade de captura de entrada é ilustrada pelo diagrama de blocos mostrado na Figura 16-3. Os
elementos do bloco diagrama que não fazem parte diretamente da unidade de captura de entrada são
sombreados em cinza. O pequeno “n” no registrador e bit nomes indica o número do
Timer/Contador.

Figure 16-3. Input Capture Unit Block Diagram

Quando ocorre uma alteração do nível lógico (um evento) no pino Input Capture (ICP1),
alternativamente no Analog Saída do comparador (ACO), e esta alteração confirma a configuração
do detector de borda, uma captura será provocado. Quando uma captura é acionada, o valor de 16
bits do contador (TCNT1) é gravado no Input Capture Registro (ICR1). O sinalizador de captura de
entrada (ICF1) é definido no mesmo relógio do sistema quando o valor TCNT1 é copiado no
Registro ICR1. Se ativado (ICIE1 = 1), o sinalizador de captura de entrada gera uma interrupção de
captura de entrada. O sinalizador ICF1 é apagado automaticamente quando a interrupção é
executada. Alternativamente, o sinalizador ICF1 pode ser apagado por software escrevendo um
lógico em sua localização de bit de E/S. A leitura do valor de 16 bits no Input Capture Register
(ICR1) é feita primeiro lendo o byte baixo (ICR1L) e então o byte alto (ICR1H). Quando o byte
baixo é lido, o byte alto é copiado para o byte alto temporariamente registrador (TEMP). Quando a
CPU ler a localização de I/O ICR1H, ela acessará o registrador TEMP. O registro ICR1 só pode ser
gravado ao usar um modo de geração de forma de onda que utiliza o registro ICR1 para definir o
valor TOP do contador. Nestes casos, os bits do modo Waveform Generation (WGM13:0) devem
ser definido antes que o valor TOP possa ser escrito no registrador ICR1. Ao escrever o ICR1
Registre o byte alto deve ser gravado no local I/O ICR1H antes que o byte baixo seja gravado no
ICR1L. Para obter mais informações sobre como acessar os registradores de 16 bits, consulte
”Acessando os registradores de 16 bits” na página 122.

16.6.1 Input Capture Trigger Source

A principal fonte de disparo para a unidade de captura de entrada é o pino de captura de entrada
(ICP1). Timer/Contador1 pode alternativamente, use a saída do comparador analógico como fonte
de disparo para a unidade de captura de entrada. o analógico O comparador é selecionado como
fonte de disparo definindo o bit Analog Comparator Input Capture (ACIC) no Controle de
Comparador Analógico e Registro de Status (ACSR). Esteja ciente de que alterar a fonte do
acionador pode acionar um capturar. O sinalizador de captura de entrada deve, portanto, ser limpo
após a alteração. As entradas do pino de captura de entrada (ICP1) e da saída do comparador
analógico (ACO) são amostradas usando o mesmo técnica como para o pino T1 (Figura 17-1 na
página 147). O detector de borda também é idêntico. No entanto, quando o cancelamento de ruído é
ativado, lógica adicional é inserida antes do detector de borda, o que aumenta o atraso em quatro
ciclos de clock do sistema. Observe que a entrada do cancelador de ruído e detector de borda está
sempre habilitada, a menos que o Timer/Contador é definido em um modo de Geração de Forma de
Onda que usa ICR1 para definir o TOP. Uma captura de entrada pode ser acionada por software
controlando a porta do pino ICP1.

16.6.2 Noise Canceler

O cancelador de ruído melhora a imunidade ao ruído usando um esquema de filtragem digital


simples. A entrada do cancelador de ruído é monitorado em quatro amostras, e todas as quatro
devem ser iguais para alterar a saída que, por sua vez, é usada pelo detector de borda O
cancelamento de ruído é habilitado ao configurar o bit Input Capture Noise Canceler (ICNC1) no
Timer/Counter Control Registrador B (TCCR1B). Quando ativado, o cancelador de ruído introduz
quatro ciclos adicionais de atraso do relógio do sistema desde uma alteração aplicada na entrada, até
a atualização do registrador ICR1. O cancelador de ruído usa o sistema clock e, portanto, não é
afetado pelo prescaler.

16.6.3 Using the Input Capture Unit

O principal desafio ao usar a unidade de captura de entrada é atribuir capacidade de processador


suficiente para lidar com o eventos recebidos. O tempo entre dois eventos é crítico. Se o
processador não leu o valor capturado no ICR1 Registre antes que o próximo evento ocorra, o ICR1
será substituído por um novo valor. Neste caso o resultado da captura será incorreto. Ao usar a
interrupção de captura de entrada, o registro ICR1 deve ser lido o mais cedo no manipulador de
interrupção rotina possível. Mesmo que a interrupção de captura de entrada tenha prioridade
relativamente alta, a interrupção máxima o tempo de resposta depende do número máximo de ciclos
de clock necessários para lidar com qualquer outra interrupção solicitações de. Usando a unidade de
captura de entrada em qualquer modo de operação quando o valor TOP (resolução) é alterado
ativamente durante a operação, não é recomendado. A medição do ciclo de trabalho de um sinal
externo requer que a borda do gatilho seja alterada após cada captura. A alteração da detecção de
borda deve ser feita o mais cedo possível após a leitura do registrador ICR1. Após um mudança de
borda, o sinalizador de captura de entrada (ICF1) deve ser limpo por software (gravando um
sinalizador lógico para o I/O localização do bit). Apenas para medição de frequência, a limpeza do
sinalizador ICF1 não é necessária (se um manipulador de interrupção é usado).
16.7 Output Compare Units

O comparador de 16 bits compara continuamente TCNT1 com o registro de comparação de saída


(OCR1x). Se TCNT é igual a OCR1x, o comparador sinaliza uma correspondência. Uma
correspondência definirá o sinalizador de comparação de saída (OCF1x) na próxima ciclo do
relógio do temporizador. Se ativado (OCIE1x = 1), o sinalizador de comparação de saída gera uma
interrupção de comparação de saída. O Flag OCF1x é apagado automaticamente quando a
interrupção é executada. Alternativamente, o sinalizador OCF1x pode ser zerado pelo software
escrevendo um lógico em seu local de bit de E/S. O Waveform Generator usa a correspondência
sinal para gerar uma saída de acordo com o modo de operação definido pelo modo Waveform
Generation (WGM13:0) bits e bits do modo de saída de comparação (COM1x1:0). Os sinais TOP e
BOTTOM são usados pelo Waveform Gerador para lidar com casos especiais de valores extremos
em alguns modos de operação (consulte ”Modos de Operação” na página 131.) Um recurso especial
da unidade A de Comparação de Saída permite que ela defina o valor TOP do Timer/Contador (isto
é, contador resolução). Além da resolução do contador, o valor TOP define o período de tempo para
as formas de onda geradas pelo gerador de forma de onda. A Figura 16-4 mostra um diagrama de
blocos da unidade de comparação de saída. O pequeno “n” no registrador e nomes de bits indica o
número do dispositivo (n = 1 para Timer/Contador 1) e o “x” indica a unidade de comparação de
saída (A/B). O os elementos do diagrama de blocos que não fazem parte diretamente da unidade de
comparação de saída são sombreados em cinza.

Figure 16-4. Output Compare Unit, Block Diagram

O registro OCR1x é armazenado em buffer duplo ao usar qualquer um dos doze modos de
modulação por largura de pulso (PWM). Para os modos de operação Normal e Clear Timer on
Compare (CTC), o buffer duplo é desabilitado. O buffer duplo sincroniza a atualização do
registrador de comparação OCR1x para TOP ou BOTTOM do sequência de contagem. A
sincronização evita a ocorrência de pulsos PWM assimétricos e de comprimento ímpar, tornando
assim a saída livre de falhas. O acesso ao Registro OCR1x pode parecer complexo, mas não é o
caso. Quando o buffer duplo está ativado, o A CPU tem acesso ao registrador de buffer OCR1x e, se
o buffer duplo estiver desabilitado, a CPU acessará o OCR1x diretamente. O conteúdo do Registro
OCR1x (Buffer ou Compare) só é alterado por uma operação de escrita (o Timer/Contador não
atualiza este registrador automaticamente como o Registrador TCNT1 e ICR1). Portanto OCR1x
não é lido por meio do registro temporário de byte alto (TEMP). No entanto, é uma boa prática ler o
baixo byte primeiro como ao acessar outros registradores de 16 bits. A escrita dos Registros OCR1x
deve ser feita via TEMP Register, pois a comparação de todos os 16 bits é feita continuamente. O
byte alto (OCR1xH) deve ser escrito primeiro. Quando a localização de E/S de byte alto é gravada
pela CPU, o registrador TEMP será atualizado pelo valor gravado. Então, quando o byte inferior
(OCR1xL) for gravado nos oito bits inferiores, o byte superior será copiado para os 8 bits
superiores. bits do buffer OCR1x ou do registrador de comparação OCR1x no mesmo ciclo de clock
do sistema. Para obter mais informações sobre como acessar os registradores de 16 bits, consulte
”Acessando os registradores de 16 bits” na página 122.

16.7.1 Force Output Compare

Nos modos de geração de forma de onda não PWM, a saída correspondente do comparador pode ser
forçada escrevendo um ao bit de Comparação de Saída de Força (FOC1x). Forçar correspondência
de comparação não definirá o sinalizador OCF1x ou recarregar/limpar o temporizador, mas o pino
OC1x será atualizado como se tivesse ocorrido uma correspondência de comparação real (as
configurações de bits COM11:0 definir se o pino OC1x está definido, limpo ou alternado).
16.7.2 Compare Match Blocking by TCNT1 Write

Todas as gravações da CPU no registrador TCNT1 bloquearão qualquer correspondência de


comparação que ocorra no próximo ciclo de clock do timer, mesmo quando o timer está parado.
Este recurso permite que OCR1x seja inicializado com o mesmo valor de TCNT1 sem disparando
uma interrupção quando o relógio Timer/Counter está habilitado.

16.7.3 Using the Output Compare Unit

Como escrever TCNT1 em qualquer modo de operação bloqueará todas as correspondências de


comparação para um ciclo de relógio do temporizador, há riscos envolvidos ao alterar TCNT1 ao
usar qualquer um dos canais de comparação de saída, independente de se o Timer/Contador está
funcionando ou não. Se o valor gravado em TCNT1 for igual ao valor OCR1x, o correspondência
de comparação será perdida, resultando em geração de forma de onda incorreta. Não escreva o
TCNT1 igual a TOP nos modos PWM com valores TOP variáveis. A correspondência de
comparação para o TOP será ignorada e o contador continuará a 0xFFFF. Da mesma forma, não
escreva o valor TCNT1 igual a BOTTOM quando o contador estiver contagem regressiva. A
configuração do OC1x deve ser realizada antes de definir o Data Direction Register para o pino da
porta para saída. A maneira mais fácil de definir o valor OC1x é usar os bits de estroboscópio Force
Output Compare (FOC1x) em Normal modo. O registrador OC1x mantém seu valor mesmo ao
mudar entre os modos de geração de forma de onda. Esteja ciente de que os bits COM1x1:0 não são
armazenados em buffer duplo junto com o valor de comparação. Alterando a Os bits COM1x1:0
entrarão em vigor imediatamente.

16.8 Compare Match Output Unit

Os bits do modo Compare Output (COM1x1:0) têm duas funções. O gerador de forma de onda usa
o COM1x1:0 bits para definir o estado de comparação de saída (OC1x) na próxima correspondência
de comparação. Em segundo lugar, os bits COM1x1:0 controlar a fonte de saída do pino OC1x. A
Figura 16-5 mostra um esquema simplificado da lógica afetada pelo Configuração de bit
COM1x1:0. Os registradores de I/O, bits de I/O e pinos de I/O na figura são mostrados em negrito.
Apenas as partes de os Registros de Controle de Porta de E/S gerais (DDR e PORT) que são
afetados pelos bits COM1x1:0 são mostrados. Ao se referir ao estado OC1x, a referência é para o
registrador OC1x interno, não para o pino OC1x. Se um sistema ocorrer uma redefinição, o
registrador OC1x é redefinido para “0”.

Figure 16-5. Compare Match Output Unit, Schematic

A função geral da porta de E/S é substituída pela comparação de saída (OC1x) do gerador de forma
de onda se qualquer um dos bits COM1x1:0 está definido. No entanto, a direção do pino OC1x
(entrada ou saída) ainda é controlada pelo Data Direction Register (DDR) para o pino da porta. O
bit Data Direction Register para o pino OC1x (DDR_OC1x) deve ser definido como saída antes que
o valor OC1x seja visível no pino. A função de substituição de porta é geralmente independente do
modo Waveform Generation, mas há algumas exceções. Consulte a Tabela 16-1 na página 140,
Tabela 16-2 na página 140 e Tabela 16-3 na página 141 para obter detalhes. O design da lógica do
pino de comparação de saída permite a inicialização do estado OC1x antes que a saída seja
habilitada. Observe que algumas configurações de bit COM1x1:0 são reservadas para determinados
modos de operação. Veja “Descrição do Registro” na página 140. Os bits COM1x1:0 não têm efeito
na unidade de captura de entrada.

16.8.1 Compare Output Mode and Waveform Generation


O Waveform Generator usa os bits COM1x1:0 de forma diferente nos modos normal, CTC e PWM.
Para todos os modos, definir COM1x1:0 = 0 informa ao gerador de forma de onda que nenhuma
ação no registrador OC1x deve ser executada na próxima correspondência de comparação. Para
comparar as ações de saída nos modos não PWM, consulte a Tabela 16-1 na página 140. Para o
modo PWM rápido, consulte a Tabela 16-2 na página 140 e para correção de fase e fase e
frequência o PWM correto consulte a Tabela 16-3 na página 141. Uma alteração do estado dos bits
COM1x1:0 terá efeito na primeira correspondência de comparação após a gravação dos bits. Para
modos não PWM, a ação pode ser forçada a ter efeito imediato usando os bits de estroboscópio
FOC1x.

16.9 Modes of Operation

O modo de operação, ou seja, o comportamento do Timer/Contador e dos pinos de Comparação de


Saída, é definido pelo combinação dos bits do modo Waveform Generation (WGM13:0) e Compare
Output (COM1x1:0). O Os bits do modo de saída de comparação não afetam a sequência de
contagem, enquanto os bits do modo de geração de forma de onda afetam. Os bits COM1x1:0
controlam se a saída PWM gerada deve ser invertida ou não (PWM invertido ou não invertido).
Para modos não PWM, os bits COM1x1:0 controlam se a saída deve ser definida, desenergizada ou
alterne em uma correspondência de comparação (Consulte “Unidade de saída de correspondência de
comparação” na página 130.) Para obter informações detalhadas sobre temporização, consulte
”Diagramas de temporização do temporizador/contador” na página 138.

16.9.1 Normal Mode

O modo de operação mais simples é o modo Normal (WGM13:0 = 0). Neste modo, a direção da
contagem é sempre ativo (incrementando) e nenhuma limpeza do contador é executada. O contador
simplesmente supera quando passa seu valor máximo de 16 bits (MAX = 0xFFFF) e, em seguida,
reinicia de BOTTOM (0x0000). Em operação normal o O sinalizador de estouro do
temporizador/contador (TOV1) será definido no mesmo ciclo do relógio do temporizador quando o
TCNT1 se tornar zero. O sinalizador TOV1 neste caso se comporta como um 17º bit, exceto que é
apenas definido, não apagado. No entanto, combinado com a interrupção de estouro do
temporizador que limpa automaticamente o sinalizador TOV1, a resolução do temporizador pode
ser aumentada por Programas. Não há casos especiais a serem considerados no modo Normal, um
novo valor de contador pode ser escrito a qualquer momento. A unidade de captura de entrada é
fácil de usar no modo normal. No entanto, observe que o intervalo máximo entre os eventos
externos não devem exceder a resolução do contador. Se o intervalo entre os eventos for muito
longo, a interrupção de estouro do temporizador ou o prescaler deve ser usado para estender a
resolução para a unidade de captura. As unidades de comparação de saída podem ser usadas para
gerar interrupções em um determinado momento. Usando a comparação de saída para gerar formas
de onda no modo Normal não é recomendado, pois isso ocupará muito tempo da CPU.

16.9.2 Clear Timer on Compare Match (CTC) Mode

No modo Clear Timer on Compare ou CTC (WGM13:0 = 4 ou 12), o registro OCR1A ou ICR1 é
usado para
manipular a resolução do contador. No modo CTC, o contador é zerado quando o valor do contador
(TCNT1)
corresponde a OCR1A (WGM13:0 = 4) ou a ICR1 (WGM13:0 = 12). O OCR1A ou ICR1 definem
o topo
valor para o contador, portanto também sua resolução. Este modo permite maior controle da saída
de correspondência de comparação
frequência. Também simplifica a operação de contagem de eventos externos.
O diagrama de tempo para o modo CTC é mostrado na Figura 16-6. O valor do contador (TCNT1)
aumenta até que um
a correspondência de comparação ocorre com OCR1A ou ICR1 e, em seguida, o contador (TCNT1)
é limpo.

Figure 16-6. CTC Mode, Timing Diagram

Uma interrupção pode ser gerada sempre que o valor do contador atingir o valor TOP usando o
OCF1A
ou ICF1 Flag de acordo com o registrador utilizado para definir o valor TOP. Se a interrupção
estiver habilitada, a interrupção
rotina do manipulador pode ser usada para atualizar o valor TOP. No entanto, alterar o TOP para um
valor próximo a
BOTTOM quando o contador está rodando com nenhum ou um valor prescaler baixo deve ser feito
com cuidado, pois o CTC
O modo não possui o recurso de buffer duplo. Se o novo valor gravado em OCR1A ou ICR1 for
menor que o
valor atual de TCNT1, o contador perderá a correspondência de comparação. O contador terá então
que contar até o
valor máximo (0xFFFF) e recomeçar começando em 0x0000 antes que a correspondência de
comparação possa ocorrer. Em muitos
casos, esse recurso não é desejável. Uma alternativa será então usar o modo PWM rápido usando
OCR1A para
definindo TOP (WGM13:0 = 15) já que o OCR1A então será buffer duplo.
Para gerar uma saída de forma de onda no modo CTC, a saída OC1A pode ser configurada para
alternar seu nível lógico em cada
compare a correspondência configurando os bits do modo de saída de comparação para o modo de
alternância (COM1A1:0 = 1). O valor de OC1A será
não será visível no pino da porta, a menos que a direção dos dados para o pino seja definida como
saída (DDR_OC1A = 1). O
a forma de onda gerada terá uma frequência máxima de fOC1A = fclk_I/O/2 quando OCR1A for
definido como zero (0x0000).
A frequência da forma de onda é definida pela seguinte equação:

pagina 132 documento original

A variável N representa o fator prescaler (1, 8, 64, 256 ou 1024).


Quanto ao modo de operação Normal, o sinalizador TOV1 é definido no mesmo ciclo do relógio do
timer que o contador conta
de MAX a 0x0000.

16.9.3 Fast PWM Mode

A Modulação por Largura de Pulso rápida ou o modo PWM rápido (WGM13:0 = 5, 6, 7, 14 ou 15)
fornece uma alta frequência Opção de geração de forma de onda PWM. O PWM rápido difere das
outras opções de PWM por sua inclinação única Operação. O contador conta de BOTTOM para
TOP e reinicia de BOTTOM. Em comparação não inversora Modo de saída, a comparação de saída
(OC1x) é apagada na correspondência de comparação entre TCNT1 e OCR1x e definido em
BAIXO. Na inversão do modo de saída de comparação, a saída é definida como correspondência de
comparação e desmarcada em INFERIOR. Devido à operação de inclinação única, a frequência de
operação do modo PWM rápido pode ser duas vezes maior que a modos PWM corretos de fase e
corretos de fase e frequência que usam operação de inclinação dupla. Esta alta frequência torna o
modo PWM rápido adequado para aplicações de regulação de energia, retificação e DAC. Alta
frequência permite componentes externos fisicamente pequenos (bobinas, capacitores), portanto,
reduz o custo total do sistema.

A resolução PWM para PWM rápido pode ser fixada em 8, 9 ou 10 bits ou definida por ICR1 ou
OCR1A. O a resolução mínima permitida é de 2 bits (ICR1 ou OCR1A definido como 0x0003) e a
resolução máxima é de 16 bits (ICR1 ou OCR1A definido como MAX). A resolução PWM em bits
pode ser calculada usando a seguinte equação:

Fórmula na página 133 do arquivo original

No modo PWM rápido, o contador é incrementado até que o valor do contador corresponda a um
dos valores fixos 0x00FF, 0x01FF ou 0x03FF (WGM13:0 = 5, 6 ou 7), o valor em ICR1
(WGM13:0 = 14) ou o valor em OCR1A (WGM13:0 = 15). O contador é então limpo no seguinte
ciclo de relógio do temporizador. O diagrama de tempo para o jejum O modo PWM é mostrado na
Figura 16-7. A figura mostra o modo PWM rápido quando OCR1A ou ICR1 é usado para definir
PRINCIPAL. O valor TCNT1 está no diagrama de tempo mostrado como um histograma para
ilustrar a operação de inclinação única. O diagrama inclui saídas PWM não invertidas e invertidas.
As pequenas marcas de linha horizontal no TCNT1 inclinações representam correspondências de
comparação entre OCR1x e TCNT1. O sinalizador de interrupção OC1x será definido quando um
ocorre a correspondência de comparação.

Figure 16-7. Fast PWM Mode, Timing Diagram

O sinalizador de estouro do temporizador/contador (TOV1) é definido cada vez que o contador


atinge o TOPO. Além disso, o OC1A ou O sinalizador ICF1 é definido no mesmo ciclo do relógio
do temporizador que TOV1 é definido quando OCR1A ou ICR1 é usado para definir o valor
SUPERIOR. Se uma das interrupções estiver habilitada, a rotina de tratamento de interrupção pode
ser usada para atualizar o TOP e comparar valores. Ao alterar o valor TOP, o programa deve garantir
que o novo valor TOP seja maior ou igual ao valor de todos os registradores de comparação. Se o
valor TOP for menor do que qualquer um dos registros de comparação, uma correspondência de
comparação nunca ocorrerá entre o TCNT1 e o OCR1x. Observe que, ao usar valores TOP fixos, os
bits não utilizados são mascarados para zero quando qualquer um dos Registros OCR1x é gravado.
O procedimento de atualização do ICR1 difere da atualização do OCR1A quando utilizado para
definir o valor TOP. O ICR1 O registrador não tem buffer duplo. Isso significa que se ICR1 for
alterado para um valor baixo quando o contador estiver funcionando com nenhum ou um valor
prescaler baixo, existe o risco de que o novo valor ICR1 escrito seja menor que o valor atual de
TCNT1. O resultado será que o contador perderá a correspondência de comparação no valor TOP. O
contador terá que contar até o valor MAX (0xFFFF) e retornar começando em 0x0000 antes da
comparação correspondência pode ocorrer. O registrador OCR1A, no entanto, tem buffer duplo.
Este recurso permite que a localização de E/S do OCR1A para ser escrito a qualquer momento.
Quando o local de E/S do OCR1A for gravado, o valor gravado será colocado no OCR1A Registro
de Buffer. O OCR1A Compare Register será então atualizado com o valor no Buffer Register no
próximo ciclo do relógio do temporizador, o TCNT1 corresponde ao TOP. A atualização é feita no
mesmo ciclo do relógio do timer que o TCNT1 é limpo e o sinalizador TOV1 é definido. Usar o
registrador ICR1 para definir TOP funciona bem ao usar valores TOP fixos. Ao usar ICR1, o
OCR1A O registrador é gratuito para ser usado para gerar uma saída PWM no OC1A. No entanto,
se a frequência PWM base for alterada ativamente (alterando o valor TOP), usar o OCR1A como
TOP é claramente uma escolha melhor devido à sua recurso de buffer duplo.
No modo PWM rápido, as unidades de comparação permitem a geração de formas de onda PWM
nos pinos OC1x. Configurando o COM1x1:0 bits a três produzirá um PWM invertido e uma saída
PWM não invertida pode ser gerada por configurando COM1x1:0 para dois (consulte a Tabela 16-2
na página 140). O valor real de OC1x só será visível no pino da porta se a direção dos dados para o
pino da porta for definida como saída (DDR_OC1x). A forma de onda PWM é gerada por definir
(ou limpar) o registro OC1x na correspondência de comparação entre OCR1x e TCNT1 e limpar
(ou configuração) o registro OC1x no ciclo do relógio do timer, o contador é zerado (muda de TOP
para BOTTOM). A frequência PWM para a saída pode ser calculada pela seguinte equação:

Fórmula na página 134 do arquivo original

A variável N representa o divisor prescaler (1, 8, 64, 256 ou 1024).


Os valores extremos para o registro OCR1x representam casos especiais ao gerar uma forma de
onda PWM saída no modo PWM rápido. Se o OCR1x for definido igual a BOTTOM (0x0000), a
saída será um pico estreito para cada ciclo de relógio do temporizador TOP+1. Definir o OCR1x
igual a TOP resultará em uma saída alta ou baixa constante (dependendo da polaridade da saída
definida pelos bits COM1x1:0.) Uma saída de forma de onda de frequência (com ciclo de trabalho
de 50%) no modo PWM rápido pode ser obtida configurando OC1A para alterne seu nível lógico
em cada correspondência de comparação (COM1A1:0 = 1). Isso se aplica apenas se OCR1A for
usado para definir o valor TOP (WGM13:0 = 15). A forma de onda gerada terá uma frequência
máxima de fOC1A = fclk_I/O/2 quando OCR1A é definido como zero (0x0000). Este recurso é
semelhante à alternância OC1A no modo CTC, exceto o duplo recurso de buffer da unidade de
Comparação de Saída é habilitado no modo PWM rápido.

16.9.4 Phase Correct PWM Mode

Modulação por largura de pulso correta de fase ou modo PWM correto de fase (WGM13:0 = 1, 2, 3,
10 ou 11) fornece uma opção de geração de forma de onda PWM correta de fase de alta resolução.
O modo PWM correto de fase é, como o modo PWM correto de fase e frequência, baseado em uma
operação de inclinação dupla. O contador conta repetidamente de BOTTOM (0x0000) para TOP e
depois de TOP para BOTTOM. Na saída de comparação não inversora modo, a comparação de
saída (OC1x) é apagada na correspondência de comparação entre TCNT1 e OCR1x enquanto
contagem crescente e definido na correspondência de comparação durante a contagem regressiva.
No modo de comparação de saída invertida, o operação é invertida. A operação de inclinação dupla
tem frequência máxima de operação mais baixa do que a de inclinação única Operação. No entanto,
devido ao recurso simétrico dos modos PWM de inclinação dupla, esses modos são preferidos para
aplicações de controle de motores. A resolução PWM para o modo PWM correto de fase pode ser
fixada em 8, 9 ou 10 bits, ou definida por ICR1 ou OCR1A. A resolução mínima permitida é de 2
bits (ICR1 ou OCR1A definido como 0x0003) e a resolução máxima resolução é de 16 bits (ICR1
ou OCR1A definido como MAX). A resolução PWM em bits pode ser calculada usando o seguinte
equação:

Fórmula na página 134 do arquivo original

No modo PWM de correção de fase, o contador é incrementado até que o valor do contador
corresponda a um dos valores fixos. valores 0x00FF, 0x01FF ou 0x03FF (WGM13:0 = 1, 2 ou 3), o
valor em ICR1 (WGM13:0 = 10) ou o valor em OCR1A (WGM13:0 = 11). O contador atingiu
então o TOP e muda a direção da contagem. o TCNT1 valor será igual a TOP para um ciclo de
clock do temporizador. O diagrama de tempo para o modo PWM correto de fase é mostrado na
Figura 16-8 na página 135. A figura mostra o modo PWM de correção de fase quando OCR1A ou
ICR1 é usado para definir TOP. O valor TCNT1 está no diagrama de tempo mostrado como um
histograma para ilustrar a inclinação dupla Operação. O diagrama inclui saídas PWM não invertidas
e invertidas. As pequenas marcas de linha horizontal nas inclinações TCNT1 representam
comparações entre OCR1x e TCNT1. O sinalizador de interrupção OC1x será definido quando
ocorre uma correspondência de comparação.

Figure 16-8. Phase Correct PWM Mode, Timing Diagram

O sinalizador de estouro do temporizador/contador (TOV1) é definido cada vez que o contador


atinge o BOTTOM. Quando o OCR1A ou ICR1 é usado para definir o valor TOP, o sinalizador
OC1A ou ICF1 é definido de acordo com o mesmo relógio do temporizador ciclo conforme os
Registros OCR1x são atualizados com o valor do buffer duplo (em TOP). Os sinalizadores de
interrupção podem ser usado para gerar uma interrupção cada vez que o contador atinge o valor
TOP ou BOTTOM. Ao alterar o valor TOP, o programa deve garantir que o novo valor TOP seja
maior ou igual ao valor de todos os registradores de comparação. Se o valor TOP for menor do que
qualquer um dos registros de comparação, uma correspondência de comparação nunca ocorrerá
entre o TCNT1 e o OCR1x. Observe que ao usar valores TOP fixos, os bits não utilizados são
mascarados para zero quando qualquer um dos Registros OCR1x é gravado. Como o terceiro
período mostrado na Figura 16-8 em a página 135 ilustra, alterando o TOP ativamente enquanto o
Timer/Contador está funcionando no modo de correção de fase pode resultar em uma saída
assimétrica. O motivo disso pode ser encontrado no momento da atualização do OCR1x Registro.
Como a atualização do OCR1x ocorre no TOP, o período PWM começa e termina no TOP. Isso
implica que o comprimento da inclinação descendente é determinado pelo valor TOP anterior,
enquanto o comprimento da inclinação ascendente é determinado pelo novo valor TOP. Quando
esses dois valores diferem, as duas inclinações do período diferem em comprimento. A diferença de
comprimento dá o resultado assimétrico na saída. Recomenda-se usar o modo correto de fase e
frequência em vez do modo correto de fase quando alterando o valor TOP enquanto o
Timer/Contador está funcionando. Ao usar um valor TOP estático, há praticamente nenhuma
diferença entre os dois modos de operação. No modo PWM com correção de fase, as unidades de
comparação permitem a geração de formas de onda PWM nos pinos OC1x. Contexto os bits
COM1x1:0 a dois produzirão um PWM não invertido e uma saída PWM invertida pode ser gerada
por configurando COM1x1:0 para três (consulte a Tabela 16-3 na página 141). O valor real de
OC1x só será visível no pino da porta se a direção dos dados para o pino da porta for definida como
saída (DDR_OC1x). A forma de onda PWM é gerada por definindo (ou limpando) o registro OC1x
na correspondência de comparação entre OCR1x e TCNT1 quando o contador incrementos e
limpeza (ou configuração) do Registro OC1x na correspondência de comparação entre OCR1x e
TCNT1 quando o contador diminui. A frequência PWM para a saída ao usar PWM correto de fase
pode ser calculada pela seguinte equação:

Fórmula na página 135 do arquivo original

A variável N representa o divisor prescaler (1, 8, 64, 256 ou 1024).


Os valores extremos para o registro OCR1x representam casos especiais ao gerar uma saída de
forma de onda PWM no modo PWM de fase correta. Se o OCR1x for definido igual a BOTTOM, a
saída será continuamente baixa e se definido igual a TOP, a saída será continuamente alta para o
modo PWM não invertido. Para PWM invertido, o saída terá os valores lógicos opostos. Se OCR1A
for usado para definir o valor TOP (WGM13:0 = 11) e COM1A1:0 = 1, a saída OC1A alternará com
um ciclo de trabalho de 50%.
16.9.5 Phase and Frequency Correct PWM Mode
Modulação por largura de pulso correta de fase e frequência ou modo PWM correto de fase e
frequência (WGM13:0 = 8 ou 9) fornece uma opção de geração de forma de onda PWM correta de
fase e frequência de alta resolução. O modo PWM correto de fase e frequência é, como o modo
PWM correto de fase, baseado em uma inclinação dupla Operação. O contador conta repetidamente
de BOTTOM (0x0000) para TOP e depois de TOP para BOTTOM. Em modo de comparação de
saída não inversora, a comparação de saída (OC1x) é limpa na correspondência de comparação
entre TCNT1 e OCR1x durante a contagem crescente e definido na correspondência de comparação
durante a contagem regressiva. Ao inverter comparar Modo de saída, a operação é invertida. A
operação de inclinação dupla fornece uma frequência máxima de operação mais baixa em
comparação com a operação de inclinação única. No entanto, devido ao recurso simétrico dos
modos PWM de inclinação dupla, esses modos são preferidos para aplicações de controle de motor.
A principal diferença entre a fase correta e o modo PWM correto de fase e frequência é o tempo o
registro OCR1x é atualizado pelo registro de buffer OCR1x, (consulte a Figura 16-8 na página 135
e a Figura 16-9 na página 137). A resolução PWM para o modo PWM correto de fase e frequência
pode ser definida por ICR1 ou OCR1A. A resolução mínima permitida é de 2 bits (ICR1 ou OCR1A
definido como 0x0003) e a resolução máxima é de 16 bits (ICR1 ou OCR1A definido como MAX).
A resolução PWM em bits pode ser calculada usando a seguinte equação:
Fórmula na página 136 do arquivo original

No modo PWM correto de fase e frequência, o contador é incrementado até que o valor do contador
corresponda a o valor em ICR1 (WGM13:0 = 8) ou o valor em OCR1A (WGM13:0 = 9). O
contador atingiu então o TOP e muda a direção da contagem. O valor TCNT1 será igual a TOP para
um ciclo de clock do temporizador. O diagrama de temporização para o modo PWM correto de fase
e correto de frequência é mostrado na Figura 16-9 na página 137. A figura mostra o modo PWM
correto de fase e frequência quando OCR1A ou ICR1 é usado para definir o TOP. O valor TCNT1
está no diagrama de tempo mostrado como um histograma para ilustrar a operação de inclinação
dupla. O diagrama inclui saídas PWM não invertidas e invertidas. As pequenas marcas de linha
horizontal nas encostas TCNT1 representam comparações entre OCR1x e TCNT1. O sinalizador de
interrupção OC1x será definido quando uma comparação correspondência ocorre.

Figure 16-9. Phase and Frequency Correct PWM Mode, Timing Diagram

O sinalizador de estouro do temporizador/contador (TOV1) é definido no mesmo ciclo do relógio


do temporizador que os registros OCR1x são atualizado com o valor do buffer duplo (no
BOTTOM). Quando OCR1A ou ICR1 é usado para definir o TOP valor, o sinalizador OC1A ou
ICF1 é definido quando TCNT1 atinge o TOP. Os sinalizadores de interrupção podem então ser
usados para gerar uma interrupção cada vez que o contador atingir o valor TOP ou BOTTOM. Ao
alterar o valor TOP, o programa deve garantir que o novo valor TOP seja maior ou igual ao valor de
todos os registradores de comparação. Se o valor TOP for menor do que qualquer um dos registros
de comparação, uma correspondência de comparação nunca ocorrerá entre o TCNT1 e o OCR1x.
Como mostra a Figura 16-9 na página 137, a saída gerada é, em contraste com o modo correto de
fase, simétrica em todos os períodos. Como os registros OCR1x são atualizados em BOTTOM, o
comprimento da subida e da descida inclinações serão sempre iguais. Isso fornece pulsos de saída
simétricos e, portanto, a frequência correta. Usar o registrador ICR1 para definir TOP funciona bem
ao usar valores TOP fixos. Ao usar ICR1, o OCR1A O registrador é gratuito para ser usado para
gerar uma saída PWM no OC1A. No entanto, se a frequência PWM base for alterado ativamente
alterando o valor TOP, usando o OCR1A como TOP é claramente uma escolha melhor devido à sua
recurso de buffer duplo. No modo PWM correto de fase e frequência, as unidades de comparação
permitem a geração de formas de onda PWM no pinos OC1x. Definir os bits COM1x1:0 para dois
produzirá um PWM não invertido e uma saída PWM invertida pode podem ser gerados definindo
COM1x1:0 como três (consulte a Tabela 16-3 na página 141). O valor real de OC1x só será ser
visível no pino da porta se a direção dos dados para o pino da porta for definida como saída
(DDR_OC1x). A forma de onda PWM é gerado pela configuração (ou limpeza) do Registro OC1x
na correspondência de comparação entre OCR1x e TCNT1 quando o contador aumenta e limpando
(ou definindo) o registro OC1x na correspondência de comparação entre OCR1x e TCNT1 quando
o contador diminui. A frequência PWM para a saída ao usar fase e frequência O PWM correto pode
ser calculado pela seguinte equação:

Fórmula na página 136 do arquivo original

A variável N representa o divisor prescaler (1, 8, 64, 256 ou 1024).


Os valores extremos para o registro OCR1x representam casos especiais ao gerar uma forma de
onda PWM saída no modo PWM de fase correta. Se o OCR1x for definido igual a BOTTOM, a
saída será continuamente baixo e se definido igual a TOP, a saída será definida como alta para o
modo PWM não invertido. Para PWM invertido, a saída terá os valores lógicos opostos. Se OCR1A
for usado para definir o valor TOP (WGM13:0 = 9) e COM1A1:0 = 1, a saída OC1A alternará com
um ciclo de trabalho de 50%.

16.10 Timer/Counter Timing Diagrams

O Timer/Contador é um projeto síncrono e o relógio do timer (clkT1) é, portanto, mostrado como


um relógio ativado sinal nas figuras a seguir. Os números incluem informações sobre quando os
sinalizadores de interrupção são definidos e quando os O registro OCR1x é atualizado com o valor
do buffer OCR1x (somente para modos que utilizam buffer duplo). Figura 16-10 mostra um
diagrama de tempo para a configuração de OCF1x.

Figure 16-10. Timer/Counter Timing Diagram, Setting of OCF1x, no Prescaling

Figure 16-11 shows the same timing data, but with the prescaler enabled

Figure 16-11. Timer/Counter Timing Diagram, Setting of OCF1x, with Prescaler (fclk_I/O/8)

A Figura 16-12 na página 139 mostra a sequência de contagem próxima ao TOP em vários modos.
Ao usar fase e frequência correta no modo PWM, o registro OCR1x é atualizado na parte inferior.
Os diagramas de temporização serão os mesmo, mas TOP deve ser substituído por BOTTOM, TOP-
1 por BOTTOM+1 e assim por diante. A mesma renomeação se aplica para modos que definem o
sinalizador TOV1 em BOTTOM.

Figure 16-12. Timer/Counter Timing Diagram, no Prescaling.

Figure 16-13 shows the same timing data, but with the prescaler enabled.

Figure 16-13. Timer/Counter Timing Diagram, with Prescaler (fclk_I/O/8)


16.11 Register Description

16.11.1 TCCR1A – Timer/Counter1 Control Register A

TCCR1A
Bit 7 6 5 4 3 2 1 0
(0x80) COM1A1 COM1A0 COM1B1 COM1B0 – – WGM11 WGM10
Read/ R/W R/W R/W R/W R R R/W R/W
Write
Initial 0 0 0 0 0 0 0 0
Value

• Bit 7:6 – COM1A1:0: Compare Output Mode for Channel A

• Bit 5:4 – COM1B1:0: Compare Output Mode for Channel B

O COM1A1:0 e o COM1B1:0 controlam o comportamento dos pinos de comparação de saída


(OC1A e OC1B, respectivamente). Se um ou ambos os bits COM1A1:0 são gravados em um, a
saída OC1A substitui a funcionalidade normal da porta de o pino de E/S ao qual está conectado. Se
um ou ambos os bits COM1B1:0 forem gravados em um, a saída OC1B substitui a funcionalidade
de porta normal do pino de E/S ao qual está conectado. No entanto, observe que o registrador de
direção de dados O bit (DDR) correspondente ao pino OC1A ou OC1B deve ser definido para
habilitar o driver de saída. Quando o OC1A ou OC1B está conectado ao pino, a função dos bits
COM1x1:0 é dependente do Configuração de WGM13:0 bits. A Tabela 16-1 mostra a
funcionalidade do bit COM1x1:0 quando os bits WGM13:0 são definidos para um Modo normal ou
CTC (não-PWM).

Table 16-1. Compare Output Mode, non-PWM

COM1A1/COM1B1 COM1A0/COM1B0
Descrição
0 0 Operação normal da porta, OC1A/OC1B
desconectado.
0 1 Alternar OC1A/OC1B na correspondência de
comparação.
1 0 ? Limpe OC1A/OC1B na correspondência de
comparação (defina a saída para nível baixo).?
1 1 ? Defina OC1A/OC1B na correspondência de
comparação (defina a saída para alto nível).?
A Tabela 16-2 mostra a funcionalidade do bit COM1x1:0 quando os bits WGM13:0 são definidos
para o modo PWM rápido
Table 16-2. Compare Output Mode, Fast PWM(1)

COM1A1/COM1B1 COM1A0/COM1B0
Descrição
0 0 Operação normal da porta, OC1A/OC1B desconectado
0 1 WGM13:0 = 14 ou 15: Alterna OC1A na comparação
Correspondência, OC1B desconectado (operação de
porta normal). Para todas as outras configurações
WGM1, operação normal da porta, OC1A/OC1B
desconectado.
1 0 Limpar OC1A/OC1B na correspondência de
comparação, definir OC1A/OC1B em BOTTOM
(modo não inversor)
1 1 Set OC1A/OC1B on Compare Match, clear
OC1A/OC1B at BOTTOM (inverting mode)
Nota: 1. Um caso especial ocorre quando OCR1A/OCR1B é igual a TOP e COM1A1/COM1B1 é
definido. Neste caso o a correspondência de comparação é ignorada, mas a definição ou limpeza é
feita em BOTTOM. Consulte ”Modo PWM rápido” na página 132 para mais detalhes.

A Tabela 16-3 mostra a funcionalidade do bit COM1x1:0 quando os bits WGM13:0 são definidos
para a fase correta ou o fase e frequência corretas, modo PWM.

Table 16-3. Compare Output Mode, Phase Correct and Phase and Frequency Correct PWM(1)

COM1A1/COM1B1 COM1A0/COM1B0
Descrição
0 0 Operação normal da porta, OC1A/OC1B
desconectado.
0 1 WGM13:0 = 9 ou 11: Alternar OC1A na comparação
Correspondência, OC1B desconectado (operação de
porta normal). Para todas as outras configurações
WGM1, operação normal da porta, OC1A/OC1B
desconectado.
1 0 Limpe OC1A/OC1B na correspondência de
comparação durante a contagem crescente. Defina
OC1A/OC1B na correspondência de comparação
quando contagem regressiva.
1 1 Defina OC1A/OC1B na correspondência de
comparação durante a contagem crescente. Limpar
OC1A/OC1B na correspondência de comparação ao
fazer a contagem regressiva.
Nota: 1. Um caso especial ocorre quando OCR1A/OCR1B é igual a TOP e COM1A1/COM1B1 é
definido. Consulte ”Fase correta Modo PWM” na página 134 para obter mais detalhes.
• Bit 1:0 – WGM11:0: Waveform Generation Mode

Combinados com os bits WGM13:2 encontrados no registrador TCCR1B, esses bits controlam a
sequência de contagem de o contador, a fonte para o valor máximo (TOP) do contador e que tipo de
geração de forma de onda a ser usada, consulte a Tabela 16-4. Os modos de operação suportados
pela unidade Timer/Contador são: Modo normal (contador), Clear Timer no modo Compare match
(CTC) e três tipos de modos de modulação por largura de pulso (PWM). (Consulte ”Modos de
Operação” na página 131).
Table 16-4. Waveform Generation Mode Bit Description(1)

MODO WGM13 WGM12 WGM11 WGM10 Timer/Counter TOP Atualizaç flag TOV1
(CTC1) (PWM11) (PWM10) Mode of ão de definir em
Operation OCR1x
em
0 0 0 0 0 Normal 0xFFFF imediata MAX
1 0 0 0 1 PWM, 0x00FF TOP BOTTOM
Phase Correct,
8-bit
2 0 0 1 0 PWM, 0x01FF TOP BOTTOM
Phase Correct,
9-bit
3 0 0 1 1 PWM, 0x03FF TOP BOTTOM
Phase Correct,
10-bit
4 0 1 0 0 CTC OCR1A imediata MAX
5 0 1 0 1 Fast PWM, 8-bit 0x00FF BOTTOM TOP
6 0 1 1 0 Fast PWM, 9-bit 0x01FF BOTTOM TOP
7 0 1 1 1 Fast PWM, 10-bit 0x03FF BOTTOM TOP
8 1 0 0 0 PWM, Phase and ICR1 BOTTOM BOTTOM
Frequency Correct
9 1 0 0 1 PWM, Phase and OCR1A BOTTOM BOTTOM
Frequency Correct
10 1 0 1 0 PWM, ICR1 TOP BOTTOM
Phase Correct
11 1 0 1 1 PWM, OCR1A TOP BOTTOM
Phase Correct
12 1 1 0 0 CTC ICR1 imediata MAX
13 1 1 0 1 (Reserved) – – –
14 1 1 1 0 Fast PWM ICR1 BOTTOM TOP
15 1 1 1 1 Fast PWM OCR1A BOTTOM TOP
Nota: 1. Os nomes de definição de bit CTC1 e PWM11:0 estão obsoletos. Use as definições
WGM12:0. No entanto, a funcionalidade e localização desses bits são compatíveis com versões
anteriores do temporizador.
16.11.2 TCCR1B – Timer/Counter1 Control Register B
Bit 7 6 5 4 3 2 1 0
(0x81) ICNC1 ICES1 – WGM13 WGM12 CS12 CS11 CS10
Read/Write R/W R/W R R/W R/W R/W R/W R/W
Initial Value 0 0 0 0 0 0 0 0

• Bit 7 – ICNC1: Input Capture Noise Canceler


Definir esse bit (para um) ativa o Cancelador de ruído de captura de entrada. Quando o
cancelamento de ruído é ativado, o a entrada do pino Input Capture (ICP1) é filtrada. A função de
filtro requer quatro valores iguais sucessivos amostras do pino ICP1 para alterar sua saída. A
captura de entrada é, portanto, atrasada por quatro ciclos do oscilador quando o cancelador de ruído
está ativado.

• Bit 6 – ICES1: Input Capture Edge Select


Este bit seleciona qual borda no pino de captura de entrada (ICP1) é usada para acionar um evento
de captura. Quando o O bit ICES1 é escrito em zero, uma borda descendente (negativa) é usada
como gatilho e quando o bit ICES1 é escrito em um, uma borda ascendente (positiva) acionará a
captura. Quando uma captura é acionada de acordo com a configuração ICES1, o valor do contador
é copiado para a captura de entrada Registro (ICR1). O evento também definirá o Input Capture
Flag (ICF1), e isso pode ser usado para causar um Input Capture Flag Interrupção de captura, se
esta interrupção estiver habilitada. Quando o ICR1 é usado como valor TOP (veja a descrição dos
bits WGM13:0 localizados no TCCR1A e o TCCR1B Register), o ICP1 é desconectado e
consequentemente a função Input Capture é desabilitada.

• Bit 5 – Reserved
Este bit é reservado para uso futuro. Para garantir a compatibilidade com dispositivos futuros, este
bit deve ser escrito em zero quando TCCR1B é escrito.

• Bit 4:3 – WGM13:2: Waveform Generation Mode


Consulte a descrição do registrador TCCR1A.

• Bit 2:0 – CS12:0: Clock Select


Os três bits de Seleção de Relógio selecionam a fonte de relógio a ser usada pelo Timer/Contador,
consulte a Figura 16-10 na página 138 e Figura 16-11 na página 138.

Table 16-5. Clock Select Bit Description


CS12 CS11 CS10 Description
0 0 0 No clock source (Timer/Counter stopped).
0 0 1 clkI/O/1 (No prescaling)
0 1 0 clkI/O/8 (From prescaler)
0 1 1 1 clkI/O/64 (From prescaler)
1 0 0 clkI/O/256 (From prescaler)
1 0 1 clkI/O/1024 (From prescaler)
1 1 0 External clock source on T1 pin. Clock on falling edge.
1 1 1 External clock source on T1 pin. Clock on rising edge.
Se os modos de pinos externos forem usados para o Timer/Counter1, as transições no pino T1 irão
cronometrar o contador mesmo se o pino é configurado como uma saída. Este recurso permite o
controle de software da contagem.
16.11.3 TCCR1C – Timer/Counter1 Control Register C
Bit 7 6 5 4 3 2 1 0
(0x82) FOC1A FOC1B – – – – – –
Read/Write R/W R/W R R R R R R
Initial Value 0 0 0 0 0 0 0 0
• Bit 7 – FOC1A: Force Output Compare for Channel A
• Bit 6 – FOC1B: Force Output Compare for Channel B
Os bits FOC1A/FOC1B só estão ativos quando os bits WGM13:0 especificam um modo não PWM.
Ao escrever um lógico para o bit FOC1A/FOC1B, uma correspondência de comparação imediata é
forçada na unidade de geração de forma de onda. A saída OC1A/OC1B é alterada de acordo com
sua configuração de bits COM1x1:0. Observe que os bits FOC1A/FOC1B são implementados como
estroboscópios. Portanto é o valor presente nos bits COM1x1:0 que determina o efeito de a
comparação forçada. Um estroboscópio FOC1A/FOC1B não gerará nenhuma interrupção nem
limpará o temporizador em Clear Timer on Compare modo match (CTC) usando OCR1A como
TOP. Os bits FOC1A/FOC1B são sempre lidos como zero.

16.11.4 TCNT1H and TCNT1L – Timer/Counter1


Registro Endereço Valor inicial Read/Write
TCNT1H 0x85 0x00 R/W
TCNT1L 0x84 0x00 R/W

Os dois locais de E/S do Timer/Contador (TCNT1H e TCNT1L, combinados TCNT1) fornecem


acesso direto, tanto para operações de leitura e escrita, para o contador de 16 bits da unidade
Timer/Counter. Para garantir que tanto o alto quanto o baixo bytes são lidos e escritos
simultaneamente quando a CPU acessa esses registradores, o acesso é realizado usando um Registro
de Byte Alto (TEMP) temporário de 8 bits. Este registrador temporário é compartilhado por todos
os outros registradores de 16 bits. registros. Consulte ”Acessando registradores de 16 bits” na
página 122. Modificar o contador (TCNT1) enquanto o contador está em execução apresenta o risco
de perder uma correspondência de comparação entre TCNT1 e um dos registradores OCR1x. A
gravação no registro TCNT1 bloqueia (remove) a correspondência de comparação no seguinte
relógio do temporizador para todas as comparações unidades.

16.11.5 OCR1AH and OCR1AL – Output Compare Register 1 A


Registro Endereço Valor inicial Read/Write
OCR1AH 0x89 0x00 R/W
OCR1AL 0x88 0x00 R/W
16.11.6 OCR1BH and OCR1BL – Output Compare Register 1 B
Registro Endereço Valor inicial Read/Write
OCR1BH 0x8B 0x00 R/W
OCR1BL 0x8A 0x00 R/W
Os registros de comparação de saída contêm um valor de 16 bits que é continuamente comparado
com o valor do contador (TCNT1). Uma correspondência pode ser usada para gerar uma
interrupção de comparação de saída ou para gerar uma saída de forma de onda em o pino OC1x. Os
registradores de comparação de saída têm tamanho de 16 bits. Para garantir que os bytes altos e
baixos sejam gravados simultaneamente quando a CPU escreve nesses registradores, o acesso é
realizado usando um High temporário de 8 bits Registro de bytes (TEMP). Este registrador
temporário é compartilhado por todos os outros registradores de 16 bits. Consulte ”Acessando 16
bits Registros” na página 122.
16.11.7 ICR1H and ICR1L – Input Capture Register 1
Registro Endereço Valor inicial Read/Write
ICR1H 0x87 0x00 R/W
ICR1L 0x86 0x00 R/W
A captura de entrada é atualizada com o valor do contador (TCNT1) cada vez que ocorre um evento
no pino ICP1 (ou opcionalmente na saída do Comparador Analógico para Timer/Contador1). A
captura de entrada pode ser usada para definir o valor TOP do contador. O registrador de captura de
entrada tem tamanho de 16 bits. Para garantir que os bytes alto e baixo sejam lidos simultaneamente
quando a CPU acessa esses registradores, o acesso é feito usando um High Byte Register
temporário de 8 bits (TEMP). Este registrador temporário é compartilhado por todos os outros
registradores de 16 bits. Consulte “Acessando registradores de 16 bits” na página 122.

16.11.8 TIMSK1 – Timer/Counter1 Interrupt Mask Register


Bit 7 6 5 4 3 2 1 0
(0x6F) – – ICIE1 – – OCIE1B OCIE1A TOIE1
Read/Write R R R/W R R R/W R/W R/W
Initial Value 0 0 0 0 0 0 0 0

• Bit 7, 6 – Reserved
Esses bits são bits não utilizados no ATmega48A/PA/88A/PA/168A/PA/328/P e sempre serão lidos
como zero.

• Bit 5 – ICIE1: Timer/Counter1, Input Capture Interrupt Enable


Quando este bit é escrito em um, e o sinalizador I no registrador de status é definido (interrupções
habilitadas globalmente), o A interrupção de captura de entrada do Timer/Counter1 está habilitada.
O vetor de interrupção correspondente (consulte “Interrupções” na página 66) é executado quando o
sinalizador ICF1, localizado em TIFR1, é definido.

• Bit 4, 3 – Reserved
Esses bits são bits não utilizados no ATmega48A/PA/88A/PA/168A/PA/328/P e sempre serão lidos
como zero.

• Bit 2 – OCIE1B: Timer/Counter1, Output Compare B Match Interrupt Enable


Quando este bit é escrito em um, e o sinalizador I no registrador de status é definido (interrupções
habilitadas globalmente), o Timer/Counter1 Output Compare B A interrupção de correspondência
está habilitada. O vetor de interrupção correspondente (consulte “Interrupções” na página 66) é
executado quando o sinalizador OCF1B, localizado em TIFR1, é definido.

• Bit 1 – OCIE1A: Timer/Counter1, Output Compare A Match Interrupt Enable

Quando este bit é escrito em um, e o sinalizador I no registrador de status é definido (interrupções
habilitadas globalmente), o Timer/Counter1 Output Compare Uma interrupção Match está
habilitada. O vetor de interrupção correspondente (consulte “Interrupções” na página 66) é
executado quando o sinalizador OCF1A, localizado em TIFR1, é definido.

• Bit 0 – TOIE1: Timer/Counter1, Overflow Interrupt Enable


Quando este bit é escrito em um, e o sinalizador I no registrador de status é definido (interrupções
habilitadas globalmente), o A interrupção de estouro do Timer/Counter1 está habilitada. O vetor de
interrupção correspondente (consulte ”Interrupções” na página 66) é executado quando o
sinalizador TOV1, localizado em TIFR1, é definido.
16.11.9 TIFR1 – Timer/Counter1 Interrupt Flag Register

Bit 7 6 5 4 3 2 1 0
(0x16)(0x36) – – ICF1 – – OCF1B OCF1A TOV1
Read/Write R R R/W R R R/W R/W R/W
Initial Value 0 0 0 0 0 0 0 0

• Bit 7, 6 – Reserved
Esses bits são bits não utilizados no ATmega48A/PA/88A/PA/168A/PA/328/P e sempre serão lidos
como zero.

• Bit 5 – ICF1: Timer/Counter1, Input Capture Flag

Este sinalizador é definido quando ocorre um evento de captura no pino ICP1. Quando o registro de
captura de entrada (ICR1) é definido por o WGM13:0 a ser usado como o valor TOP, o sinalizador
ICF1 é definido quando o contador atinge o valor TOP. ICF1 é limpo automaticamente quando o
vetor de interrupção de captura de entrada é executado. Alternativamente, ICF1 pode ser zerado
escrevendo um lógico em sua localização de bit.

• Bit 4, 3 – Reserved

Esses bits são bits não utilizados no ATmega48A/PA/88A/PA/168A/PA/328/P e sempre serão lidos
como zero.

• Bit 2 – OCF1B: Timer/Counter1, Output Compare B Match Flag

Este sinalizador é definido no ciclo do relógio do temporizador após o valor do contador (TCNT1)
corresponder ao Registro de comparação de saída B (OCR1B). Observe que um estroboscópio de
comparação de saída forçada (FOC1B) não definirá o sinalizador OCF1B. OCF1B é limpo
automaticamente quando o vetor de interrupção de correspondência B de comparação de saída é
executado. Alternativamente, OCF1B pode ser limpo escrevendo um lógico em sua localização de
bit.

• Bit 1 – OCF1A: Timer/Counter1, Output Compare A Match Flag

Este sinalizador é definido no ciclo do relógio do temporizador após o valor do contador (TCNT1)
corresponder ao registrador A de comparação de saída (OCR1A). Observe que um estroboscópio de
comparação de saída forçada (FOC1A) não definirá o sinalizador OCF1A. OCF1A é limpo
automaticamente quando o vetor de interrupção Match A de comparação de saída é executado.
Alternativamente, OCF1A pode ser limpo escrevendo um lógico em sua localização de bit.

• Bit 0 – TOV1: Timer/Counter1, Overflow Flag

A configuração deste sinalizador depende da configuração dos bits WGM13:0. Nos modos Normal
e CTC, o sinalizador TOV1 é definido quando o temporizador transborda. Consulte a Tabela 16-4
na página 141 para o comportamento do sinalizador TOV1 ao usar outro Configuração de bit
WGM13:0. TOV1 é zerado automaticamente quando o Vetor de Interrupção de Estouro do
Timer/Contador1 é executado. Alternativamente, TOV1 pode ser limpo escrevendo um lógico em
sua localização de bit.
resumo
Control Register
TCCR1A
COM1A1 COM1A0 COM1B1 COM1B0 – – WGM11 WGM10
TCCR1B

(0x81) ICNC1 ICES1 – WGM13 WGM12 CS12 CS11 CS10


TCCR1C
Interrupt Mask
TIMSK1
Interrupt Flag
TIFR1

Você também pode gostar