Es un juego virtual basado en el tenis de mesa en que se simulan dos raquetas al extremo de un tablero y el objetivo es hacer un punto en el lado del oponente en el área que no alcanza la raqueta
se nos propone realizar el diseño de un pong en la psoc para la solucion del problema partiremos el problema en partes la pelota , las raquitas y el marcador despues integraremos todo en un solo diseño que se implemetnara en una matriz de led compuesta de 5 matriz de led 7*5
.
Raquetas
Para aclarar el movimiento de las raquetas será un desplazamiento de bits e un secuencia desde una posición a otra a traves de la entrada de una señal de subida o bajada,como la barra de mueve de manera horizontal contamos con 7 bits al que le tienen que llegar 1 o 0 dependiendo del tipo de matriz , son 7 estados en el que se puede o no ilumar el led por lo que partimos de la idea de que nesecitamos minimo 3 filps flops antes de iniciar podemos volver una entrada dos entrada al jugar con la entrada podemos decir que con un 1 subimos y con otro bajamos al poner como relog una xnor entre las dos entradas y una entrada directa como arriba el sistema recibira 1 cuando se oprima arriba y cuando se oprima 0 recibira 0
Q3*=Q1Q0EN+Q2EN
Q2*=Q3NEGADO(Q1 XOR Q2)+ENNEGADO(Q3Q2NEGADOQ1NEGADO+Q3NEGADOQ2Q1)
Q1*=Q3NEGADOQ1NEGADO(Q2+EN)+Q3Q2NEGADOQ1NEGADOENNEGADO
Ahora para ver como implementar las salidas veremos el diagrama de como se enciende cada led en cada estado
De esta manera tendremos 7 salidas una para cada fila claro negadas dado que en esta matriz las filas se encienden con 0
f0=A
F1=A+B
F2=A+B+C
F3=B+C+D
F4=C+D+E
F5=D+E
F6=E
Con esto tenemos el bloque completo que controla una raqueta para sincronizarlo utilizamos un deco para las columnas y sincronizamos con una and la columna en la que queramos que aparezcan la raquetas y repetimos este componente para otra raqueta con otros controles
Pelota
El diseño de la pelota se realizo por medio de registros de desplazamiento, uno para filas y uno para columnas. A diferencia de los registros universales se omitio la carga en paralelo y la opcion de mantener
la pelota siempre se mueve en alguna direccion, dando como resultado:
Para que ingrese el primer 1 en el registro pero no se repita se utilizo un flip flip D que cambia su estado inicial en el primer flanco del reloj y se mantiene ahi.
Como se utilizaron registros con solo dos opciones de desplazamiento (izquierda o derecha) solo fue necesario un bit de seleccion, dicho bit se controla mediante un flip-flop jk (j derecha, k izquierda) cuyo estado inicial es 0 (por eso la entrada de la pelota es la izquierda). Los bits de J y K se toman de las salidas del registro, las filas.
En un principio se penso en usar las filas inicial y final, pero el bit del selector no alcanzaba a cambiar antes de que la pelota uera desplazada fuera del juego. Para solucionar esto bastó con tomar las filas justo anteriores a las pensadas antes, la segunda y penultima, dando tiempo suficiente al registro de cambiar de direccion.
PUNTAJE
Por ultimo para el conteo de puntaje solo tenemos que tener en cuenta los limites en cada raqueta esta y cuando la pelota pasa por un led que no tiene la raqueta es un punto de esta manera se hace un comparacion bit a bit con los dos negados solo en los limites de la cancha ,con eso solo nesecitamos una visulacion de una secuencia de numeros hecho con un contador un mux y unas rom con el numero correspondite a la secuencia
CAMBIO DE TAMAÑO
esta es la parte mas facil cada una de las partes anteriores estaban configuaradas para un esapcio deternanodo el puntaje ya de por si por las rom ocupa los extremos y asi que tenemos el medio de la matriz para maniobrar el tamaño podemos utlizar multriplexores a los selectores de colimnas de cada componente sincronizando el inicio de la secuencia de la pelota y final con los limites de barras

No hay comentarios:
Publicar un comentario