Generador de números aleatorios con NRF24LE1
Los números aleatorios a veces juegan un papel importante en nuestra vida. Piensa en un billete de lotería que compraste. Ahora bien, ¿qué pasa si un número aleatorio extraído del sorteo coincide con el número de su billete? Estaremos felices si eso sucede. Los generadores de números aleatorios también se utilizan para hacer que los juegos sean más intrigantes y no deterministas. ¿Sabías que los microcontroladores también pueden generar números aleatorios? Hoy vamos a discutir una característica interesante de NRF24LE1 que es el Generador de números aleatorios (RNG) .
El NRF24LE1 contiene un generador de números aleatorios basado en ruido térmico que produce una secuencia no determinista. Para hacerlo más potente y aleatorio, podemos utilizar un algoritmo de corrección digital que elimina cualquier sesgo hacia 0 o 1. Esta también es una característica incorporada. RNG genera un número de 8 bits que se almacena en un registro de 8 bits. Por tanto, el rango de números será de 0 a 255.
Algunas características del RNG son:
• Velocidad de generación de números de hasta 10 kilobytes por segundo
• Secuencia no repetitiva
• Funciona incluso cuando el NRF está en modo de espera
• No se requiere ningún valor de entrada inicial para la generación (autogeneración)
• Arquitectura no determinista basada en ruido térmico
RNG está controlado por dos registros:
1. Registro RNGCTL (Control de generador de números aleatorios): es un registro de 8 bits. El propósito de múltiples bits es:
• Bit 7: se utiliza para activar RNG
• Bit 6 – utilizado para activar el corrector de polarización
• Bit 5 – indicador de generación completada. 1: datos listos
• Bit 4:0 – no utilizado
2. Registro RNGDAT (datos del generador de números aleatorios): es un registro de 8 bits que clasifica el número generado.

Fig. 1: Prototipo de generador de números aleatorios basado en el módulo NRF24LE1
Ahora cubriremos el proceso de RNG en pasos simples.
• Primero tenemos que encender el generador. Para ello tenemos que escribir 1 en el bit 7 del RNGCTL.
• Si queremos habilitar el corrector de polarización podemos escribir 1 en el bit 6 del RNGCTL.
• Podemos comprobar si el número se generó leyendo el bit 5 RNGCTL. También se produce una interrupción RNGIRQ después de una generación exitosa. Se necesitan aproximadamente 0,1 mS para generar un número cuando el corrector de polarización está desactivado y cuatro veces más cuando el corrector de polarización está activado. Además, la primera generación tarda aproximadamente 0,25 ms después de activar el RNG.
• Se puede acceder a los datos de un byte generados a través del registro RNGDAT.
También podemos utilizar funciones proporcionadas por las bibliotecas nórdicas:

Fig. 2: Tabla de listado de funciones del módulo inalámbrico NRF24LE1
Función Entrada Parámetro Salida Descripción
hal_rng_power_up 0/1 – Para alimentar RNG
0: APAGADO
1: ENCENDIDO
hal_rng_bias_corr_enable 0/1 – Para usar el corrector de sesgo
0: Desactivar
1: habilitar
hal_rng_read: datos de 8 bits para leer el número generado
hal_rng_data_ready – 0/1 Para verificar el estado del RNG
0: datos no listos
1: datos listos

Fig. 3: Imagen del generador de números aleatorios basado en el módulo NRF24LE1
Escribimos código para que los usuarios entiendan cómo funciona. El número de 1 byte generado se envió al Puerto 0, donde están conectados los LED. Como el número generado es aleatorio, estos LED parpadearán de forma aleatoria.
Código fuente del proyecto
###
//Programa para#include"reg24le1.h" // Archivo de encabezado de E/S para NRF24LE1
#include"hal_delay.h" // archivo de encabezado que contiene funciones de retardo
###
Diagramas de circuito
| Diagrama de circuito-NRF24LE1-Módulo-Generador de números aleatorios | ![]() |
Vídeo del proyecto
