Temporizadores com NRF24LE1 (Parte 7/14)

Imagem do temporizador baseado no módulo NRF24LEO 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.
Protótipo de temporizador baseado em módulo NRF24LE
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.
Imagem do temporizador baseado no módulo NRF24LE
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
#incluir //biblioteca padrão #incluir //biblioteca contendo funções de string #incluir //biblioteca de E/S padrão sfr16 DPTR = 0X82; //declara o registrador funcional DPTR // função principal vazio principal { int eu = 0; P1DIR = 0; //Port1 como saída P10 = 0; //Pino 0 da porta 1 baixo EA = 1; //Habilita interrupção global TMOD = 0X01; //timer0 no modo 1 de 16 bits TR0 = 1; //inicia o cronômetro // Loop infinito enquanto(1) { TH0 = 0; // inicializa o byte superior do registrador do timer TL0 = 0; // inicializa o byte inferior do registro do timer enquanto(TF0 == 0); // espera pelo sinalizador de estouro do timer TF0 = 0; //limpa sinalizador P10=1; //torna o Pin0 da Porta1 alto TH0 = 0; // inicializa o byte superior do registrador do timer TL0 = 0; // inicializa o byte inferior do registro do timer enquanto(TF0 == 0); // espera pelo sinalizador de estouro do timer TF0 = 0; //limpa sinalizador P10 = 0; //torna o Pin0 da Porta1 baixo } }

###

Diagramas de circuito

Diagrama de Circuito-NRF24LE-Módulo-Temporizador

Vídeo do projeto

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.