Simon dice sin microcontrolador

8

Me gustaría crear el clásico juego de Simon Says utilizando nada más que circuitos lógicos, LED e IC, no microcontroladores como el Arduino.

Me gustaría usar 4 LED y 4 interruptores táctiles para este circuito.

Estoy haciendo esto como un ejercicio educativo para mí, no estoy estudiando electrónica, sin embargo, estoy estudiando Informática.

Entiendo que necesitaré varios componentes, incluidos contadores de décadas y 555 temporizadores.

Sin embargo, mi pregunta es, ¿cómo puedo decidir qué LED mostrar en una secuencia aleatoria? Entiendo que puedo decantar contadores / Flip Flops para almacenar la secuencia en la memoria.

Jacob Clark
fuente

Respuestas:

5

En general, para generar números "aleatorios" en hardware (para fines de diversión), puede hacer algo como tomar un mecanismo que es algo impredecible y combinarlo con un mecanismo que sea predecible, pero no obvio.

Por ejemplo, si tiene un contador ejecutándose rápidamente, y muestrea la salida cada vez que el usuario presiona un botón (como al reproducir la secuencia anterior) que será algo aleatorio, ya que pueden tomar cantidades variables de tiempo. Pero alguien que juegue el sistema presionando los botones muy rápido podría tender a obtener los mismos pocos valores una y otra vez (aunque si el reloj está en el rango de MHz eso puede no ser una preocupación realista).

Por el contrario, puede usar un Registro de desplazamiento de retroalimentación lineal (Wikipedia) que alimenta una función combinatoria del estado actual de un registro de desplazamiento de nuevo en su entrada, para generar una secuencia que no es fácilmente obvia para los humanos, a pesar de que su salida para las mismas entradas En realidad será completamente predecible. Utilizado por sí mismo, tampoco sería una buena idea, ya que daría las mismas secuencias en cada partida del juego y sería rápidamente memorizado por un usuario repetido.

Pero, si combina dos métodos, como usar el temporizador para obtener un valor inicial impredecible, y luego usar el registro de desplazamiento de retroalimentación lineal para mezclarlo (o tal vez dejar que el LFSR funcione libremente contra un reloj rápido y muestrearlo según interacción del usuario) debería poder obtener algo lo suficientemente aleatorio para un juego de diversión.

Otra fuente que podría probar serían los bits de bajo orden de un convertidor analógico a digital.

Hagas lo que hagas, probablemente quieras simularlo (y también el diseño general de tu sistema) antes de construir el circuito. El proyecto es lo suficientemente complejo como para que valga la pena usar un FPGA pequeño o un CPLD más grande.

Y, por último, tenga en cuenta que, históricamente, el juego original de Simon aparentemente utilizaba un microprocesador inicial, el TMS1000. En general, las operaciones secuenciales complejas se pueden implementar de manera más eficiente de esa manera, con máquinas de estado elegidas solo para problemas que son simples, deben ejecutarse extremadamente rápido o son sustitutos de aprendizaje para el trabajo eventual en tales problemas.

Editar:

http://www.waitingforfriday.com/index.php/Reverse_engineering_an_MB_Electronic_Simon_game

Contiene algunas observaciones interesantes, incluido un cambio eventual del TMS1000 a lo que puede ser una versión etiquetada personalizada del mismo. Más relevante para su pregunta, sugiere que el original generó sus números aleatorios al muestrear un contador de ejecución libre cuando el usuario presionó un botón ;-)

Chris Stratton
fuente
Me pregunto cuántos chips, o qué tan complejo sería un CPLD, se necesitaría para construir un "procesador" que pudiera manejar un juego similar a la unidad de la marca Simon usando un "programa" almacenado en una ROM. Supongo que podría hacerse con menos de una docena de chips discretos disponibles en el mercado y una ROM 32Kx8 o menor; cuantos más chips, menor será la ROM que se requeriría. Si uno no necesitara el "juego 2", un registro de desplazamiento de retroalimentación basado en software podría manejar cualquier longitud de "secuencia" con 40 o más bits de almacenamiento (al elegir una secuencia de color, ejecute un LFSR de 20 bits hasta que se presione un botón , luego cópielo ...
supercat
... a un registro de respaldo. Luego reproduzca la secuencia generada por ese LFSR, copie el registro de respaldo nuevamente en el LFSR y espere a que el usuario presione los botones en esa secuencia.
supercat