Un piccolo microcontrollore (Atmel a 8 bit) controlla un numero di luci per presentare uno spettacolo di luci con molte sequenze di luce casuali fantasiose.
Uno pseudo-RNG adatto fa bene il suo lavoro, ma sto cercando un buon seme per questo. Sarà necessario un seme perché se qualcuno accende più dispositivi contemporaneamente, non sembrerà buono se tutti generassero le stesse sequenze di effetti finché non si allontanano lentamente a causa delle piccole differenze nelle loro singole sorgenti di clock.
Un ottimo metodo per seminare uno pseudo-RNG, che ho usato spesso, è possibile nel caso di un dispositivo che deve essere avviato con la pressione di un pulsante o la rotazione di un interruttore. Non appena µc è acceso, è possibile avviare un timer molto veloce e il valore di questo timer semina l'RNG non appena si preme il pulsante per la prima volta.
Il problema è che in questo scenario non ci sono pulsanti. Il programma deve iniziare non appena il dispositivo è acceso.
La posizione sul PCB è estremamente limitata (solo alcune delle parti SMD più piccole potrebbero adattarsi), quindi sto cercando la soluzione più piccola e più semplice possibile. Pertanto escluderò soluzioni fantasiose come hardware RNG reale, ricevitori radio, ecc.
Tutto quello che ho è un contatore-timer a 16 bit nella CPU e un portpin inutilizzato che ha accesso a un ADC.
La mia attuale soluzione è quella di utilizzare un resistore (il più impreciso possibile) per fornire circa la metà della tensione di alimentazione al pin ADC e inviare il RNG con il primo valore di conversione AD. Tuttavia, al giorno d'oggi la maggior parte dei resistori al 10% ha un'imprecisione ben al di sotto dell'1% (sarebbe divertente immaginare il volto di un fornitore quando dico loro che vogliamo i resistori SMD di peggiore qualità che riescano a trovare), quindi c'è un'alta probabilità di più unità che iniziano con lo stesso seme.
Un'alternativa migliore sarebbe quella di fare più conversioni e costruire un valore dai bit meno significativi di queste misurazioni. Tuttavia, ho usato l'ADC di questo tipo µc prima e so che è molto preciso. L'esecuzione dell'ADC alla massima velocità possibile potrebbe essere utile qui.
Qualcuno ha un suggerimento migliore? Non è necessario che il seme sia distribuito in modo perfettamente uniforme, ma più uniforme è la distribuzione, meglio è. Un seme a 16 bit con una distribuzione perfettamente uniforme sarebbe un sogno troppo bello per essere vero, ma penso che una distribuzione a metà strada decente su 5 o 6 bit potrebbe essere sufficiente.