Simon dit sans microcontrôleur

8

Je voudrais créer le jeu classique de Simon Says en n'utilisant que des circuits logiques, des LED et des circuits intégrés, aucun microcontrôleur comme l'Arduino.

Je voudrais utiliser 4 LED et 4 commutateurs tactiles pour ce circuit.

Je fais cela comme un exercice éducatif pour moi-même, je n'étudie pas l'électronique mais j'étudie l'informatique.

Je comprends que j'aurai besoin de plusieurs composants, y compris des compteurs de décades et 555 minuteries.

Cependant, ma question est, comment puis-je décider quelles LED afficher dans une séquence aléatoire? Je comprends que je peux décades compteurs / tongs pour stocker la séquence en mémoire.

Jacob Clark
la source

Réponses:

5

Généralement, pour générer des nombres "aléatoires" dans le matériel (à des fins de divertissement), vous pouvez faire quelque chose comme prendre un mécanisme qui est quelque peu imprévisible et le combiner avec un mécanisme qui est prévisible, mais pas évident.

Par exemple, si vous avez un compteur qui s'exécute rapidement et échantillonnez la sortie chaque fois que l'utilisateur appuie sur un bouton (comme lors de la lecture de la séquence précédente) qui sera quelque peu aléatoire, car cela peut prendre plus ou moins de temps. Mais quelqu'un jouant au système en appuyant très rapidement sur les boutons pourrait avoir tendance à obtenir les mêmes valeurs encore et encore (bien que si l'horloge est dans la plage des MHz, cela ne peut pas être un problème réaliste).

Inversement, vous pouvez utiliser un registre à décalage à rétroaction linéaire (Wikipedia) qui alimente une fonction combinatoire de l'état actuel d'un registre à décalage dans son entrée, pour générer une séquence qui n'est pas facilement évidente pour les humains, même si sa sortie pour les mêmes entrées sera en fait entièrement prévisible. Utilisé seul, ce ne serait pas non plus une bonne idée car il donnerait les mêmes séquences à chaque jeu du jeu et serait donc rapidement mémorisé par un utilisateur répétitif.

Mais, si vous combinez deux méthodes, telles que l'utilisation de la minuterie pour obtenir une valeur de départ imprévisible, puis l'utilisation du registre à décalage à rétroaction linéaire pour la mélanger (ou peut-être laisser le LFSR fonctionner librement contre une horloge rapide et l'échantillonner en fonction de interaction avec l'utilisateur), vous devriez pouvoir obtenir quelque chose d'assez aléatoire pour un jeu d'amusement.

Une autre source que vous pourriez essayer serait les bits de poids faible d'un convertisseur analogique-numérique.

Quoi que vous fassiez, vous voudrez probablement le simuler (ainsi que la conception globale de votre système) avant de construire le circuit. Le projet est suffisamment complexe pour que l'utilisation d'un petit FPGA ou d'un plus grand CPLD puisse être utile.

Et enfin, gardez à l'esprit que, historiquement, le jeu Simon d'origine utilisait apparemment un premier microprocesseur, le TMS1000. De manière générale, des opérations séquentielles complexes peuvent être mises en œuvre plus efficacement de cette façon, avec des machines à états choisies uniquement pour des problèmes qui sont simples, doivent fonctionner extrêmement rapidement ou sont des substituts d'apprentissage pour un travail éventuel sur de tels problèmes.

Éditer:

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

Contient quelques observations intéressantes, y compris un éventuel changement du TMS1000 à ce qui pourrait être une version personnalisée de celui-ci. Plus pertinent pour votre question, cela suggère que l'original a généré ses nombres aléatoires en échantillonnant un compteur libre lorsque l'utilisateur a appuyé sur un bouton ;-)

Chris Stratton
la source
Je me demande combien de puces, ou la complexité d'un CPLD, seraient nécessaires pour construire un "processeur" qui pourrait gérer un jeu similaire à l'unité de marque Simon en utilisant un "programme" stocké dans une ROM? Je suppose que cela pourrait être fait avec moins d'une douzaine de puces discrètes standard et une ROM 32Kx8 ou plus petite; plus il y a de puces, plus la ROM requise serait petite. Si l'on n'avait pas besoin du "jeu 2", un registre à décalage à rétroaction logicielle pourrait gérer n'importe quelle longueur de "séquence" avec environ 40 bits de stockage (lors du choix d'une séquence de couleurs, exécutez un LFSR 20 bits jusqu'à ce qu'un bouton soit enfoncé , puis copiez-le ...
supercat
... vers un registre de sauvegarde. Ensuite, lisez la séquence générée par ce LFSR, copiez le registre de sauvegarde sur le LFSR et attendez que l'utilisateur appuie sur les boutons dans cette séquence.
supercat