Logikschaltung für 2 Taster bitshift

Ich versuche zu verstehen, wie ich mit Logik-ICs (und nicht mit einem uC) Folgendes implementieren könnte:

Es gibt zwei momentane Drucktasten und 3 LEDs. Die LEDs zeigen den logischen "Zustand" an, der 0 (anfänglich), +1 und -1 sein kann. Durch Drücken der Drucktasten ändern Sie den Zustand.

Ich habe dieses kleine Diagramm gezeichnet, das helfen soll, das Thema besser zu verstehen.

Am Anfang befinden Sie sich also im Zustand 0 (und die mittlere LED leuchtet), wenn Sie +1 drücken, gehen Sie in den Zustand +1 (und nur die +1-LED leuchtet). Wenn Sie erneut +1 drücken, passiert nichts. Usw..

Wie kann ich das mit einer Logikschaltung erreichen? Bisher verstehe ich nur, wie man die Schalter mit D-FlipFlop zum Latchen bringt

Geben Sie hier die Bildbeschreibung ein

Um ganz ehrlich zu sein, Sie wollen eine Zustandsmaschine, also bauen Sie eine ... und der Weg dazu wäre, den einfachsten / billigsten / kleinsten ... µC zu bekommen, den Sie finden können. Suchen Sie ansonsten online nach "Logikgatter", "k-map" und stellen Sie fest, dass Sie Ihre Tasten einfach "ODER" zusammenfassen können, um einen Taktimpuls zu erzeugen, der auch Ihre Logikgatter ansteuert.
Der Versuch, dies ohne einen Mikrocontroller zu tun, ist einfach albern. Sie können eine Reihe von Gattern verdrahten, um die Logik auszuführen, aber das wird am Ende größer sein als eine Mikrocontroller-Lösung. Das eigentliche Problem, an das Sie anscheinend nicht einmal gedacht haben, ist das Entprellen der Tasten. Ihr Zustandsdiagramm geht nur von "Press" -Ereignissen aus, beschönigt jedoch, dass diese komplizierter sind als ein Knopf, der eine Linie nach unten zieht. Ein Mikro kann das Entprellen und die Zustandsmaschinenlogik ausführen, alles auf demselben einzigen Chip.

Antworten (2)

Ich würde empfehlen, die Dinge zuerst zu abstrahieren:

  • Sie haben drei Zustände (zwei Bits reichen aus, um das darzustellen). Der Ausgang sind drei LEDs. Aus dem Zustand können Sie direkt ableiten, welche LEDs leuchten sollten.
  • Sie kennen Logikgatter (UND, ODER, NAND usw.). Sie wissen also, wie man zwei Eingänge (die zwei Bits des Zustands) und drei Ausgänge (LEDs) hat. Wenn das nicht klar ist, zeichnen Sie eine Wahrheitstabelle und finden Sie die Minterms, die zum Einschalten der richtigen LEDs erforderlich sind.
  • Der nächste Zustand hängt nur vom aktuellen Zustand + einem Bit ab (nämlich, welche der beiden Tasten gedrückt wurde).

Was Sie also brauchen, ist ein

  1. zwei Flipflops zum Speichern des Zustands
  2. Logikgatter zum Aufleuchten der LEDs, die den beiden Zustandsbits entsprechen
  3. Logikgatter zur Bestimmung des nächsten Zustands basierend auf dem aktuellen Zustand + welche Taste gedrückt wurde
  4. ein „Clock“-Eingang, der sagt: „Okay, werte jetzt die Zustandsübergangslogik aus und gehe in den nächsten Zustand“.

Rollen wir es von unten auf:

Die Uhr ist am einfachsten. Verwenden Sie einfach ein ODER-Gatter auf beiden Tasten. Wenn eine der beiden Tasten gedrückt wurde, sollte der nächste Zustandsübergang in die Flipflops geladen werden:

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

Die LED-Logik ist auch einfach: Nehmen Sie zum Beispiel an, der interne Status 00ist Ihr Anfangszustand. Sie bauen also einfach ein NOR-Gatter auf den Anfangszustand, das die mittlere LED aufleuchtet. Das machst du für alle LEDs.

Die „Nächster-Zustand“-Logik ist ebenfalls einfach: Haben Sie einfach die gleiche Logik wie für die LEDs, aber UND-verknüpft mit der rechten Taste, um den nächsten internen Zustand zu erzeugen.

Wie Marcus angedeutet hat, werden dafür wirklich nur zwei Riegel benötigt. Eine für die linke LED und eine für die rechte. Die mittlere LED würde an sein, wenn keine der anderen beiden es sind.

Sobald Sie zu dieser Erkenntnis gelangt sind, wird die Logik, die zum Setzen und Zurücksetzen jedes Latches erforderlich ist, ziemlich einfach. Ich würde dafür zwei JK-Verriegelungen verwenden

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

Übrigens: Sie müssen diese Tasten auch entprellen.

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan