circuito lógico para 2 pulsadores bitshift

Estoy tratando de entender cómo podría implementar, usando circuitos integrados lógicos (y no un uC), lo siguiente:

hay dos pulsadores momentáneos y 3 leds. Los leds indican el "estado" lógico, que puede ser 0 (inicial), +1 y -1. Pulsando los pulsadores se cambia de estado.

Dibujé este pequeño diagrama que debería ayudar a comprender mejor el tema.

Así que al principio estás en el estado 0 (y el led del medio está encendido), si presionas +1 vas al estado +1 (y solo está encendido el led +1). Si vuelves a pulsar +1 no pasa nada. Etcétera..

¿Cómo puedo obtener eso usando un circuito lógico? hasta ahora solo entiendo cómo hacer que los interruptores se enganchen usando D-FlipFlop

ingrese la descripción de la imagen aquí

para ser completamente honesto, usted quiere una máquina de estado, así que construya una... y la forma de hacerlo sería obtener el µC más fácil/más barato/más pequeño... que pueda encontrar. Aparte de eso, busque en línea "puerta lógica", "k-map", y tenga en cuenta que puede simplemente "O" juntar sus botones para generar un pulso de reloj para controlar también sus puertas lógicas.
Intentar hacer esto sin un microcontrolador es una tontería. Puede conectar un montón de puertas para realizar la lógica, pero eso terminará siendo más grande que una solución de microcontrolador. El verdadero problema en el que aparentemente ni siquiera has pensado es en eliminar los botones. Su diagrama de estado solo asume eventos de "presionar", pero pasa por alto que son más complicados que un botón que baja una línea. Un micro puede hacer el antirrebote y la lógica de la máquina de estado, todo en el mismo chip único.

Respuestas (2)

Recomiendo abstraer las cosas primero:

  • Tienes tres estados (dos bits son suficientes para representar eso). La salida es de tres LED. Puede inferir directamente qué LED deben estar encendidos desde el estado.
  • Conoce las puertas lógicas (AND, OR, NAND, etc.). Por lo tanto, sabe cómo tener dos entradas (los dos bits del estado) y tres salidas (LED). Si eso no está claro, dibuje una tabla de verdad y encuentre los términos mínimos necesarios para encender los LED correctos.
  • El siguiente estado solo depende del estado actual + un bit (es decir, cuál de los dos botones se presionó).

Entonces, lo que necesitas es un

  1. dos flip-flops para almacenar el estado
  2. Puertas lógicas para encender los LED correspondientes a los dos bits de estado
  3. Puertas lógicas para determinar el siguiente estado en función del estado actual + qué botón se ha presionado
  4. una entrada de "reloj" que dice "bien, ahora evalúe la lógica de transición de estado y pase al siguiente estado".

Vamos a enrollarlo desde abajo:

El reloj es más fácil. Simplemente use una puerta OR en ambos botones. Cuando se ha presionado cualquiera de los botones, la siguiente transición de estado debe cargarse en los flipflops:

+ button \
          OR ---> Latch of flipflops
- button /

La lógica del LED también es fácil: por ejemplo, suponga que la estadística interna 00es su estado inicial. Entonces, simplemente construye una puerta NOR en el estado inicial que enciende el LED central. Haces eso para todos los LED.

La lógica del "siguiente estado" también es fácil: solo tenga la misma lógica que para los LED, pero con un AND con el botón derecho para producir el siguiente estado interno.

Como Marcus indicó, realmente solo se necesitan dos pestillos para esto. Uno para el led izquierdo y otro para el derecho. El LED central estaría encendido cuando ninguno de los otros dos lo esté.

Una vez que te das cuenta de eso, la lógica requerida para configurar y restablecer cada pestillo se vuelve bastante simple. Usaría pestillos JK de remolque para esto

Clock = Either button pressed delayed through two gates.

Centre Led On = Left Led Off AND Right Led Off

Button 1 Action
   Set Left Led = Button1_Pressed AND Right Led Is Off
   Reset Right Led

Button 2 Action
   Set Right Led = Button2_Press AND Left Led Is Off
   Reset Left Led

Por cierto: también necesita eliminar el rebote de esos botones.

esquemático

simular este circuito : esquema creado con CircuitLab