Un pequeño microcontrolador (8 bits de Atmel) controla un número de luces para presentar un espectáculo de luz con muchos de fantasía aleatorizado secuencias de luces.
Un adecuado pseudo-RNG hace su trabajo muy bien, pero estoy buscando una buena semilla. Una semilla que va a ser necesario porque si alguien se da múltiples dispositivos al mismo tiempo, no se verá bien si todos ellos generan las mismas secuencias de efectos hasta que poco a poco se separen debido a las pequeñas diferencias en sus fuentes de reloj.
Un método muy bueno para la semilla de un pseudo-RNG, que me utiliza a menudo, es posible en el caso de un dispositivo que tiene que empezar con la prensa de un botón o accionar un interruptor. Tan pronto como el µc está encendida, un muy rápido temporizador puede ser iniciado, y el valor de este temporizador semillas de la RNG tan pronto como se pulsa el botón por primera vez.
El problema es que, en este escenario, no hay botones. El programa debe comenzar tan pronto como se enciende el dispositivo.
El lugar en el PCB es muy limitada (nada más que un par de los más pequeños de componentes SMD podría encajar), así que estoy buscando la más pequeña y más simple posible solución. Por lo tanto, voy a descartar de lujo soluciones como verdadero generador de números aleatorios por hardware, receptores de radio, etc.
Todo lo que tengo es de 16 bit de temporizador-contador de la CPU, y un sin usar portpin que tiene acceso a un ADC.
Mi solución actual es usar un resistor (como imprecisa como sea posible) para proporcionar aproximadamente la mitad de la tensión de alimentación para el ADC pin, y la semilla del generador de números aleatorios con el primer ANUNCIO, el valor de conversión. Sin embargo, hoy en día más del 10% de resistencias tienen una inexactitud, bien por debajo del 1% (que sería divertido imaginar la cara de un proveedor cuando les digo queremos que la peor calidad resistencias SMD pueden encontrar), así que hay una probabilidad muy alta de múltiples unidades de partida con la misma semilla.
Una mejor alternativa sería realizar múltiples conversiones y construir un valor fuera de los bits menos significativos de estas mediciones. Sin embargo, he utilizado el ADC de este µc tipo antes y sé que es muy precisa. Ejecuta el ADC a la mayor velocidad posible podría ser de ayuda aquí.
¿Alguien tiene una idea mejor? La semilla no es necesario ser perfectamente distribuidos de manera uniforme, pero cuanto más uniforme es la distribución es, el mejor. De 16 bits de la semilla con una perfecta distribución uniforme sería un sueño demasiado bueno para ser verdad, pero creo que un medio decente de distribución de más de 5 o 6 bits puede ser suficiente.