GENERATORE DI VERI NUMERI RANDOM

Schema con Microcontrollore per Generare Numeri Random Casuali e non Pseudo Random come quelli Generati dalle librerie…

 

 

 



 

INTRO

Il seguente schema sfrutta un microcontrollore PIC18 per illustrare come è possibile generare numeri random, però lo stesso principio usato in questo schema può essere usato per altri microcontrollori sempre della famiglia PIC oppure Arduino e ATMEGA o altri.

Per la generazione di numeri random esistono molte librerie, ma se ci fate caso i numeri generati da queste librerie sono chiamati pseudo random, ovvero sembrano casuali ma non lo sono, vengono generati da una lista di numeri o con un algoritmo, quindi può succedere che vi siano sequenze simili di numeri o che si ripetano intere sequenze ad ogni accensione.

In elettronica un segnale random, non prevedibile è il rumore; il rumore può essere di vari tipi (rumore bianco, rumore rosa, rumore termico oppure gaussiano) è ha come caratteristica quella di avere una banda ben definita (ovvero vi saranno un certo numero di componenti frequenziali note a priori) però ha un andamento nel tempo imprevedibile.

Questo schema sfrutta un generatore di rumore rosa e il convertitore ADC del microcontrollore per generare numeri realmente random, questo perché vado a campionare ad istanti prefissati o no un segnale che è casuale, quindi acquisisco valori che non seguono una legge precisa e cambiano o no in continuazione.

 



 

CODICE

Il codice è molto semplice ed è il seguente:

short random1;                       //Variabile che contiene il valore

int random(){                        //Sottofunzione creazione numero random
  int random;                        //Inizializza una variabile
  random = ADC_Read(1);              //Leggi ADC
  random -= 1024;                    //porta a 0 il livello medio
  random = random & 0x0000011111;    //Mantieni solo 5 bit
  random = abs(random);              //numero random tt positivi
  return random;                     //ritorna il valore random
}

void main() {                        //Programma principale
  ADC_Init();                        //Inizializza ADC
  TRISB = 0;                         //Portb uscite
  
  while(1){                          //Ciclo infinito
    random1 = random();              //Richiama la funzione random
    PORTB = random1;                 //valore random in uscita
    Delay_ms(1000);
  }
}

Si inizializza prima di tutto una variabile per contenere il valore random, poi una funzione che lo genera. Questa funzione legge il valore dall’ADC, quindi legge il valore del segnale di rumore e poi sottrae metà valore massimo dell’ADC per una questione che illustrerò nello schema.  Infine viene trasformato il risultato da un numero a 10bit ad un numero a 5bit e vengono resi positivi tutti i valori (visto che il -1024 potrebbe aver creato valori negativi).

Nel programma principale si va a porre in uscita il numero random sulle PORTB e poi si attente 1 secondo in modo tale da avere un numero random ogni secondo.

 

SCHEMA

Lo schema del generatore di rumore rosa con componente DC di valore VCC/2 (ovvero 2.5v se l’alimentazione è 5V) è il seguente:

Il circuito è composto da Q1, Q2, R1, R2 e C1 che generano un rumore bianco, ovvero un segnale sempre casuale ma con una banda maggiore, ovvero a frequenza maggiore. C2 ed R4 formano un filtro passa alto che blocca la componente Dc del primo stadio.

Il resto del circuito è un filtro passa basso ed è composto da R5 che in realtà è un resistore di polarizzazione, R6, R7, R8, R3, C3, C4, C5 e Q3 formano invece un filtro attivo a transistor in modo tale da ridurre la banda del rumore bianco e trasformarlo in rumore rosa. Infine C6 blocca la componente continua ed R9 e R10 aggiungono una componente continua perfettamente a VCC/2 ovvero 2.5V.

Considerando che il convertitore convertirà il valore VCC/2 con il valore 1024 ecco spiegata la sottrazione di questo valore nel codice.

Lo schema del microcontrollore è il seguente:

Il microcontrollore è alimentato a 5V con il positivo sul pin 20 e il negativo sui pin 19 e 8. Il circuito di oscillazione è formato da un quarzo a 4MHz, C1 e C2. I LED in uscita sono messi per visualizzare il numero random, in particolare i primi 4 bit anche se il numero è a 5 bit. Il numero casuale va quindi da 0 a 31.

Il rumore rosa entra nell’ADC che lo converte attraverso il canale 1 ovvero RA1.

 

DOWNLOAD

Potete scaricare la simulazione del circuito con PROTEUS e il codice compilato con MIKROC al seguente LINK!!!

 




 

[Voti Totali: 0 Media Voti: 0]
Segui la Nostra Pagina Facebook: Facebook

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *