Generador de pulsos pseudoaleatorios de la vieja escuela (solicitando asistencia con el diseño de hardware)

Me gustaría diseñar un generador de pulsos pseudoaleatorios de la vieja escuela para activar varios tipos de eventos (solo sugerencias de hardware, no circuitos integrados programables). Los eventos que quiero controlar deben ocurrir, en términos generales, en las siguientes categorías de frecuencia: muchas veces por minuto, algunas veces por minuto, una vez por minuto, una vez cada pocos minutos, una o dos veces por hora. Dentro de cada categoría de frecuencia, el evento debe ocurrir "aleatoriamente", es decir, la recurrencia del evento no debe ser exactamente predecible. Para darte una idea de por qué quiero construir esto: imagina un videojuego que tiene varios elementos de escena, algunos de los cuales ocurren con mucha frecuencia, algunos que ocurren con bastante frecuencia y otros que son poco frecuentes... entiendes la idea, yo esperanza.

La razón por la que me gustaría una solución solo de hardware es que intento deliberadamente aprender sobre lógica discreta, cosas como registros de desplazamiento, multiplexores, lógica booleana, etc. La eficiencia, la velocidad, el tamaño y el costo no son mis principales preocupaciones. ¡Espero que haya algunos fanáticos de la electrónica antigua que me ayuden en mi búsqueda del conocimiento! Gracias :-) PD: un esquema dibujado sería muy apreciado ya que estoy aprendiendo y probablemente no pueda entender o crear sugerencias vagas.

Bienvenido a EE.SE. Al no usar MPU para programar, necesita muchas etapas para aleatorizar el flujo de datos original.
no puedes buscar google imagenes?
Este nerdist.com/wall-of-lava-lamps-protect-internet-traffic es el último generador analógico de números aleatorios
Muchas etapas están bien. Sí, puedo buscar imágenes en Google. ¡Gracias por la sugerencia de la lámpara de lava!
Los registros de desplazamiento y los multiplexores generalmente se consideran dispositivos digitales, no analógicos (aunque también hay un dispositivo llamado multiplexor analógico). La lógica booleana es la matemática detrás de la lógica digital. Si desea hacer su diseño a partir de compuertas y flip-flops individuales, lo llamaríamos un diseño a partir de "dispositivos lógicos discretos", no "computación analógica".
El dispositivo de la lámpara de lava está destinado a producir una salida verdaderamente aleatoria, no pseudoaleatoria. Y es probable que casi cualquier dispositivo que haga con dispositivos analógicos reales sea el mismo: aleatorio en lugar de pseudoaleatorio.
Gracias por aclarar los términos; eso es útil para mi búsqueda, ya que a menudo no sé cuál es la terminología correcta. Sí, lo que busco es una lógica discreta (a diferencia de una pared de lámparas de lava, aunque muy chula).
¿Desea pseudoaleatorio, ya que puede repetir la misma secuencia si comienza con las mismas condiciones de entrada, o también sería aceptable no repetible?
Se prefiere no repetible. Es importante que tenga categorías generales de frecuencia de eventos, pero la aleatoriedad dentro de esas categorías es ideal, incluso si eso significa un valor atípico ocasional.
Veo tu dilema. Cuantas más etapas aleatorias agregue, más posibilidades hay de "armónicos", donde los subpatrones comienzan a repetirse. Estás emulando el cifrado hasta cierto punto.
Si nunca desea que el patrón se repita, siempre debe cambiar la retroalimentación o el ruido aleatorio en cada ciclo completo. Si se necesitan 1000 iteraciones antes de una repetición parcial, habrá tenido éxito.
Puede hacer un LFSR con registros de desplazamiento y puertas XOR. Luego puede Y n bits diferentes juntos para hacer una salida que sea verdadera 1/2 ^ n del tiempo.
Pseudo aleatorio parece aleatorio, pero no es realmente aleatorio. Entonces, ¿qué pides: aleatorio o pseudo aleatorio?
Una sugerencia es usar un generador de secuencia larga de, digamos, 24 bits que registra cada vez que necesita un retraso aleatorio de 8 o 16 bits y escalar en consecuencia, pero precargarlo con conteos aleatorios al comienzo del juego a 15 MHz durante la duración. de la pulsación y un poco más dependiendo de la intensidad de la luz o del error de tensión de alimentación.

Respuestas (2)

Una buena manera de generar aleatoriedad usando lógica discreta es explotar las características de metaestabilidad de un flip-flop.

Un flip-flop D es un tipo de flip-flop que tiene un reloj (entrada de aspecto triangular) y una entrada de datos (entrada D) como se muestra a continuación. Normalmente, el estado de la entrada D se transfiere a la salida Q/!Q un retraso de propagación después de un flanco ascendente en el reloj.

Chanclas D

(de http://www.learningaboutelectronics.com/images/D-flip-flop.png )

Los datos deben "establecer" una cantidad específica de tiempo antes del borde del reloj y "mantener" una cantidad específica de tiempo después del borde del reloj para asegurar que la entrada se transfiera correctamente a la salida. Si no se cumplen los tiempos de configuración y retención, el estado de la salida en el tiempo de retardo de propagación normal para el flip-flop se vuelve aleatorio. La aleatoriedad se puede ajustar variando la frecuencia y la fase del reloj y los datos y la cantidad de tiempo que espera para verificar el estado de la salida.

El siguiente gráfico es de un artículo de TI que analiza las características de metaestabilidad de varias familias lógicas de 5V. En general, cuanto más lenta es la lógica, peor es la metaestabilidad y más a menudo se producen errores aleatorios. Esto significa que las familias lógicas más antiguas son más útiles para generar errores aleatorios. El gráfico muestra que al usar la lógica de estilo 74HC, la tasa de error se puede ajustar de miles de veces por segundo a una vez por día variando el tiempo de espera después de un reloj en el que observa la salida del flip-flop (tx). Este gráfico específico es para un reloj de 1 MHz y una entrada de datos de 500 KHz.

ingrese la descripción de la imagen aquí

Tenga en cuenta que la metaestabilidad es sensible al retraso, la temperatura y el voltaje, por lo que sintonizar una tasa de evento específica podría ser un desafío. Pero podría ser posible construir algo lo suficientemente bueno para sus necesidades.

El circuito de prueba del documento de TI se muestra a continuación. Puede ser un punto de partida para un circuito de generación de eventos aleatorios.

circuito de prueba de metaestabilidad

@KellyHeaton Si cree que la respuesta es útil, vote a favor. Después de un tiempo, elija la mejor respuesta y acepte la respuesta.
@Hazem Me encantaría votar pero no veo una opción en mi interfaz (creo que como soy un usuario nuevo todavía no tengo este privilegio). Además, todavía estoy considerando las diferentes respuestas, no hay una sola.

La respuesta a esta pregunta es que hay muchas respuestas, pero el enfoque más común es usar un registro de desplazamiento de retroalimentación lineal. Empecé con esta idea y probé dos registros de desplazamiento de 8 bits (parte de TI CD54/74AC164E) cronometrados por un temporizador 555 en modo astable. Dejé flotando las entradas seriales de datos de los registros de desplazamiento. Antes de agregar puertas XOR (la parte de retroalimentación lineal), probé este circuito con LED para visualizar lo que estaba sucediendo. Resulta que los dos registros de desplazamiento comienzan en diferentes estados (presumiblemente porque sus entradas de datos son flotantes). Sus estados permanecen sin sincronizar a medida que continúan cambiando, lo que puede ver en este video:

https://www.kellyheatonstudio.com/blog/2018/9/6/shift-registers

Los dos registros de desplazamiento de 8 bits están en la región central de mi protoboard. A la derecha hay un temporizador 555 en modo astable que proporciona un pulso de reloj de aproximadamente 1x por segundo. A la izquierda hay un regulador de 5 voltios; esta parte es irrelevante si tiene el voltaje de suministro de CC correcto, pero el mío es de 12 V CC.

Quizás este enfoque pirateado es toda la aparente aleatoriedad que necesito (soy un artista, no un criptógrafo). Si no, agregaré comentarios lineales y/o seguiré los consejos de @ crj11 a continuación con respecto a la explotación de las características metaestables de los flip flops (que son lo que hay dentro de los registros de desplazamiento). De cualquier manera, creo que al usar múltiples registros de desplazamiento y múltiples temporizadores 555 no necesitaré muchos comentarios y ciertamente nada sofisticado para que el sistema parezca aleatorio, aunque técnicamente no lo es.

En cuanto a la frecuencia de mis eventos (a menudo, a veces, rara vez...), planeo cronometrar diferentes registros de desplazamiento a diferentes velocidades. La aplicación de puertas lógicas a las salidas de estos diferentes registros (a diferentes velocidades de reloj) debería darme las categorías generales de frecuencia de eventos que busco, ya que las velocidades de reloj más rápidas darán como resultado más "positivos" lógicos (o cualquiera que sea la terminología correcta) . Espero que esto tenga sentido.

A continuación hay algunos recursos para personas que, como yo, no conocen la terminología correcta o no entienden cómo se usan los registros de desplazamiento para la generación de números pseudoaleatorios.

Buena descripción general para responder a la pregunta "¿qué es un registro de desplazamiento de retroalimentación lineal" (LFSR): https://zipcpu.com/dsp/2017/11/11/lfsr-example.html

Sobre la elección de toques para un registro de desplazamiento de retroalimentación lineal: https://cs.stackexchange.com/questions/1121/choosing-taps-for-linear-feedback-shift-register

Mini proyecto sobre cómo implementar un LFSR:  https://www.slideshare.net/KishoreChandrahasVanam/lfsr

Otro documento útil sobre el uso de un LFSR de 8 bits (es decir, el chip CD54/74AC164 de Texas Instruments): https://pdfs.semanticscholar.org/320a/8b2e781ac6165b400eca96047489685fd1f7.pdf