Gerador de números aleatórios com NRF24LE1
O número aleatório às vezes desempenha um papel importante em nossa vida. Pense em um bilhete de loteria que você comprou. Agora, e se um número aleatório retirado do sorteio corresponder ao número do seu bilhete? Ficaremos felizes se isso acontecer. Geradores de números aleatórios também são usados para tornar os jogos mais intrigantes e não determinísticos. Você sabia que os microcontroladores também podem gerar números aleatórios? Hoje vamos discutir um recurso interessante do NRF24LE1 que é Gerador de números aleatórios (RNG).
O NRF24LE1 contém um gerador de números aleatórios baseado em ruído térmico que produz uma sequência não determinística. Para torná-lo mais poderoso e aleatório, podemos usar um algoritmo de correção digital que remove qualquer tendência para 0 ou 1. Este também é um recurso embutido. O RNG gera um número de 8 bits que é armazenado em um registro de 8 bits. Portanto, o intervalo de números será de 0 a 255.
Algumas características do RNG são:
• Taxa de geração de números de até 10 kilobytes por segundo
• Sequência não repetitiva
• Funciona mesmo quando o NRF está no modo de espera
• Não é necessário nenhum valor de entrada inicial para geração (autogeração)
• Arquitetura não determinística baseada em ruído térmico
O RNG é controlado por dois registradores:
1. Registro RNGCTL (Random Number Generator Control) – É um registro de 8 bits. A finalidade de vários bits é:
• Bit 7 – usado para ligar o RNG
• Bit 6 – usado para ativar o corretor de polarização
• Bit 5 – flag de geração concluída. 1: Dados prontos
• Bit 4:0 – não utilizado
2. Registro RNGDAT (Random Number Generator Data) – É um registro de 8 bits que classifica o número gerado.
![Protótipo de gerador de números aleatórios baseado em módulo NRF24LE1 Protótipo de gerador de números aleatórios baseado em módulo NRF24LE1](https://storage.googleapis.com/medium-feed.appspot.com/images%2F9353691196%2F2464476932b13-Gerador-de-numeros-aleatorios-com-NRF24LE1-Parte-814.jpg)
Fig. 1: Protótipo do Gerador de Números Aleatórios baseado no Módulo NRF24LE1
Abordaremos agora o processo de RNG em etapas simples.
• Primeiro temos que ligar o gerador. Para isso temos que escrever 1 no bit 7 do RNGCTL.
• Se quisermos habilitar o corretor de polarização podemos escrever 1 no bit 6 do RNGCTL.
• Podemos verificar se o número foi gerado lendo o bit 5 RNGCTL. Uma interrupção RNGIRQ também é produzida após uma geração bem-sucedida. Demora cerca de 0,1 mS para gerar um número quando o corretor de polarização está desabilitado e quatro vezes mais tempo quando o corretor está habilitado. Além disso, leva cerca de 0,25 ms para a primeira geração após o RNG ser ligado.
• Os dados de um byte gerados podem ser acessados através do registro RNGDAT.
Também podemos usar funções fornecidas pelas bibliotecas nórdicas:
![Tabela de listagem de funções do módulo sem fio NRF24LE1 Tabela de listagem de funções do módulo sem fio NRF24LE1](https://storage.googleapis.com/medium-feed.appspot.com/images%2F9353691196%2F1326728b4b578-Gerador-de-numeros-aleatorios-com-NRF24LE1-Parte-814.png)
Fig. 2: Tabela de listagem de funções do módulo sem fio NRF24LE1
Função Parâmetro de entrada Descrição de saída
hal_rng_power_up 0/1 – Para alimentar o RNG
0:DESLIGADO
1:LIGADO
hal_rng_bias_corr_enable 0/1 – Para usar o corretor de polarização
0: Desativar
1: Habilitar
hal_rng_read – dados de 8 bits para ler o número gerado
hal_rng_data_ready – 0/1 Para verificar o status do RNG
0: Dados não prontos
1: Dados prontos
![Imagem do gerador de números aleatórios baseado no módulo NRF24LE1 Imagem do gerador de números aleatórios baseado no módulo NRF24LE1](https://storage.googleapis.com/medium-feed.appspot.com/images%2F9353691196%2F83db25034e833-1718422654_147_Gerador-de-numeros-aleatorios-com-NRF24LE1-Parte-814.jpg)
Fig. 3: Imagem do gerador de números aleatórios baseado no módulo NRF24LE1
Escrevemos um código para que os usuários entendam seu funcionamento. O número de 1 byte gerado foi enviado para a Porta0, onde os LEDs estão conectados. Como o número gerado é aleatório, esses LEDs piscarão de forma aleatória.
Código-fonte do projeto
###
//Program to
#include"reg24le1.h" // Arquivo de cabeçalho de E/S para NRF24LE1
#include"hal_delay.h" // arquivo de cabeçalho contendo funções de atraso
###
Diagramas de circuito
Diagrama de Circuito-NRF24LE1-Módulo-Gerador de Números Aleatórios | ![]() |
Vídeo do projeto