mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Synchronzähler und Decoder aus T-Flipflops


Autor: Papa P. (papapeace)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin bei meinen Recherchen fürs Studium schon mehrfach auf Beiträge 
aus diesem Forum gestoßen und da ich bei meinem Hardwarepraktikum immer 
etwas unsicher bin, dachte ich mir für die aktuelle Aufgabe schreibe ich 
selbst mal etwas. Es wäre schön wenn sich jemand etwas Zeit nehmen 
könnte um mir zu sagen ob ich generell richtig liege oder irgendetwas 
übersehe bzw. falsch mache.

Erstellt werden soll ein synchroner Zähler mit folgender (binärer) 
Ausgabe auf 4 LED's:
0, 2, 4, 6, 8, 10, 11, 12, 0, 2, ...
Anschließend soll die Zählerschaltung über einen Decoder auf einer 
7-Segmentanzeige ausgegeben werden (als 0, 2, 4, 6, 8, a, b, c, 0, 2, 
...)

Für den Versuch sollen JK-Flipflops als T-Flipflops verwendet werden. 
Realisiert wird das ganze auf einem PLD XC 9572 XL von Xilinx.

Für den Zähler habe ich mir folgendes überlegt:
Jeder Ausgang eines FF's dient als Eingang für genau eine der LED's. Ich 
muss mir also nur anschauen welche Ausgaben ich auf den LED's 
dargestellt haben will (also die Zustände Q3, Q2, Q1 und Q0 an den 
FF-Ausgängen) und was die jeweils nächste Ausgabe nach dem Taktsignal 
sein soll (Q3+, Q2+, Q1+ und Q0+). Da T-FlipFlops bei einer 1 am Eingang 
ihre aktuelle Ausgabe wechseln muss der Eingang Ti eines FF's also genau 
dann 1 sein wenn sich von Qi zu Qi+ eine Änderung ergeben soll. Über 
KV-Diagramme für jedes Ti in Abhängigkeit der Belegungen Q3 bis Q0 
bekomme ich dann die Funktionsgleichungen für die Eingänge T3 bis T0.

Aber wo fängt so eine Schaltung dann überhaupt an, sprich: Was ist der 
Startzustand? Im Programm das zur Erstellung der Schaltung vorgegeben 
ist, heißt es bei jedem JK-FF "this flip-flop is asynchronously cleared, 
output Low, when power is applied". Das heißt jeder Ausgang hat beim 
Start der Schaltung 0. Ich müsste dann also entweder diesen Startzustand 
ebenfalls in die o.g. Wahrheitstabelle aufnehmen (die LED's auf dem 
Board sind low-aktiv, für die Ausgabe der Binärzahl 0 müssen die 
Ausgänge also alle auf 1 liegen, entgegen der eigentlichen 
Binärdarstellung von 0 als 0000) oder sicherstellen, dass der Zähler 
irgendwann einen "erlaubten" bzw. vorgesehenen Zustand annimmt, damit er 
von dort an korrekt weiterläuft, richtig?

Für den Decoder:
Auch hier wird für jeden Strich in der Anzeige ein T-Flipflop verwendet. 
Ich schaue mir wie beim Zähler einfach wieder die gewünschten Ausgänge 
nach dem nächsten Taksignal (Qg+, ..., Qa+) und die aktuellen Ausgänge 
(Qg, ..., Qa) an um die Eingangsbelegung der T-FlipFlops (Tg, ..., Ta) 
zu bekommen. Die Gleichungen für diese Eingänge errechne ich mir dann 
mittels KV-Diagrammen wieder aus den Zählerausgängen Q3, ..., Q0.
Damit hätte die Schaltung prinzipiell zwei (mehr oder minder) getrennte 
Teile: Den zur Berechnung der Zählwerte als Binärzahlen und den zur 
Umrechnung dieser Binärzahlen für die Anzeige.
Heißt das dann nicht aber, dass meine 7-Segmentanzeige dem eigentlichen 
Zähler immer um einen Taktschritt hinterherhinkt? Sprich: Wenn am Zähler 
z. B. die Binärzahl 4 anliegt zeigt die 7-Segmentanzeige die Zahl 2 
(weil die ja beim letzten Taktsignal an den Eingängen der Anzeige anlag 
und übernommen wurde)? Umgehen könnte ich das dann aber damit, dass ich 
die Augabe der 7-Segmentanzeige einfach um einen Schritt "vorschiebe", 
damit bei einer 4 am Zähler auch eine 4 auf der Anzeige steht, obwohl 
dafür die Belegung 2 vom Zähler zur Berechnung verwendet wurde.
Gibt es in einem solchen Fall "Konventionen" ob man dieses "Nachhinken" 
der Anzeige einfach akzeptiert oder eher in die richtige Anzeige 
umrechnet? Zur Erfüllung der Aufgabe ist es zwar wahrscheinlich egal, 
aber wenn dieser Zähler Teil einer echten Schaltung wäre, würde man 
sicher nicht wollen dass Anzeige und Zähler nicht den gleichen Wert 
wiedergeben, oder?

Eine letzte Frage noch zum theoretischen Aspekt hinter der Schaltung. 
Für das Praktikumsprotokoll soll außerdem zu beidem ein Automatengraph 
(Moore-Automat) erstellt werden. Das Thema wurde in der Vorlesung nur 
kurz abgehandelt, darum weiß ich nicht recht ob meine Lösung hierzu viel 
zu einfach gedacht ist oder nicht:
Der Automatengraph eines Zähler ist doch eigentlich immer nur ein 
kreisförmiger Graph mit einer Schleife bei jedem Knoten falls die 
Eingabe 0 ist und dem Übergang zum nächsten Zustand falls die Eingabe 1 
ist. Das wirkt irgendwie etwas zu simpel, übersehe ich da etwas? Muss 
der Graph etwa jedes der FF's einzeln betrachten statt die jeweiligen 
Belegungen der FF's zu einem Zustand zusammenzufassen?

Vielen Dank schonmal für eure Unterstützung und beste Grüße, Tom

Autor: Christoph db1uq K. (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich frage mich, wieso es so kompliziert sein muss. Der Zähler hat genau 
acht Zustände, also würde ich einen 3-bit Zähler bauen, und alles andere 
dekodieren. Wenn die Dekodierung auch noch synchron sein soll, dann 
kommt eben ein 4-bit Ausgangsregister dazu. Es gibt so keine 
unzulässigen Zustände. Wenn der Reset beim Einschalten nötig ist, muss 
noch eine übliche Resetschaltung dran, solange das CPLD so etwas nicht 
schon enthält.

Autor: Papa P. (papapeace)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christoph und vielen Dank für die schnelle Antwort.

Wenn ich dich richtig verstehe sind meine Überlegungen zumindest nicht 
falsch. An einen einfacheren Zähler habe ich auch schon gedacht. Da 
zufällig genau 8 verschiedene Zustände angezeigt werden sollen würde es 
sich anbieten einfach einen 3-bit Zähler mit 3 T-FF's zu bauen und 
jeweils eine Ausgabe für die LED's und die 7-Segmentanzeige 
hinterherzuschalten.
In der Aufgabenstellung klingt es, als sollte der Zähler selbst die 
genannten Werte am Ausgang haben, darum habe ich mir überlegt wie ich 
das bewerkstelligen könnte. Ich werde aber wahrscheinlich ohnehin 
Wahrheitstafeln und Schaltfunktionen für beide Varianten vorbereiten, da 
die eigentlichen Schaltungen erst im Praktikum erstellt werden sollen.

Du schreibst noch:
> Wenn der Reset beim Einschalten nötig ist, muss
> noch eine übliche Resetschaltung dran, solange das CPLD so etwas nicht
> schon enthält.
Kannst du mir sagen wo ich etwas zu so einer "üblichen Resetschaltung" 
finde? Habe gerade überhaupt keine Ahnung was du damit meinst.

Kannst du mir evtl. auch noch etwas zu meinen Fragen zum 
Automatengraphen sagen?

Vielen Dank, beste Grüße und noch einen angenehmen Abend, Tom

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.