Poner el juego "Serpiente" en el tablero. Parte 2: visualización "vector"

En la primera parte, armamos una máquina con la lógica del juego. Más precisamente, no todo el juego, sino solo el movimiento de la serpiente misma. En esta parte final, descubriremos cómo conectar la pantalla y terminar todo el circuito. Alta resolución: haga clic para hacer clic




Dibujar una cola


Ya tenemos una cabeza que corre sola en el campo 8 × 8, ahora necesitamos dibujar una cola. Este no es un punto, sino mucho, y simplemente no podemos transferir las coordenadas (X, Y) a los decodificadores.

Por lo general, en matrices como la nuestra, se utiliza una " indicación dinámica " y la versión línea por línea : cuando a su vez se muestra el contenido de cada fila en su conjunto. En nuestras condiciones, para esto tendremos que almacenar en algún lugar los 64 bits o, de alguna manera complicada, calcular el valor de cada línea. Pero hay otra opción de indicación, también es bastante dinámica en el sentido de que no todos los puntos se iluminan al mismo tiempo. Podemos usar algo así como una " pantalla vectorial»- muestra cada punto a su vez, dando sus coordenadas a la pantalla. En cada momento particular en el tiempo, solo se quemará un píxel, que manejaremos por la pantalla.

Dado que el número de puntos con nosotros puede ser diferente (dependiendo de la longitud de la cola), el brillo de la imagen resultante también cambiará con el curso del juego y el crecimiento de la serpiente misma. Para evitar que esto suceda, reservaremos un número fijo de cuadros (10 = 1 cuadro para la cabeza, 1 para la manzana y 8 para la cola) y apagaremos la pantalla para puntos innecesarios. A - manzana, H - cabeza, T # - células de cola. Dibujado en wavedrom




Para mostrar, también necesitamos un autómata. Esta máquina tendrá varias partes: una de ellas es un contador de cuadros, que simplemente omitirá 10 estados en un círculo. Tomemos IE18 y algo de lógica para estos fines.



Lo más simple es sacar la cabeza, en este marco simplemente encendemos la pantalla y alimentamos en el bus x / y el valor que nos da la máquina automática. Para hacer esto, use el búfer AP6 (puede tomar AP5, pero no tiene un pinout tan conveniente).
Luego necesitamos dibujar una cola. Para hacer esto, recordaremos en nuestro estado lo que acabamos de pintar. Agregue la dirección de crecimiento de la cola (usando el esquemade la parte anterior) y visualización. Para saber que necesitamos generar la cola, simplemente comparamos el número de trama con la longitud de la cola usando el comparador de 4 bits SP1 (U13). Almacenaremos las coordenadas anteriores en el registro IR37 de 8 bits (o IR27, acaban de terminar ...), y para las nuevas usamos EEPROM, la tabla para la que ya generamos en la primera parte. La dirección de la sección deseada de la cola se tomará de la máquina de juego usando los multiplexores KP15 aplicando el número de cuadro a las entradas de dirección. Y no debemos olvidar que mantenemos la dirección de la cabeza, que es opuesta a la dirección del crecimiento de la cola, lo que significa que uno de los componentes debe invertirse. Afortunadamente, no tendrá que instalar un inversor separado, porque KP15 tiene una salida inversa. Total:


La máquina resultó un poco más confusa, pero, sin embargo, el principio de funcionamiento es el mismo que el de todos los demás.

Una manzana


Esta es la parte más "sucia" de nuestro esquema. En primer lugar, porque requiere una posición aleatoria de la manzana, y nuestras máquinas no tienen una caída de aleatoriedad. En segundo lugar, necesitamos lanzar la señal de comer una manzana de una máquina a otra, mientras que las máquinas tienen una señal de reloj diferente. De manera inteligente, esto se llama cruce de dominio de reloj, pero haremos una muleta simple.

¿Dónde ser al azar? Puede crear un generador pseudoaleatorio, pero esto requerirá una cantidad de lógica no trivial. Otra opción es tomar un reloj con una frecuencia diferente, preferiblemente no muy estable, pero nuestros NE555 no difieren en estabilidad de todos modos. En el circuito multivibrador, puede agregar algunos elementos ruidosos o no lineales a su gusto (agregué en serie con una resistencia JFET con un obturador colgante en el aire). Recibiremos una coordenada aleatoria y la almacenaremos en un contador de 6 bits. No hay chips de 6 bits ya preparados, así que conectemos dos casos de IE10:



En el mismo nodo, colocaremos un búfer para mostrar la manzana en la pantalla mediante la señal de habilitación. Y también un comparador para comprender que lo que se muestra ahora en la pantalla coincide con la manzana (dos SP1). No solo compararemos la manzana consigo misma, para esto usaremos el cuarto bit del comparador y le daremos una señal de permiso en un lado y uno en el otro.

Y aquí nos espera un truco sucio: dependiendo de la serie del microcircuito, el retraso de la señal de resolución, la capacitancia parásita de la placa de pruebas y la fase de la luna, el comparador puede encenderse un poco antes de que se apague el controlador U23. Más claramente lo que está sucediendo:



Debido al esquema de sincronización seleccionado (sobre esto más adelante), tal falla interferirá con nosotros. Sería correcto suprimirlo con la ayuda de un retraso, por ejemplo de varios inversores, o incluso extender la inclusión y la comparación en diferentes fases. Pero ya estaba lo suficientemente cansado y solo lo aplasté con un condensador C5, ya que esta es la parte sucia del circuito :)

Marcar y elegir una nueva manzana


El generador principal de U7 registra cuadros, tenemos 10 de ellos, luego dividiremos esta frecuencia por 16 usando otro contador IE10 (U19) y lo usaremos para registrar los pasos. La señal de que la cabeza coincide con la manzana aparece en un solo cuadro de cada 10 y no durará hasta que el frente del pulso cambie el cuadro. Aquí necesitamos un circuito de sincronización. Decidí tomar la opción más simple: inyectaremos la señal en la entrada asíncrona del disparador y la reiniciaremos en cada nuevo paso de la máquina receptora.



A la salida del disparador, obtenemos una señal para agregar otra celda de cola (U6), así como para iniciar el contador que almacena las coordenadas de la cabeza (U21, U22), esto generará una nueva manzana, posiblemente aleatoria.

Circuito entero



Gran esquema de clics. Y cómo se ve en el tablero - al comienzo del artículo

Piezas y componentes


placas de pan


Puede tomar los tableros de desarrollo chinos de Ali, pero luego los problemas con los malos contactos tomarán mucho más tiempo que el montaje directo del circuito. Ben Eater recomienda buenas tablas, estas son tablas BB830 (blanco) o WBU-202 (amarillo). Un conjunto de cables también es mejor para llevar Wisher (WJW-60B), y cualquier conjunto chino, incluso el más barato, se utilizará como suave.

microcircuitos


Traté de armar la serie doméstica más popular, KP1533. En Occidente, esta es la serie 74ALS, pero allí no fue del todo popular. En este esquema, no hay parámetros críticos para los tiempos o la capacidad de carga, por lo que puede tomar con seguridad una serie de K555 (74LS) o incluso K155 (SN74). De los importados, puede tomar 74HC (pero para niveles de compatibilidad tendrá que tomar casi todos los chips de esta serie) o 74HCT, que es totalmente compatible con las series TTL y CMOS.

Encontrar microcircuitos domésticos resultó ser una tarea desalentadora: nadie los necesita en tiendas populares en línea y vendió todos los restos hace mucho tiempo. Recogí algunos chips en tiendas locales fuera de línea, otros tuvieron que ser pedidos por Internet, pero muchos proveedores no están interesados ​​en jugar con pedidos pequeños, por lo que todavía fue divertido ...

La lista de materiales resultante resultó así (a través de una barra inclinada, se indican posibles reemplazos):

──────────────────────────────────────────────────────
          │ 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


Espero que les haya gustado este esquema y, tal vez, alguien levante una mano para repetirlo o haga algo aún más interesante)) Puede

ver el video en YouTube:

En los comentarios de la parte anterior, recomendamos filtrar en la matriz de LED, esto es algo muy bueno, pero con poca luz puede prescindir de él.

Puede descargar el archivo con el circuito EEPROM y descargarlo aquí .



Materiales usados


1. El libro de Harris y Harris que nunca se cansa de recomendarYuripanchul- para orientación general.

2. Referencia Biryukova S.A. - para buscar pines de microcircuitos específicos.

ambos libros se pueden encontrar en PDF, pero la versión en papel es más agradable

3. El sitio web de Ben Eater y su canal de YouTube son para inspiración))

4. Wavedrom es para dibujar diagramas

Para todos los que han leído hasta el final, ¡gracias por su atención!

All Articles