Wie implementiere ich ein Lights-Out-Spiel mit Logikgattern oder Flip-Flops?

9

Erstens funktioniert das Spiel für diejenigen, die mit dem Spiel nicht vertraut sind, so:

Spielweise

Das Ziel des Spiels ist es, alle Lichter auszuschalten, daher "Licht aus" genannt, und jeder Druck auf den Knopf / das Licht kehrt seinen Zustand sowie seine Nachbarn in Nord / Süd / Ost / West um, und das war's auch schon .

Was ich mir jetzt vorstellen kann, ist die Verwendung von SR-Flip-Flops oder JK-Flip-Flops. Dies liegt an seiner Fähigkeit, als Speicherelement zu fungieren (Anfangszustand und nächster Zustand). Aber ich kann mir anscheinend keine Möglichkeiten vorstellen, sie tatsächlich umzusetzen.

Eine andere Idee ist, dass jeder Satz von Tasten und die angrenzenden (NSEW) Tasten / Lichter eine eigene Wahrheitstabelle haben, wie folgt:

Logiktabelle

Aber ist es möglich, dass die Eingabevariablen mit den Ausgabevariablen identisch sind? Gibt es andere Möglichkeiten, dies zu tun?

Julienn
quelle

Antworten:

9

Der naheliegende Ansatz wäre, einen Prozessor zu verwenden und dies alles in der Firmware zu tun.

Wenn ich dies jedoch aus irgendeinem Grund wirklich mit Steinmessern und Bärenfellen tun müsste, würde ich jedem Quadrat einen umschaltbaren Flip-Flop widmen. Das Flip-Flop jedes Quadrats würde durch Drücken seines Knopfes oder eines der vier benachbarten Knöpfe umgeschaltet. Natürlich müssen diese Tastendrücke entprallt werden. Auch dies wäre in der Firmware einfacher.

Eine Hardwarelösung wäre nicht allzu komplex, aber alles würde 25 Mal repliziert, was das Erstellen groß und mühsam macht.

Hinzugefügt:

Anscheinend ist die obige Beschreibung nicht klar genug. Hier ist ein Diagramm, was sich in jeder Zelle befindet:

Die anderen 4 Eingänge des NAND-Gatters werden von den entprellen Signalen der 4 umgebenden Tasten angesteuert, die auch den Zustand dieses Quadrats umschalten sollen. Ebenso geht das entprellende Signal von dieser Taste auch zu einem der NAND-Gate-Eingänge jeder der 4 umgebenden Zellen.

Olin Lathrop
quelle
1
Das klingt nach dem Machbarsten. Ich würde TFFs verwenden und alle T-Eingänge mit "1" verknüpfen. Dann hätte ich für jede Taste einen SPDT-Momentschalter. Binden Sie einen Wurf an "0", einen Wurf an "1" und dann den Pol an die entsprechenden TFF-Takteingänge. Wenn Sie dann einen Schalter drücken, werden die umgebenden Flip-Flops umgeschaltet, indem eine einzelne Pos / Neg-Flanke erzeugt wird.
Shamtam
1
@ Shamtam: Ja, das ist eine Möglichkeit zum Entprellen, wenn Sie SPDT-Schalter haben. Die meisten Drucktasten sind jedoch normalerweise nur SPST geöffnet.
Olin Lathrop
Ich denke, ich müsste den SPDT-Schalter zum Entprellen verwenden, egal ob Drucktaste oder nicht. Ich verstehe jetzt, wie man die Eingänge dieses Spiels verbindet, aber was ich nicht bekomme, ist, wie man die Ausgänge mit den LEDs verbindet. Ich meine, es kann nicht einfach eine einfache Ausgabe (Q) an die LED und ihre Nachbarn sein, das Komplement (Q '), oder? Auch eine andere Frage, muss ich den Taktsignaleingang des TFF verwenden? Wenn das so ist, wie?
Julienn
2
Das Flipflop für jede Zelle steuert ihre LED direkt an. Die Logik, die mit benachbarten Zellen zu tun hat, tritt in den Eingang des Flipflips ein, aber der Ausgang bleibt lokal in der Zelle. Nein, SPDT-Schalter sind zum Entprellen nicht erforderlich. Es gibt verschiedene Techniken zum Entprellen eines einzelnen Signals wie von einem SPST-Schalter.
Olin Lathrop
1
Nein, du verstehst die Logik nicht. Normalerweise sind die entprellen Ausgänge hoch, so dass alle Eingänge des NAND-Gatters hoch sind, was den Ausgang niedrig treibt. Wenn eine Taste gedrückt wird, wird der NAND-Eingang niedrig, wodurch der NAND-Ausgang hoch wird. Diese niedrige bis hohe Flanke bewirkt, dass der FF seinen Zustand umschaltet.
Olin Lathrop
0

Ich würde sagen, dass T-Flip-Flops wahrscheinlich am einfachsten sind, da Sie ihren Ausgangszustand mit einem einzigen Eingang umschalten können. Sie können für jede LED ein einzelnes Flip-Flop verwenden, wobei der Eingang an Ihre Taste und der Ausgang an Ihre LED gebunden ist. Dann könnten Sie jede Taste an die Eingänge der 4 benachbarten Flip-Flops binden lassen, um auch ihren Zustand umzuschalten.

Wenn Sie JK-Flip-Flops verwenden möchten, können Sie T-Flip-Flops daraus machen, indem Sie Ihren Eingang an beide Eingänge (J und K) übergeben.

Anonym
quelle
2
Sie können Ihre Antwort erweitern, indem Sie erklären, wie Sie 5 Schalter an jedes Flip-Flop anschließen, ohne dass sie sich gegenseitig stören. Und was ist mit Switch Bounce?
Dave Tweed
0

Wenn man ein solches Spiel bis zur Größe 7x7 aus diskreter Logik bauen wollte, wäre das praktischste Design wahrscheinlich, ein zirkulierendes Schieberegister zu verwenden, um den Zustand des Bretts zu halten, und einen Sechs-Bit-Zähler, um die Verschiebung zu verfolgen Position der Daten innerhalb des Registers. Verschieben Sie Daten in Gruppen von 8 Bit durch den Shifter, um eine Multiplex-Anzeige anzusteuern, und scannen Sie eine Multiplex-Tastatur. Haben Sie einen 7-Bit- "Flip-Light" -Zähler, der immer dann ausgeführt wird, wenn die unteren sechs Bits ungleich Null sind oder wenn der Status des oberen Bits mit dem Status der derzeit decodierten Taste übereinstimmt. Schalten Sie den Status des aktuellen Lichts um, wenn alle der folgenden Bedingungen zutreffen:

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

Es ist zu beachten, dass zwar eine erhebliche Menge an Logik erforderlich wäre, um diese Zählerzustände zu decodieren, dies jedoch im Vergleich zu der Anzahl von Chips, die erforderlich sind, um jedes Licht separat zu implementieren, trivial wäre.

Superkatze
quelle