Simon sagt ohne Mikrocontroller

Ich würde gerne das klassische Spiel von Simon Says entwickeln, das nichts als Logikschaltungen, LEDs und ICs verwendet, keine Mikrocontroller wie den Arduino.

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

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

Ich verstehe, dass ich mehrere Komponenten benötige, darunter Dekadenzähler und 555-Timer.

Meine Frage ist jedoch, wie kann ich entscheiden, 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 (1)

Im Allgemeinen können Sie zum Generieren von "zufälligen" Zahlen in Hardware (für Unterhaltungszwecke) etwas tun, z. B. einen etwas unvorhersehbaren Mechanismus nehmen und ihn mit einem vorhersehbaren, aber nicht offensichtlichen Mechanismus kombinieren.

Wenn Sie beispielsweise einen Zähler haben, der schnell läuft, und die Ausgabe jedes Mal 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 die gleichen wenigen Werte zu erhalten (obwohl dies bei einem Takt im MHz-Bereich möglicherweise kein realistisches Problem darstellt).

Umgekehrt können Sie ein Schieberegister mit linearer Rückkopplung (Wikipedia) verwenden , das eine kombinatorische Funktion des aktuellen Zustands eines Schieberegisters wieder in seinen Eingang einspeist, um eine Sequenz zu erzeugen, die für Menschen nicht ohne weiteres offensichtlich ist, obwohl sein Ausgang für die gleichen Eingänge ist wird eigentlich völlig vorhersehbar sein. Für sich genommen wäre dies auch keine gute Idee, da es bei jedem Spielzug die gleichen Sequenzen geben würde und so schnell von einem wiederholten Benutzer auswendig gelernt werden würde.

Wenn Sie jedoch zwei Methoden kombinieren, z. B. den Timer verwenden, um einen unvorhersehbaren Startwert zu erhalten, und dann das lineare Feedback-Schieberegister verwenden, um ihn zu verwechseln (oder vielleicht das LFSR frei gegen eine schnelle Uhr laufen lassen und es basierend darauf abtasten Benutzerinteraktion) sollten Sie in der Lage sein, etwas Zufälliges für ein Unterhaltungsspiel zu erhalten.

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 gesamtes Systemdesign), bevor Sie die Schaltung bauen. Das Projekt ist so komplex, dass sich der Einsatz eines kleinen FPGA oder eines größeren CPLD lohnen kann.

Und denken Sie schließlich daran, dass das ursprüngliche Simon-Spiel historisch gesehen anscheinend einen frühen Mikroprozessor, den TMS1000, verwendet hat. 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 laufen müssen oder Lernersatz für die eventuelle Arbeit 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 eines eventuellen Wechsels vom TMS1000 zu einer möglicherweise benutzerdefinierten Version davon. Relevanter für Ihre Frage ist, dass das Original seine Zufallszahlen generiert hat, indem es einen frei laufenden Zähler abgetastet hat, als der Benutzer eine Taste gedrückt hat ;-)

Ich frage mich, wie viele Chips oder wie komplex ein CPLD erforderlich wäre, um einen "Prozessor" zu bauen, der ein Spiel ähnlich der Einheit der Marke Simon mit einem in einem ROM gespeicherten "Programm" verarbeiten könnte? Meine Vermutung wäre, dass dies mit weniger als einem Dutzend handelsüblicher diskreter Chips und einem ROM von 32Kx8 oder kleiner möglich wäre; Je mehr Chips, desto kleiner das ROM, das erforderlich wäre. Wenn man "Spiel 2" nicht brauchte, könnte ein softwarebasiertes Feedback-Schieberegister jede Länge von "Sequenzen" 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 kopieren...
...in ein Backup-Register. Spielen Sie dann die von diesem LFSR erzeugte Sequenz ab, kopieren Sie das Sicherungsregister zurück in das LFSR und warten Sie, bis der Benutzer die Tasten in dieser Sequenz drückt.