quinta-feira, agosto 21, 2008

Microcontroladores - Parte 6

Continuando a nossa série, vamos ver hoje as funcionalidades relacionadas com tempo encontradas nos microcontroladores.

A Base de Tempo - o Clock

O processador e vários de seus periféricos necessitam de uma base de tempo (clock). Existem diversas formas de gerar o Clock, com precisão e custo diferenciados:
  • cristal de quartzo: é o mais preciso e está disponível em uma faixa grande de valores. Por outro lado, é o mais caro.
  • ressonador: uma alternativa mais barata e menos precisa aos cristais.
  • circuito RC externo: pouco preciso mas barato.
  • oscilador interno ao microcontrolador: o mais barato (está embutido), mas não costuma ter muita precisão.
É comum um microcontrolador suportar várias opções. Em alguns modelos pode-se ter mais de uma fonte de clock, permitindo usar clocks diferentes para o processador e periféricos ou mesmo mudar dinamicamente o clock do processador conforme a tarefa requer velocidade ou economia.

Timer

O timer é um periférico básico encontrado praticamente em todo microcontrolador. Na forma mais simples é um contador que é incrementado ou decrementado pelo clock; ao chegar a zero uma interrupção pode ser gerada. A partir desta interrupção o software gera as temporizações necessárias.

Por exemplo, vamos supor um microcontrolador operando a 1MHz com um timer que interrompe o processador a cada 65536 ciclos do clock. Neste caso, o tempo entre as interrupções será de 65536/1000000 = 65,535 mseg. A cada 15 interrupções teremos aproximadamente 1 segundo.

Alguns timers permitem dividir o valor do clock antes do contador (útil para clocks altos) e carregar automaticamente um valor inicial sempre que o clock der a volta (no exemplo anterior, se pudermos carregar 10000, o contador for decrementado a cada clock e interromper quando chegar a zero, teremos uma interrupção precisamente a cada 10 mseg).

Um outro recurso disponível em alguns timers é a possibilidade de iniciar e parar a contagem por um sinal externo. Isto permite usar o timer para medir o tempo entre as variações em um sinal digital.

Watchdog Timer (WDT)

Os circuitos que utilizam os microcontroladores muitas vezes devem funcionar sem acompanhamento. Isto significa que em caso de algum problema que leve a uma travada no software o microcontrolador precisa se recuperar sozinho.

O watchdog timer é uma espécie de bomba relógio: é um contador que vai sendo automaticamente decrementado e gera um reset quando chega a zero. O software deve periodicamente re-armar o timer para evitar este reset.

O uso correto do WDT nem sempre é trivial. Se o re-armamento é feito em vários pontos, aumenta o risco do programa ficar "perdido" sem ocorrer o reset. Por outro lado, re-aramar somente em um ponto (tipicamente o loop principal do programa) pode não ser suficiente se o tempo do WDT for curto e alguns processamentos forem demorados.

Real Time Clock (RTC)

Usando um timer e uma boa quantidade de código é possível implementar um relogio que mantém data e hora. Entretanto, este relógio vai depender do processador estar rodando, o que significa consumo de energia. Para facilitar a vida, existem módulos específicos para registrar data e hora. Em alguns microcontroladores o RTC é interno, nos demais é possível ligá-lo externamente, neste caso é comum a opção de ligar uma bateria externa para manter o relógio atualizado mesmo que o circuito principal não esteja alimentado. Um RTC típico utiliza um cristal de 32.768 Hz, que é dividido internamente por um contador binário de 15 bits para gerar uma base precisa de 1 segundo.

Nenhum comentário: