Simon sagt ohne Mikrocontroller


8

Ich möchte das klassische Spiel von Simon Says nur mit Logikschaltungen, LEDs und ICs erstellen, ohne Mikrocontroller wie den Arduino.

Ich möchte 4 LEDs und 4 taktile Schalter für diese Schaltung verwenden.

Ich mache das als pädagogische Übung für mich selbst, ich studiere keine Elektronik, aber ich studiere Informatik.

Ich verstehe, dass ich mehrere Komponenten benötigen werde, einschließlich Dekadenzähler und 555 Timer.

Meine Frage ist jedoch, wie ich entscheiden kann, welche LEDs in zufälliger Reihenfolge angezeigt werden sollen. Ich verstehe, dass ich Zähler / Flip-Flops dekadieren kann, um die Sequenz im Speicher zu speichern.

Antworten:


5

Im Allgemeinen können Sie zum Generieren von "zufälligen" Zahlen in der Hardware (für Unterhaltungszwecke) beispielsweise einen Mechanismus verwenden, der etwas unvorhersehbar ist, und ihn mit einem Mechanismus kombinieren, der vorhersehbar, aber nicht offensichtlich ist.

Wenn beispielsweise ein Zähler schnell läuft und Sie die Ausgabe abtasten, wenn der Benutzer eine Taste drückt (z. B. während der Wiedergabe der vorherigen Sequenz), ist dies etwas zufällig, da dies unterschiedlich lange dauern kann. Aber jemand, der das System durch sehr schnelles Drücken von Tasten spielt, kann dazu neigen, immer wieder dieselben wenigen Werte zu erhalten (wenn der Takt jedoch im MHz-Bereich liegt, ist dies möglicherweise kein realistisches Problem).

Umgekehrt können Sie ein lineares Rückkopplungsschieberegister (Wikipedia) verwenden, das eine kombinatorische Funktion des aktuellen Zustands eines Schieberegisters in seine Eingabe zurückspeist, um eine Sequenz zu erzeugen, die für Menschen nicht ohne weiteres offensichtlich ist, obwohl ihre Ausgabe für dieselben Eingaben erfolgt wird tatsächlich völlig vorhersehbar sein. Für sich genommen wäre dies auch keine gute Idee, da es bei jedem Spiel die gleichen Sequenzen geben und so schnell von einem wiederkehrenden Benutzer gespeichert werden würde.

Wenn Sie jedoch zwei Methoden kombinieren, z. B. den Timer verwenden, um einen unvorhersehbaren Startwert zu erhalten, und dann das lineare Rückkopplungsschieberegister verwenden, um ihn zu verwechseln (oder den LFSR möglicherweise gegen einen schnellen Takt frei laufen zu lassen und ihn basierend darauf abzutasten Benutzerinteraktion) Sie sollten in der Lage sein, etwas Zufälliges für ein Unterhaltungsspiel zu bekommen.

Eine andere Quelle, die Sie ausprobieren könnten, wären die niederwertigen Bits eines Analog-Digital-Wandlers.

Was auch immer Sie tun, Sie möchten es wahrscheinlich simulieren (und auch Ihr Gesamtsystemdesign), bevor Sie die Schaltung erstellen. Das Projekt ist so komplex, dass sich die Verwendung eines kleinen FPGA oder einer größeren CPLD lohnen kann.

Und denken Sie schließlich daran, dass das ursprüngliche Simon-Spiel in der Vergangenheit offenbar einen frühen Mikroprozessor verwendet hat, den TMS1000. Im Allgemeinen können komplexe sequentielle Operationen auf diese Weise effizienter implementiert werden, wobei Zustandsmaschinen nur für Probleme ausgewählt werden, die einfach sind, extrem schnell ausgeführt werden müssen oder Ersatz für eventuelle Arbeiten an solchen Problemen sind.

Bearbeiten:

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

Enthält einige interessante Beobachtungen, einschließlich einer eventuellen Änderung des TMS1000 zu einer möglicherweise benutzerdefinierten Version davon. Für Ihre Frage relevanter ist, dass das Original seine Zufallszahlen durch Abtasten eines frei laufenden Zählers generiert hat, als der Benutzer einen Knopf drückte ;-)


Ich frage mich, wie viele Chips oder wie komplex eine CPLD erforderlich wäre, um einen "Prozessor" zu erstellen, der ein Spiel ähnlich der Simon-Markeneinheit mit einem in einem ROM gespeicherten "Programm" handhaben könnte. Meine Vermutung wäre, dass dies mit weniger als einem Dutzend handelsüblichen diskreten Chips und einem ROM 32Kx8 oder kleiner möglich wäre. Je mehr Chips vorhanden sind, desto kleiner ist der erforderliche ROM. Wenn man "Spiel 2" nicht benötigt, kann ein softwarebasiertes Feedback-Schieberegister jede Länge von "Sequenz" mit etwa 40 Speicherbits verarbeiten (wenn Sie eine Farbsequenz auswählen, führen Sie ein 20-Bit-LFSR aus, bis eine Taste gedrückt wird , dann kopiere es ...
Supercat

... in ein Sicherungsregister. Spielen Sie dann die von diesem LFSR generierte Sequenz ab, kopieren Sie das Sicherungsregister zurück in das LFSR und warten Sie, bis der Benutzer die Tasten in dieser Sequenz gedrückt hat.
Supercat
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.