Controlador de semáforo

4

Tengo que diseñar un circuito secuencial para un controlador de semáforo. Tiene 6 salidas, rojo-verde-amarillo para luces norte / sur y este / oeste. Lo que tiene que suceder es que cada 8 ciclos de reloj (un ciclo de reloj se representa con 1 botón pulsado, por lo que después de 8 botones, las luces se apagan) las luces tienen que cambiar. Por lo tanto, el orden sería

R (N / S) -R (E / W) - > R (N / S) -G (E / W) - > R (N / S) -Y (E / W) - > R (N / S) -R (E / W) - >
G (N / S) -R (E / W) - > Y (N / S) -R (E / W) - > R (N / S) -R (E / W) - > R (N / S) -G (E / W) ... y así sucesivamente.

He creado un diagrama, una tabla de verdad y ecuaciones. Por lo que puedo decir, tengo todo conectado y colocado correctamente (estamos utilizando quartus para programar un DE0). Tengo un registro de 3 bits conectado al circuito combinacional para mi máquina de estados.

Lo único en lo que puedo pensar que estoy equivocado es que mi diseño inicial es completamente incorrecto. Lo que pasa es que después de 8 ciclos de reloj el estado no cambia.

Aquí hay imágenes de mi diagrama de estado, tabla de verdad, mapas k y ecuaciones. Ignora el cuadro de términos mínimos. Es solo una forma de ordenar la tabla de verdad porque es difícil de leer.

EDITAR: ¿Qué estoy preguntando es si mi diseño es el correcto? ¿Estoy haciendo un problema fundamental con el diagrama de estado?

    
pregunta MathWannaBe456

2 respuestas

0

No estoy seguro de si debo responder mi propia pregunta, pero lo resolví.

El restablecimiento de las vueltas del registro de State Machine requirió una puerta NOT. Esto se debe a que todo está al revés con el FPGA que estoy usando (DE0).

    
respondido por el MathWannaBe456
1

Esta no es una respuesta directa a la pregunta, pero algo que debes saber es que aún no te has dado cuenta es un problema.

Usted quiere que algo suceda cuando los botones individuales son eventos individuales. Sin embargo, los botones mecánicos reales no funcionan de esa manera. Ellos "rebotan". Lo que es un solo botón para usted, puede ser 10s de conexiones y desconexiones individuales hasta que el botón finalmente se detiene y permanece estable en el nuevo estado. Si simplemente conecta un botón con una resistencia pullup a una entrada lógica digital, cada vez que presione el botón se interpretará como muchos. La lógica digital es lo suficientemente rápida para procesar rebotes individuales.

Para solucionar esto, haces algo llamado debouncing . Hay varias formas, pero con ese término de búsqueda debería ser capaz de encontrar muchas cosas sobre el tema.

La forma más sencilla es no considerar el nuevo estado válido hasta que se haya mantenido estable durante el intervalo de rebote. Esto debe ser lo suficientemente largo como para esperar a que el interruptor deje de rebotar. Eso suele ser de 10-20 ms. Sin embargo, me gusta usar el tiempo de rebote de 50 ms. Eso es lo más largo que los humanos no notarán. Algunos interruptores rebotan cerca de eso, por lo que puede que también, ya que es gratis en términos de percepción humana.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas