Você está na página 1de 16

MICROPROCESSADORES

Maikon Lucian Lenz


Temporizadores
e contadores
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:

„„ Identificar os tipos de temporizadores.


„„ Descrever a utilização de temporizadores.
„„ Caracterizar temporizadores especiais.

Introdução
Os circuitos fazem uso de cristais e ressonadores para obter um sinal perió-
dico que possibilite uma operação estável. No entanto, apesar de o tempo
entre cada pulso ser fixo, é necessário mais do que isso para cronometrar
sua passagem. Felizmente, a combinação entre clock e contadores, dois
recursos comuns a todos os microcontroladores, é suficiente para criar
um temporizador. Com um sinal de período fixo e um circuito capaz de
efetuar uma contagem com base nesse sinal, o que se tem é a contagem
do próprio tempo. Os temporizadores possuem inúmeras configurações
e são utilizados não somente de maneira direta, mas também para au-
xiliar na operação de outros módulos. Por fim, existem temporizadores
especiais, muitas vezes rígidos, pouco configuráveis, mas que exercem
funções imprescindíveis a um microcontrolador.
Neste capítulo, você aprenderá a identificar os tipos de temporizado-
res, assim como a descrever seu uso e as características de temporizadores
especiais.
2 Temporizadores e contadores

Tipos de temporizadores
Temporizadores e contadores de sistemas digitais são construídos de forma
similar. De modo geral, temporizadores nada mais são que contadores acio-
nados a partir de um circuito de clock, periódico e estável, resultando em uma
contagem com intervalos fixos (SOUZA, 2003).
Um circuito de contagem simples utiliza flip flops tipo T, cuja função é
alternar a saída entre 0 e 1 a cada pulso de clock, sempre que a entrada for 1.
Para isto, basta manter a entrada dos flip flops em 1 e utilizar o pino de
clock para efetuar a contagem. Este tipo de contador é denominado contador
assíncrono, como podemos observar na Figura 1.

Figura 1. (a) Diagrama de blocos de um contador assíncrono de 4 bits e (b) gráfico das
saídas do contador ao longo do tempo.
Fonte: Tokheim (2013, p. 233).
Temporizadores e contadores 3

Na contagem assíncrona, o clock não é comum a todos os flip-flops. Como


é possível ver na Figura 1, somente o primeiro flip flop recebe o sinal de clock
original, os demais dependem das saídas dos flip-flops anteriores. Com isso,
cada bit representado por um flip flop alterna seu valor em momentos diferentes
(o período do bit seguinte sempre será duas vezes maior). A vantagem deste
método é o tamanho reduzido do circuito, mas à medida que contagens maiores
são necessárias, mais flipflops devem ser inseridos e o atraso de propagação
é acumulado, podendo prejudicar a precisão e o correto funcionamento do
dispositivo.
Para contornar o atraso de propagação são utilizados contadores síncronos,
em que o sinal de clock é o mesmo para todos. No entanto, caso o restante do
esquema fosse mantido, não haveria um comportamento de contagem, uma
vez que todos os flip-flops tipo T alternariam no mesmo momento e haveria
apenas dois estados possíveis neste circuito: todos os bits iguais a 1 ou iguais a 0.
O método síncrono requer o uso de circuitos combinacionais na entrada dos
flip-flops. Ao contrário do que ocorria com o contador assíncrono, as entradas
mudarão de estado conforme o estado atual, e não mais o clock. O primeiro
bit permanecerá da mesma forma e o segundo terá sua entrada conectada à
saída do bit anterior. Já para os flip-flops seguintes, um circuito combinacional
deverá comparar se todos os bits anteriores são iguais a 1 para que sua entrada
seja acionada e, no momento em que receber um pulso de clock, seu estado
também seja alternado. Isto pode ser feito a partir da combinação de todas
as saídas necessárias com o uso de portas AND, que terá uma saída igual a
1 sempre que todas as entradas forem 1, conforme observamos na Figura 2.

Figura 2. Contador síncrono de 3 bits.


Fonte: Tokheim (2013, p. 235).
4 Temporizadores e contadores

O atraso de propagação pode não ser um problema quando utilizado para a


contagem, uma vez que o atraso costuma ser pequeno perante as necessidades,
mas o problema pode se agravar quando o contador for utilizado para tem-
porização. Assim, para os microcontroladores, a maior parte dos contadores
será do tipo síncrono, permitindo maior precisão quando utilizados como
temporizadores.
Nos microcontroladores, as configurações, tamanhos de contagem e a
frequência de temporização podem variar bastante. Modelos mais simples
costumam ter entre um e três temporizadores como o microcontrolador PI-
C16F877A (MICROCHIP TECHNOLOGY, 2003). Outros modelos mais
sofisticados podem ter mais de uma dezena. O modelo PIC24FJ256GA412,
por exemplo, pode ser configurado para utilizar até 31 temporizadores de
16 bits simultaneamente (MICROCHIP TECHNOLOGY, 2016).
Dentro de um mesmo microcontrolador, temporizadores de características
diferentes podem estar presentes. Muitos deles, apesar de permitirem o uso
independente, estão associados à operação de algum outro módulo do micro-
controlador. No PIC16F877A, por exemplo, um dos temporizadores é utilizado
pelo módulo de PWM para controlar a frequência de geração de sinal, como
vemos na Figura 3. Logo, para utilizar este temporizador, é necessário que
o PWM não esteja em uso, do contrário o comportamento de ambos seria
afetado (MICROCHIP TECHNOLOGY, 2003).
O circuito de contagem utilizado nos temporizadores dos microcontro-
ladores PIC faz uso de um pino de entrada para receber o pulso de algum
mecanismo que indique a necessidade de um incremento, seja um sensor, um
botão ou qualquer outro. Já para a função de temporização, o contador pode
ser configurado para incrementar a cada pulso/ciclo de máquina. Logo, para
obter um tempo específico, deve-se calcular a quantidade de incrementos
necessários e a frequência de operação, que pode ser algum múltiplo do clock,
para que o temporizador responda ao tempo desejado.
Temporizadores e contadores 5

Figura 3. Diagrama de blocos do módulo PWM do PIC16F877A. Em destaque,


o temporizador Timer 2 compartilhando o registrador com o módulo de PWM.
Fonte: Adaptada de Microchip Technolgy (2003, p. 67).

Os microcontroladores utilizam um mecanismo conhecido como inter-


rupção para permitir que hardwares periféricos trabalhem paralelamente
a unidade de lógica e aritmética. No caso dos contadores/temporizadores,
um endereço de memória é reservado para manter o valor da contagem e,
ao atingir o limite determinado pelo tamanho deste registrador, o contador/
temporizador irá gerar uma interrupção para sinalizar que extrapolou seu
limite de operação. Em outras palavras, utilizar um temporizador em um
microcontrolador significa configurar um circuito contador para incrementar
até o limite de sua capacidade em intervalos fixos que resultem no tempo
esperado, momento em que sinaliza a ocorrência de um overflow, ou seja,
excedeu o maior número possível de contagem.
6 Temporizadores e contadores

Além do prescaler, também existe o postscaler, presente em alguns temporizadores.


A combinação de ambos resulta em uma multiplicação ainda maior da contagem,
estendendo ainda mais o tempo máximo para o qual um temporizador pode ser
configurado.

Utilização de temporizadores
No diagrama de blocos do temporizador Timer 0 do microcontrolador
PIC16F877A é possível notar a presença de uma série de multiplexadores, como
pode se observar na Figura 4. Estes permitem a configuração do temporizador
em frequências e origem de sinal diferentes (MICROCHIP TECHNOLOGY,
2003).

Figura 4. Diagrama de blocos do temporizador Timer 0 do microcontrolador PIC16F877A.


Fonte: Adaptada de Microchip Technology (2003, p. 53).
Temporizadores e contadores 7

Repare que o sinal de incremento é selecionado por um multiplexa-


dor (MUX), graças ao qual o programador pode optar por utilizar o pino
RA4/T0CKI do microcontrolador como sinal ou ciclo de máquina interno,
que corresponde a 25% do clock. O programador faz a opção pela origem,
manipulando o bit T0CS (bit 5 do registrador OPTION_REG de endereço
0x81) (MICROCHIP TECHNOLOGY, 2003).
Se o pino RA4/T0CKI for escolhido, uma porta XOR irá determinar se o
contador irá reagir ao clock na borda de subida ou de descida. Como a lógica
XOR apenas resulta em 1 quando ambas as entradas são diferentes, mudar o
valor de T0SE (bit 4 do registrador OPTION_REG) mudará o valor do pino
necessário para que a lógica XOR valide o sinal (MICROCHIP TECHNO-
LOGY, 2003).
Um segundo multiplexador recebe o sinal do primeiro, porém, seleciona
se este deve ser utilizado na contagem ou um terceiro sinal originado de um
circuito, conhecido como prescaler. O prescaler expande a capacidade de
contagem do temporizador. Quando utilizado, o sinal que serviria de incre-
mento do contador passa primeiro pelo prescaler que fará uma contagem
prévia e somente enviará um sinal ao temporizador ao final. Para que isto seja
possível, o bit PSA (bit 3 do registrador OPTION_REG) deve estar desligado,
direcionando o prescaler para o temporizador e não para outro circuito e,
assim, o sinal de incremento alimentará somente o prescaler, enquanto o
segundo multiplexador estará conectando a saída do prescaler ao temporizador
(MICROCHIP TECHNOLOGY, 2003).
Dentro do prescaler, outro multiplexador seleciona o fator multiplicador
a ser utilizado por meio dos bits: PS2, PS1 e PS0, presentes no registrador
OPTION_REG. Com oito combinações possíveis para este grupo de 3 bits,
o temporizador pode escolher operar sem prescaler, caso em que cada ciclo
de máquina corresponde a um incremento do contador, ou entre os múltiplos
de duas vezes, quando todos os bits PS2, PS1 e PS0 são iguais à 0, até 256
vezes do ciclo de máquina quando todos bits PS2, PS1 e PS0 são iguais a 1
(MICROCHIP TECHNOLOGY, 2003).
A contagem é armazenada no registrador TMR0 (endereço 0x01) e, as-
sim como os demais hardwares paralelos que utilizam alguma forma de
interrupção, o temporizador requer que as interrupções estejam habilitadas.
O término da operação poderá ser detectado pela ativação do bit flag (sinali-
zador) TMR0IF (bit 2 do registrador INTCON, endereço 0x0B) (MICROCHIP
TECHNOLOGY, 2003).
8 Temporizadores e contadores

Uma vez concluída a contagem, após o tempo para o qual foi configurado
o temporizador, o mesmo irá interromper o funcionamento até que o flag seja
desligado e seja ordenada uma nova contagem.
Como o temporizador opera detectando o overflow do contador, a confi-
guração do tempo é feita iniciando o registrador do contador (TMR0) com um
valor inicial de contagem para a qual restem apenas a quantidade suficiente
que, considerando a frequência e o fator multiplicador (prescaler) utilizados, se
aproximem ao máximo do tempo requisitado. Para tanto, o registrador TMR0
é acessível ao barramento de dados como os demais endereços de memória.
A frequência com que cada interrupção irá ocorrer é calculada pela Equação
1 (PEREIRA, 2007),

(1)

na qual:

„„ Fcontagem: frequência com que o temporizador irá contar.


„„ Fsinal: frequência na entrada do módulo. Externo (RA4/T0CKI) ou ciclo
de máquina .
„„ M: fator de multiplicação (prescaler) caso configurado.
„„ N: tamanho/quantidade de bits do contador/temporizador.
„„ TMR0: valor inicial do registrador utilizado pelo contador.

Sendo a frequência o inverso do período, o tempo de cada contagem pode


ser obtido pela Equação 2, 3 ou 4:

(2)

(3)

(4)
Temporizadores e contadores 9

Um microcontrolador alimentado por um clock de 4 MHz produz um ciclo de máquina


de 1 MHz e, sem prescaler, cada incremento do contador irá ocorrer a cada:

Assim, iniciando o registrador TMR0 de 8 bits em 0, serão 256 contagens até o


estouro e a interrupção e, portanto, um tempo de 256 μs. Para que este temporizador
interrompa a cada 1 ms, será necessário utilizar um fator de multiplicação.
Com um fator de duas vezes, o tempo máximo seria duplicado, chegando a 512
μs, o que ainda é insuficiente. Com um fator de quatro vezes, o tempo máximo seria
quadruplicado, chegando a 1024 μs. Logo, é possível ajustar o valor inicial de TMR0
para reduzir este valor para os 1.000 μs desejados:

1000 = 4 · (256 – TMR0)

250 – 256 = –TMR0

TMR0 = 6

Além de habilitar as interrupções e acionar o temporizador, também deverá ser


configurado o uso de prescaler com um fator de multiplicação de quatro vezes e
iniciar o registrador de contagem em 6, para que efetue 250 contagens em uma
frequência de 250 kHz.
10 Temporizadores e contadores

Temporizadores especiais
Alguns temporizadores têm finalidades mais específicas e direcionadas. É o
caso dos módulos watchdog timer, oscillator start-up timer e power-up timer.
Os temporizadores especiais variam em sua configuração, sendo em alguns
casos de tempo fixo, cabendo ao programador apenas habilitá-los ou não.

Watchdog timer
O watchdog timer (WDT) é um tipo de temporizador utilizado para monitorar
o bom funcionamento do microcontrolador. Para tanto, dispõe de um oscilador
próprio integrado ao microcontrolador. Desta forma, mesmo que o circuito
do oscilador tenha algum problema, a atuação do módulo WDT ainda será
possível (MICROCHIP TECHNOLOGY, 2003).
A operação convencional consiste em reiniciar o microcontrolador sempre
que o temporizador do WDT atingir o valor máximo de contagem. Logo, caso
esta função esteja habilitada, o programador deverá distribuir ao longo do
código instruções que forcem o reinício da contagem do módulo WDT antes
que estoure a contagem.
Esta é uma função muito utilizada em equipamentos de alto grau de risco
ou precisão, em que a menor falha deve ser detectada rapidamente para evitar
maiores danos. O WDT cumpre essa função para os casos em que, qualquer
que seja o motivo, o microcontrolador não está executando o programa da
forma como foi programado.
Com instruções de reinício do WDT em intervalos de tempo suficiente
e estando o microcontrolador funcionando da maneira adequada, não será
atingido o limite da contagem e o microcontrolador não irá reiniciar. Porém,
situações como falha da memória ou interferência elétrica que distorce os
sinais do microcontrolador podem fazer com que o microcontrolador execute
operações aleatórias que não as que foram programadas. Dependendo do tipo
de equipamento, o problema pode ter consequências graves. No entanto, ao
mesmo tempo em que as instruções não estão sendo executadas, também
não será reiniciado o WDT. Assim, após um pequeno intervalo de tempo
de mau funcionamento, espera-se que o WDT coloque o microcontrolador
novamente no início do programa, situação em que o programador precavido
costuma incluir todos os tratamentos necessários para colocar o equipamento
na situação mais segura.
Temporizadores e contadores 11

No PIC16F877A, o WDT possui um temporizador próprio, mas compar-


tilha o mesmo prescaler do Timer 0 (MICROCHIP TECHNOLOGY, 2003).
Além disso, o WDT só pode ser acionado ou desligado durante a gravação
do programa, já que está informação fica alocada em sua memória e não na
memória de dados. Assim, sempre que for necessário habilitar ou desabilitar
o WDT, o programador deverá gravar novamente o código (PEREIRA, 2007).
Também é possível utilizar o WDT para forçar o retorno do microcontrola-
dor do modo de hibernação (sleep). Neste modo, o microcontrolador desativa
a maior parte de suas funções e entra em modo de economia. Como o WDT
possui um hardware próprio, inclusive de clock, este continuará funcionando
e, ao gerar uma interrupção no modo de hibernação, em vez de reiniciar o
microcontrolador, irá despertá-lo (MICROCHIP TECHNOLOGY, 2003).
Apesar de não ser possível alterar o funcionamento do WDT durante a
execução do código, ou seja, pelo programa, é possível alterar o prescaler para
multiplicar o temporizador do WDT por um fator de multiplicação.

Oscillator start-up timer


Outro temporizador especial, com um funcionamento ainda mais rígido que
o WDT, é o oscillator start-up timer (temporizador de início do oscilador), ou
simplesmente OST. Este é outro exemplo de temporizador cujo comportamento
não pode ser alterado em tempo de execução, mas apenas durante a gravação
do programa (MICROCHIP TECHNOLOGY, 2003).
A função deste temporizador é atrasar o início da execução do programa, a
fim de garantir a estabilização do sinal do oscilador. No caso do PIC16F877A,
o OST faz uma contagem de 1.024 pulsos de clock, utilizando o mesmo clock
que o restante do microcontrolador (MICROCHIP TECHNOLOGY, 2003).
A contagem de OST pode ser afetada pela instabilidade do circuito oscila-
dor, aumentando ou diminuindo esta, mas a margem de segurança é grande o
suficiente para contornar os problemas mais frequentes, de forma que mesmo
executando uma contagem diferente da qual foi projetado, é de se esperar
que ao final desta o circuito do oscilador já esteja estável e não prejudique a
execução para a qual foi programado.
Muito diferentes seriam as consequências de variações do clock durante a
execução do programa. Uma única instrução errada ou ignorada pode inverter
completamente o comportamento de todo o sistema.
12 Temporizadores e contadores

Power-up timer
O power-up timer (temporizador de energização), ou PWRT, atua assim que
o microcontrolador é alimentado e evita que qualquer função seja executada
antes de um breve intervalo de tempo.
O tempo do PWRT é fixo e calculado de forma a garantir a estabilidade
da alimentação do circuito (MICROCHIP TECHNOLOGY, 2003).
Assim como o WDT, possui oscilador próprio para garantir a operabilidade
e a proteção dos demais componentes, mesmo que estes não estejam em seu
funcionamento normal.
Também só poderá ser acionado ou desativado gravando o programa nova-
mente. Não há qualquer instrução capaz de fazer o microcontrolador alterá-lo
em tempo de execução.

Figura 5. Diagrama temporal demonstrando o comportamento do microcontrolador com


PWRT e OST ativados imediatamente após a alimentação do circuito.
Fonte: Microchip Technology (2003, p. 151).

Repare, na Figura 5, que após a alimentação adequada do microcontro-


lador (VDD com tensão suficiente, ligado para evitar o reinício e
indicando tensão acima do mínimo necessário), é aguardado o tempo do
PWRT e, após este, é aguardado o tempo do OST para só então dar início a
execução do programa.
Temporizadores e contadores 13

Existem inúmeros outros circuitos que utilizam temporizadores, seja de maneira direta
ou indireta. Um gerador de sinal, por exemplo, necessita de um temporizador para
orientar o momento em que as mudanças devem ocorrer.

MICROCHIP TECHNOLOGY. PIC16F87XA Data Sheet: 28/40/44-Pin Enhanced Flash Mi-


crocontrollers. Chandler, 2003. 234 p. Disponível em: http://ww1.microchip.com/
downloads/en/DeviceDoc/39582b.pdf. Acesso em: 20 jul. 2019.
MICROCHIP TECHNOLOGY. PIC24FJ256GA412/GB412 FAMILY: 16-Bit Flash Microcontrollers
with Dual Partition Flash Memory, XLP, LCD, Cryptographic Engine and USB On-The-
-Go. Chandler, 2016. 558 p. Disponível em: http://ww1.microchip.com/downloads/en/
DeviceDoc/30010089d.pdf. Acesso em: 20 jul. 2019.
PEREIRA, F. Microcontroladores PIC: técnicas avançadas. 6. ed. São Paulo: Érica, 2007. 368 p.
SOUZA, D. J. Desbravando o PIC: ampliado e atualizado para PIC16F628A. 6. ed. São
Paulo: Érica, 2003. 268 p.
TOKHEIM, R. Fundamentos de eletrônica digital: sistemas sequenciais. 7. ed. Porto Alegre:
AMGH; Bookman, 2013. v. 2. 274 p. (Série Tekne).

Leitura recomendada
WEBER, R. F. Fundamentos de arquitetura de computadores. 4. ed. Porto Alegre: Bookman,
2012. 424 p. (Série Livros Didáticos Informática UFRGS).

Você também pode gostar