Gehaxelts Blog

IT-Security & Hacking

Ampel-Automat entwerfen und umsetzen

In diesem Blogpost möchte ich wieder etwas aus der technischen Informatik aufgreifen, nämlich die Automaten und deren Umsetzung auf Hardwarebasis.

Dazu möchte ich einen kleinen Ampel-Automaten basteln.

Unter einem Ampel-Automaten stelle ich mir einen Automat vor, welcher 3 Zustände kennt: rot, gelb & grün. Ich habe mich hierbei für einen Moore-Automaten entschieden, bei dem die Ausgabe nur vom Zustand und nicht von der Eingabe abhängt.

Der Zustandsgraph

Ich zeichne zunächst einen Zustandsgraphen des Automaten, damit die Umsetzung später leichter fällt.

Man erkennt drei Kringel, welche in zwei Hälften geteilt sind. In der oberen Hälfte steht der Zustandsname und in der unteren die entsprechende Ausgabe des Zustandes.

Der Start signalisiert uns den Anfangszustand des Automaten.

Auf den Pfeilen steht der Folgezustand in den der Automat unter dem anliegenden Eingangssignal wechselt. Bei den Schlaufen bleibt der Automat bei seinem aktuellen Zustand.

Die Kodierung & Ausgabe

Wir müssen nun unsere Zustände und die Ausgabe kodieren.

Die Ausgabe habe ich im oberen Bild schon kodiert (2-Bit-Wort in der unteren Hälfte), sodass diese später auf den 1-zu-4 Demultiplexer passt.

Die Zustände rot, gelb und grün kodieren wir ähnlich:

1
2
3
rot: 00
gelb: 01
grün: 10

Daraus ergibt sich die folgende Zustandsübergangstabelle:

q0,q1 sind die entsprechenden Bits, die unseren Zustand kodieren. E ist das Eingabesignal unter welchen der Automat in den nächsten Zustand wechselt. q0’,q1’ kodieren dem nach den Folgezustand. Die Ausgabe ist vom aktuellen Zustand abhängig und wir mittels A0 bzw. A1 kodiert.

Die Funktionen

Jetzt sind wir so weit, dass wir aus unserer Zustandsübergangstabelle die entsprechenden Funktionen für q0’, q1’, A0 & A1 auslesen können. Das machen wir, in dem wir die Minterme der jeweiligen Funktion auslesen und zu einer DNF verodern.

Das Schaltbild

Nachdem wir nun die Funktionen ausgelesen haben, können wir das nun als Schaltbild zeichnen:

1
2
3
S = Switch; Dort muss eine Spannung anliegen, welche durch den Multiplexer durchgeschaltet wird.
T = Takt; Gibt den Takt an, mit welchem die MS-D-FFs geschaltet werden. 
E = Eingabe; Ist die Eingabe unter welcher der Automat seinen Zustand wechselt.

Wir haben nun unseren Ampel-Automaten soweit fertiggstellt. Man könnte sich z.B. im Conrad die entsprechenden Bauteile kaufen und zusammen löten. Ggf. bräuchte man noch alle paar logische Einheiten einen Signalverstärker, damit bei dem Multiplexer noch eine Spannung anliegt.

In diesem Schaltbild nutzen wir zwei Blackboxen, nämlich zweimal einen Master-Slave-D-Flipflop (MS-D-FF) und einmal einen 1-zu-4 Demultiplexer (Demux)

Diese sind nichts anderes als eine Kombination der verschiedenen Operatoren (AND,NOT,OR).

Demultiplexer

Ein Demultiplexer verteilt ein Eingangssignal wahlweise über die Steuersignale auf einen Ausgang.

Das Schaltbild des oben dargestellten 1-zu-4 Demultiplexers kann so aussehen:

Man hat also eine Reihe an Verundungen, sodass immer entsprechend nur ein Signal an den entsprechenden Ausgang durchgeleitet wird.

Master-Slave-D-Flipflop

Ein MS-D-Flipflop ist taktflankengesteuert. D.h. dieser ändert den an Q anliegenden Wert erst, wenn der Takt von 0 auf 1 wechselt.

Ein Master-Slave-D-Flipflop besteht aus zwei D-Flipflops.

Ein einfaches D-Flipflop (Latch) sieht so aus:

Bei einem MS-D-Flipflop sind zwei D-Flipflops in Reihe geschaltet, und der Takt des zweiten D-Flipflops ist negiert:

Der MS-D-Flipflop speichert den an D anliegenden Wert für einen Taktzyklus.

Fazit

Ich bin am Überlegen, ob ich mir die entsprechenden Bausteine bei Conrad bestelle und Just-For-Fun die Ampel mal zusammen löte und an meinen Raspberry Pi stecke. Ich finde die Automaten relativ interessant, da man damit tolle Sachen umsetzen kann. Dadurch das die entsprechend benötigten Bausteine preisgünstig erworben werden können, erhöht es den Reiz umso mehr :D

Gruß

gehaxelt