¿Cómo implemento el juego Lights-Out usando puertas lógicas o chanclas?

9

Primero, para aquellos que no están familiarizados con el juego, así es como funciona el juego,

Como se Juega

El objetivo del juego es apagar todas las luces, por eso se llama "Lights Out", y cada vez que se presiona el botón / luz se invierte su estado, así como sus vecinos adyacentes norte / sur / este / oeste, y eso es más o menos .

Ahora, lo que se me ocurre es usar sandalias SR o sandalias JK. Esto se debe a su capacidad de actuar como elemento de almacenamiento (el estado inicial y el siguiente). Pero parece que no puedo pensar en formas de implementarlos realmente.

Otra idea es que cada conjunto de botones y sus botones / luces adyacentes (NSEW) tendrán su propia tabla de verdad, como esta:

tabla lógica

pero, ¿es posible que las variables de entrada sean las mismas que las variables de salida? ¿Hay alguna otra forma de hacer esto?

Julienn
fuente

Respuestas:

9

El enfoque obvio sería usar un procesador y hacer todo esto en el firmware.

Sin embargo, si realmente necesito hacer esto con cuchillos de piedra y pieles de oso por alguna razón, dedicaría un flip-flop a cada cuadrado. El flip flop de cada cuadrado se activaría presionando su botón o cualquiera de los cuatro botones vecinos. Por supuesto, esas pulsaciones de botón deben eliminarse. Nuevamente, esto sería más fácil en el firmware.

Una solución de hardware no sería tan compleja, pero todo se replicaría 25 veces, lo que la haría grande y tediosa de construir.

Adicional:

Aparentemente, la descripción anterior no es lo suficientemente clara. Aquí hay un diagrama de lo que hay en cada celda:

Las otras 4 entradas a la puerta NAND son impulsadas por las señales sin rebote de los 4 botones circundantes que también se supone que alternan el estado de este cuadrado. Del mismo modo, la señal sin rebote de este botón también va a una de las entradas de compuerta NAND de cada una de las 4 celdas circundantes.

Olin Lathrop
fuente
1
Esto suena como lo más factible de hacer. Usaría TFFs y vincularía todas las entradas T a "1.". Entonces tendría un interruptor momentáneo SPDT para cada botón. Ate un tiro a "0", un tiro a "1" y luego el poste a las entradas de reloj TFF correspondientes. Luego, cuando presiona un interruptor, alternará los flip-flops circundantes al generar un solo borde pos / neg.
Shamtam
1
@Shamtam: Sí, esa es una forma de eliminar el rebote si tienes conmutadores SPDT. Sin embargo, la mayoría de los botones pulsadores son normalmente abiertos SPST.
Olin Lathrop
Supongo que tendría que usar el interruptor SPDT para eliminar el rebote, ya sea pulsador o no. Ahora sé cómo conectar las entradas de este juego, pero lo que no entiendo es cómo conectar las salidas a los LED. Quiero decir, no puede ser solo una simple salida (Q) al LED y sus vecinos el complemento (Q ') ¿verdad? Además, otra pregunta, ¿necesito usar la entrada de señal de reloj del TFF? ¿Si es así, cómo?
Julienn
2
El flipflop para cada celda impulsa su LED directamente. La lógica que tiene que ver con las celdas vecinas entra en la entrada del flipflip, pero la salida permanece local en la celda. No, no se requieren interruptores SPDT para eliminar el rebote. Existen varias técnicas para eliminar el rebote de una sola señal, como la de un conmutador SPST.
Olin Lathrop
1
No, no entiendes la lógica. Normalmente, las salidas sin rebote son altas, por lo que todas las entradas a la puerta NAND son altas, lo que hace que la salida sea baja. Cuando se presiona cualquier botón, la entrada de NAND obtiene baja, lo que hace que la salida de NAND suba. Este borde bajo a alto hace que el FF cambie su estado.
Olin Lathrop
0

Diría que los flip flops T probablemente serían los más fáciles, ya que puedes alternar su estado de salida con una sola entrada. Puede usar un solo flip flop para cada LED y con la entrada vinculada a su botón y la salida vinculada a su LED. Entonces podría tener cada botón atado a las entradas de los 4 flip flops adyacentes para alternar también su estado.

Si desea utilizar los flip flops JK, puede hacer que los flip flops T pasen su entrada a ambas entradas (J y K)

Anónimo
fuente
2
Puede ampliar su respuesta explicando cómo conecta 5 interruptores a cada flip-flop sin que interfieran entre sí. Además, ¿qué pasa con el cambio de rebote?
Dave Tweed
0

Si uno quisiera construir un juego de este tipo hasta 7x7 por lógica discreta, el diseño más práctico probablemente sería usar un registro de turno circulante para mantener el estado del tablero y un contador de seis bits para realizar un seguimiento del turno posición de los datos dentro del registro. Cambie los datos a través de la palanca de cambios en grupos de 8 bits para manejar una pantalla multiplexada y escanee un teclado multiplexado. Tenga un contador de "flip light" de siete bits que se ejecutará cada vez que los seis bits inferiores no sean cero, o cuando el estado del bit superior coincida con el estado del botón actualmente decodificado. Cambie el estado de la luz actual cuando se aplique todo lo siguiente:

6-bit counter isn't  xxx111
6-bit counter isn't  111xxx
7-bit counter isn't xxxxx00
7-bit counter isn't xx00xxx
7-bit counter is    00xx0xx

Tenga en cuenta que si bien se necesitaría una cantidad significativa de lógica para decodificar esos estados de contador, sería trivial en comparación con la cantidad de chips necesarios para implementar cada luz por separado.

Super gato
fuente