Mettre le jeu "Snake" sur la planche à pain. Partie 2: affichage «vectoriel»

Dans la première partie, nous avons monté une machine avec la logique du jeu. Plus précisément, pas tout le jeu, mais seulement le mouvement du serpent lui-même. Dans cette dernière partie, nous allons découvrir comment connecter l'écran et terminer l'ensemble du circuit. Haute résolution - Cliquez pour cliquer




Dessinez une queue


Nous avons déjà une tête qui tourne seule sur le terrain 8 × 8, maintenant nous devons dessiner une queue. Ce n'est pas un point, mais beaucoup, et nous ne pouvons tout simplement pas transférer les coordonnées (X, Y) aux décodeurs. En

général , sur ces matrices comme la nôtre, une « indication dynamique » est utilisé, et la ligne par ligne la version : quand à son tour le contenu de chaque ligne dans son ensemble sont affichés. Dans nos conditions, pour cela, nous devrons soit stocker quelque part les 64 bits, soit d'une manière compliquée pour calculer la valeur de chaque ligne. Mais il y a une autre option pour l'indication, elle est aussi assez dynamique dans le sens où tous les points ne s'allument pas en même temps. Nous pouvons utiliser quelque chose comme un « affichage vectoriel»- affichez chaque point tour à tour, en donnant ses coordonnées à l'écran. À chaque instant particulier, un seul pixel sera brûlé, que nous conduirons sur l'écran.

Étant donné que le nombre de points avec nous peut être différent (en fonction de la longueur de la queue), la luminosité de l'image résultante changera également avec le cours du jeu et la croissance du serpent lui-même. Pour éviter que cela ne se produise, nous réserverons un nombre fixe d'images (10 = 1 image pour la tête, 1 pour la pomme et 8 pour la queue) et nous éteindrons l'écran pour les points inutiles. A - pomme, tête H, T # - cellules caudales. Dessiné en wavedrom




Pour afficher, nous avons également besoin d'un automate. Cette machine comprendra plusieurs parties: l'une d'elles est un compteur de trames, qui contournera simplement 10 états dans un cercle. Prenons IE18 et une logique à ces fins.



Le plus simple est de sortir la tête, dans ce cadre on allume simplement l'écran et on injecte sur le bus x / y la valeur que nous donne la machine automatique. Pour ce faire, utilisez le tampon AP6 (vous pouvez prendre AP5, mais il n'a pas de brochage aussi pratique).
Ensuite, nous devons dessiner une queue. Pour ce faire, nous nous souviendrons dans notre état de ce que nous venons de peindre. Ajoutez-y la direction de croissance de la queue (en utilisant le schémade la partie précédente) et afficher. Pour savoir que nous devons sortir la queue, nous comparons simplement le numéro de trame avec la longueur de la queue en utilisant le comparateur 4 bits SP1 (U13). Nous allons stocker les coordonnées précédentes dans le registre 8 bits IR37 (ou IR27, elles viennent de se terminer ...), et pour les nouvelles nous utilisons EEPROM, la table pour laquelle nous avons déjà généré dans la première partie. La direction de la section souhaitée de la queue sera prise à partir de la machine de jeu en utilisant les multiplexeurs KP15 en appliquant le numéro de trame aux entrées d'adresse. Et nous ne devons pas oublier que nous gardons la direction de la tête, qui est opposée à la direction de la croissance de la queue, ce qui signifie que l'un des composants doit être inversé. Heureusement, vous n'aurez pas à installer un onduleur séparé, car le KP15 a une sortie inverse. Total:


La machine s'est avérée un peu plus confuse, mais, néanmoins, le principe de fonctionnement est le même que celui de tout le monde.

Une pomme


C'est la partie la plus "sale" de notre programme. Tout d'abord, car il nécessite une position aléatoire de la pomme, et nos machines n'ont pas une goutte d'aléatoire. Deuxièmement, nous devons lancer le signal de manger une pomme d'une machine à l'autre, tandis que les machines ont un signal d'horloge différent. De manière intelligente, cela s'appelle le croisement de domaine d'horloge, mais nous ferons une simple béquille.

Où obtenir au hasard? Vous pouvez trouver un générateur pseudo-aléatoire, mais cela nécessitera une quantité de logique non triviale. Une autre option consiste à prendre une horloge avec une fréquence différente, de préférence pas très stable, mais nos NE555 ne diffèrent pas de toute façon en termes de stabilité. Dans le circuit multivibrateur, vous pouvez ajouter des éléments bruyants ou non linéaires à votre goût (j'ai ajouté en série avec une résistance JFET avec un volet suspendu dans l'air). Nous recevrons une coordonnée aléatoire et la stockerons dans un compteur 6 bits. Il n'y a pas de puces 6 bits prêtes à l'emploi, alors connectons deux boîtiers IE10:



Dans le même noeud, nous mettrons un tampon pour afficher la pomme à l'écran par le signal d'activation. Et aussi un comparateur afin de comprendre que ce qui est maintenant affiché à l'écran coïncide avec la pomme (deux SP1). Nous ne comparerons pas seulement la pomme avec elle-même, pour cela nous utiliserons le 4ème bit du comparateur et lui donnerons un signal d'autorisation d'un côté et un de l'autre.

Et ici, un sale hack nous attend: en fonction de la série du microcircuit, du retard du signal de résolution, de la capacité parasite de la maquette et de la phase de la lune, le comparateur peut s'allumer un peu plus tôt que le pilote U23 ne s'éteint. Plus clairement ce qui se passe:



En raison du schéma de synchronisation sélectionné (à ce sujet plus tard), un tel problème va interférer avec nous. Il serait correct de le supprimer à l'aide d'un retard, par exemple de plusieurs onduleurs, ou même de répartir l'inclusion et la comparaison en différentes phases. Mais j'étais déjà assez fatigué et je l'ai écrasé avec un condensateur C5, car c'est la partie sale du circuit :)

Horloge et cueillette d'une nouvelle pomme


Les principaux horloges du générateur U7, nous en avons 10, puis nous diviserons cette fréquence par 16 en utilisant un autre compteur IE10 (U19) et l'utiliserons pour cadencer les pas. Le signal que la tête coïncide avec la pomme apparaît sur une seule image sur 10 et ne durera pas avant le début de l'impulsion de commutation de l'image. Ici, nous avons besoin d'un circuit de synchronisation. J'ai décidé de prendre l'option la plus simple: nous injecterons le signal dans l'entrée asynchrone du déclencheur, et nous le réinitialiserons à chaque nouvelle étape de la machine réceptrice.



À la sortie du déclencheur, nous obtenons un signal pour ajouter une autre cellule de queue (U6), ainsi que pour démarrer le compteur qui stocke les coordonnées de la tête (U21, U22), cela générera une nouvelle pomme, éventuellement aléatoire.

Circuit entier



Excellent système de clics. Et à quoi cela ressemble sur la planche à pain - au début de l'article

Pièces et composants


planches à pain


Vous pouvez prendre les cartes de développement chinois d'Ali, mais les problèmes avec de mauvais contacts prendront beaucoup plus de temps que l'assemblage direct du circuit. De bonnes planches sont recommandées par Ben Eater, ce sont les planches BB830 (blanc) ou WBU-202 (jaune). Un ensemble de fils est également préférable de prendre Wisher (WJW-60B), et tout ensemble chinois, même le moins cher, sera utilisé comme doux.

microcircuits


J'ai essayé de monter sur la série domestique la plus populaire, KP1533. En Occident, c'est la série 74ALS, mais là elle n'était pas du tout populaire. Dans ce schéma, il n'y a pas de paramètres critiques pour les horaires ou la capacité de charge, vous pouvez donc prendre en toute sécurité une série de K555 (74LS) ou même K155 (SN74). Parmi les importés, vous pouvez prendre 74HC (mais pour les niveaux de compatibilité, vous devrez prendre presque toutes les puces de cette série) ou 74HCT, qui est entièrement compatible avec les séries TTL et CMOS.

Trouver des microcircuits domestiques s'est avéré être une tâche décourageante: personne n'en avait besoin dans les magasins en ligne populaires et il y a longtemps que tous les restes ont été vendus. J'ai récupéré des jetons dans des magasins locaux hors ligne, d'autres ont dû être commandés sur Internet, mais de nombreux fournisseurs ne sont pas intéressés à bricoler de petites commandes, donc c'était toujours amusant ...

La nomenclature résultante s'est révélée ainsi (grâce à une barre oblique, les remplacements possibles sont indiqués):

──────────────────────────────────────────────────────
          │ 1× *1 74*04
                │ 1× *3 74*00
                │ 1× *1 74*20
         │ 1× *2 74*74
          │ 2× *6 74*245 / *5 74*244 ( )
     │ 3× *1 74*85
  │ 2× *15 74*251 / *7 *151
        │ 1× *18 *163
                │ 4× *18 *163 / *10 *161
        │ 3× *27 74*377 / *37 74*574 ( )
                │ 1× *37 74*574 / *27 74*377 ( )
EEPROM          │ 3× AT28C16 / CAT28C16
     │ 1× *7 74*138 / 4 74*155 ( )
                │ 1× 5611 CD4028 ( ) /  AT28C16
       | 2× 10061 NE555
──────────────────────────────────────────────────────

Total


J'espère que vous avez aimé ce schéma et, peut-être, quelqu'un lèvera la main pour le répéter, ou fera quelque chose de plus intéressant)) Vous

pouvez regarder la vidéo sur YouTube:

dans les commentaires de la partie précédente, nous avons conseillé de filtrer sur la matrice LED, c'est une très bonne chose, mais en faible luminosité vous pouvez vous en passer.

Vous pouvez télécharger l' archive avec le circuit EEPROM et les dumps ici .



Matériaux utilisés


1. Le livre de Harris & Harris qui ne se lasse pas de recommanderYuripanchul- pour des conseils généraux.

2. Référence Biryukova S.A. - pour rechercher des brochages de microcircuits spécifiques.

les deux livres peuvent être trouvés en PDF, mais la version papier est plus agréable

3. Le site Web de Ben Eater et sa chaîne YouTube sont pour l'inspiration))

4. Wavedrom est pour dessiner des diagrammes

Pour tous ceux qui ont lu jusqu'à la fin, merci pour votre attention!

All Articles