Temporizadores com NRF24LE1 (Parte 7/14)

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

Uma rede de sensores é incorporada em todos os...
O controlador do motor é um dos componentes mais...
ESP32-CAM é um módulo de câmera compacto que combina...
A evolução dos padrões USB foi fundamental para moldar...
A SCHURTER anuncia um aprimoramento para sua conhecida série...
A Sealevel Systems anuncia o lançamento da Interface Serial...
A STMicroelectronics introduziu Diodos retificadores Schottky de trincheira de...
Determinar uma localização precisa é necessário em várias indústrias...
O novo VIPerGaN50 da STMicroelectronics simplifica a construção de...
A Samsung Electronics, fornecedora de tecnologia de memória avançada,...
O mercado embarcado tem uma necessidade de soluções de...
Você provavelmente já se deparou com o termo 'arrastar'...
Você provavelmente tem um Isolador de suporte Se você...
Você provavelmente já viu permanecer um isolante sente-se em...
Você provavelmente já viu Isoladores de manilha entronizados em...
Você provavelmente já passou por situações em que o...
Zurück zum Blog

Hinterlasse einen Kommentar

Bitte beachte, dass Kommentare vor der Veröffentlichung freigegeben werden müssen.