O tempo desempenha um papel importante em nossa vida. É normal que um ser humano reserve tempo para planos futuros. Precisamos apenas do cérebro e de um relógio para decidir qual é a hora atual e quanto tempo já passou. Da mesma forma, um microcontrolador também pode calcular o tempo. Ele serve ao propósito do cérebro como no caso do ser humano e o relógio é fornecido por um oscilador. Para nós, o desperdício de um segundo pode não ser importante, mas para o microcontrolador um microssegundo é muito crucial.
Temporizadores com NRF24LE1
O tempo desempenha um papel importante em nossa vida. É normal que um ser humano reserve tempo para planos futuros. Precisamos apenas do cérebro e de um relógio para decidir qual é a hora atual e quanto tempo já passou. Da mesma forma, um microcontrolador também pode calcular o tempo. Ele serve ao propósito do cérebro como no caso do ser humano e o relógio é fornecido por um oscilador. Para nós, o desperdício de um segundo pode não ser importante, mas para microcontrolador um microssegundo é muito crucial.
Neste artigo você encontrará respostas para perguntas como – Como podemos usar o NRF para controlar o tempo decorridocomo podemos gerar atraso de período determinado e muito mais.
A maioria dos microcontroladores possui funcionalidades integradas conhecidas como Timers. Esses temporizadores são usados para controlar o tempo. Também podem ser usados como contador para contar pulsos. O NRF24LE1 tem três temporizadores Timer0, Timer1 e Timer2. Discutiremos apenas o Timer0 no presente artigo.
Fig. 1: Protótipo de temporizador baseado em módulo NRF24LE
O temporizador usa a frequência do relógio para atualizar a hora. Ele usa registros para armazenar o valor do tempo. Por exemplo, se usarmos um clock de 16 MHz que tem um período de tempo de 62,5 nS (nano segundos), então o registro do temporizador incrementa seu valor em 1 a cada 62,5 mS. Isso também significa que a menor medição que podemos fazer é 62,5 mS.
Fig. 2: Imagem do temporizador baseado no módulo NRF24LE
Já discutimos que o temporizador utiliza registradores para armazenar o valor do tempo. No NRF24LE1 podemos escolher entre registro de 8 bits, registro de 13 bits e registro de 16 bits. A seleção do registro afeta a quantidade de tempo que um temporizador pode armazenar. Por exemplo, um registro de 8 bits pode armazenar valores de até 255. Se usarmos a frequência de 16 MHz com um período de tempo de 62,5 mS, a quantidade máxima de tempo que este registro pode armazenar é (62,5 * 255) = 15,9 uS (microssegundos) .
Agora, e se mudarmos a frequência? Vamos experimentar.
Digamos que minha nova frequência seja 16 MHz/8 = 2 MHz, o que significa que agora o período de tempo é de 0,5 uS. Agora, se usarmos um registro de 8 bits para armazenar o valor do tempo, a quantidade máxima de tempo que esse registro pode armazenar é (0,5 * 255) = 127,5 uS (microssegundos). O que observamos é que, se diminuirmos a frequência, o tempo máximo que o registrador pode armazenar aumenta. O divisor que usamos para diminuir a frequência é conhecido como prescaler. Podemos alterar este prescaler para alterar a frequência. No módulo NRF, o prescaler é embutido e fixado em 12. Isso significa que agora a frequência passa a ser 16/12 = 1,33 MHz.
Temos que selecionar o Timer0 para funcionar como temporizador ou contador. Para isso temos o registro TMOD (Timer Mode). O segundo bit deste registro é usado para selecionar entre temporizador e contador. Se este bit for 0, o temporizador será selecionado e, se for 1, o contador será selecionado. Temos que escrever esta parte de acordo com nossa necessidade.
Para Timer0, temos três modos:
1. Mode0 – este modo é usado para selecionar registro de 13 bits
2. Mode1 – Este modo é para registro de 16 bits.
3. Modo2 – é para recarga automática de 8 bits.
4. Modo3 – este modo é usado para selecionar um registro de 8 bits como temporizador/contador e outro de 8 bits como temporizador.
O primeiro bit e o bit zero do registro TMOD são usados para selecionar entre diferentes modos. As diversas combinações desses bits referem-se a diferentes modos. Eles são:
00 – Modo0
01 – Modo1
10 – Modo2
11 – Modo3
Os registradores que armazenam o valor do tempo para timer0 são TL0 e TH0. Esses dois registros são de 8 bits cada. Eles podem ser combinados para serem usados como registro de 16 bits ou registro de 13 bits. TH0 contém o byte mais alto e TL0 contém o byte mais baixo de dados. Além disso, se esses registros ficarem cheios, isso é conhecido como overflow. Podemos verificar se ocorreu um overflow verificando o sinalizador de overflow no registro TCON (Timer Control). O bit número cinco representa o sinalizador de overflow. Se o sinalizador for 1, ocorreu um estouro. Podemos escrever uma rotina de serviço que é chamada quando ocorre um overflow.
Os sinalizadores de overflow são automaticamente apagados quando a rotina de serviço é chamada.
Para iniciar o temporizador temos que definir o bit número quatro do TCON. Se este bit for 0, o temporizador irá parar. Também podemos acessar este bit através da variável TR (Timer Run). Se TR = 1, o temporizador inicia. Se TR = 0, o temporizador para.
Existem mais recursos de temporizador, como overflow, controle de hardware, controle de portão e contador de pulsos. Discutiremos esses recursos em nossos próximos artigos.
Escrevemos um código para entender os temporizadores. Estamos usando o timer0 no modo1. Criamos um atraso de ……
Código-fonte do projeto
###
//Program to
#include "reg24le1.h" // arquivo de cabeçalho de E/S para NRF24LE1
###
Diagramas de circuito
Diagrama de Circuito-NRF24LE-Módulo-Temporizador |
Vídeo do projeto