Hallo,
ich soll einen asynchronen 4-Bit Zähler konstruieren, der nur bis 12
zählt und anschließend wieder zur 0 springt und von da aus von Vorne
beginnt. Die Konstruktion soll grundsätzlich mit von positiven
taktflanken gesteuerten JK-Flip-Flops erfolgen, wobei man natürlich auch
und, oder, Negation etc. verwenden kann zum Vereinfachen.
Nach Aufstellen der Schalttafel, vereinfachen, und überführen der
Gleichungen in eine Schaltung habe ich jetzt auch eine wohl tatsächlich
funktionierende Schaltung(1), nur leider ist der aktuelle Entwurf für
einen synchronen 4-Bit Zähler (bis 12) und ich brauche ja einen
Asynchronen.
Ich verwende 4 JK-Flip-Flops um die 4-stellige Dual-Zahl darzustellen
und im Grunde möchte ich ja, das jedes Mal wenn eine positive Taktflanke
auftritt alle Flip-Flops schalten (zur Not mit ner gewissen
Verzögerung). Wenn man jetzt den Clock-Eingang aller Flip-Flops direkt
mit dem Takt verbindet ist das ja kein Problem, aber wie soll das gehen
wenn das nicht erlaubt ist?
Grüße
(1)
(Den Schaltplan habe ich nicht hochgeladen, da er in einem
Digitaltechnik-Simulator erstellt wurde und kaum leserlich ist. Mit dem
Simulator kann man aber auch testen (Lampen, Anzeigetafeln), daher weiß
ich dass er korrekt funktionieren sollte.)
> asynchronen 4-Bit Zähler konstruieren, der nur bis 12 zählt
Meinst du jetzt der zählt von 0 bis 12, teilt also die Taktfrequenz
durch 13, oder meinst du der zählt 0 bis 11 und teilt die Taktfrequenz
durch 12?
EinNutzer schrieb:> Wenn man jetzt den Clock-Eingang aller Flip-Flops direkt> mit dem Takt verbindet ist das ja kein Problem, aber wie soll das gehen> wenn das nicht erlaubt ist?
Zunächst mal so für einen Binärzähler:
https://www.elektronik-kompendium.de/sites/dig/0212151.htm
Für andere Zähllängen muss man dann mit Verknüpfungen für die einzelnen
FFs die JK geeignet anders setzen, so dass z.B. bei Stand 12 als
nächstes die '0' oder '1' erreicht wird - je nach dem gewünschten
Ablauf.
Ja, die Verknüpfungen habe ich bereits gesetzt, so das nach der 12 die 0
kommt.
Mein Problem ist jetzt wie ich von einer funktionierenden synchronen
Version zu einer asynchronen Version komme. Ich nutze allerdings
einflankengesteuerte JK-Flip-Flops, die auf positive Flanken reagieren.
(Evtl. darf man auch zweiflankengesteuerte wie im Link benutzen, aber
einflankengesteuerte kann man auf jeden Fall benutzen, daher wollte ich
es erstmal damit versuchen.)
Ist die Konvertierung des synchronen Zählers zu einem asynchronen Zähler
bei einflankengesteuerten JK-Flip-Flops sehr kompliziert/unmöglich oder
nur eine Frage der Präfarenz?
> Evtl. darf man auch zweiflankengesteuerte wie im Link benutzen
Die gibt es seit >30 Jahren nicht mehr in freier Wildbahn.
Du musst das LSB-FF und die FFs die bei 12 auf 1 stehen direkt mit dem
Eingangstakt verbinden. Also in deinem Design 3FFs. Den Rest musst du
mit kombinatorischer Logik an den J und K Eingängen erledigen. Ich denke
man benötigt da nur zwei 2fach UND und ein 3fach UND für die Logik. (Das
zweite FF bekommt den Takt vom Q\-Ausgang des ersten FF.)
Helmut S. schrieb:> Du musst das LSB-FF und die FFs die bei 12 auf 1 stehen direkt mit dem> Eingangstakt verbinden. Also in deinem Design 3FFs.
LSB-FF meint den allerersten Flip-Flop?
Und wenn ich sie direkt verbinde ist es dann wirklich noch eine
asynchrone Schaltung oder gibt es keine komplett asynchrone Schaltung
für diese spezifische Aufgabenstellung? (Komplett asynchron meint nur
ein einzelner Eingang mit Takt verbunden.)
> Den Rest musst du mit kombinatorischer Logik an den J und K Eingängen> erledigen. Ich denke man benötigt da nur zwei 2fach UND und ein 3fach UND> für die Logik.
Meinst du mit dem Rest jetzt die grundsätzliche Schaltung, also das es
von 12 auf 0 geht usw oder bezieht sich das auch auf die Taktübergabe?
(Die grundsätzliche Schaltung funktioniert, auch wenn ich sie dann wohl
unnötig kompliziert konstruiert habe (verwendet zwei zusätzliche Oder +
noch mehr Eingänge an den Und.))
Nach weiterem Nachdenken komme ich zu dem Schluss: unmöglich.
Beim Stand 12 (0101) müssten ja das 2. und 4. FF schalten, um auf 0000
zu kommen. Aber beide erhalten ja keine positive Taktflanke, weil das
erste auf 0 bleiben müsste.
IMHO geht das nur synchron - ich lasse mich aber gerne eines Besseren
belehren.
Asynchron kann ich mir das gerade nur über Reset vorstellen.
Wolfgang schrieb:> Helmut S. schrieb:>> Achtung, LSB bei mir links>> FF 0,1,2,3>> 12 = 0011>> Du schreibst das Datum dann sicher auch im Format <Tag>.<Monat>.<Jahr>> ... ;-)
Der Grund ist einfach, weil ich dem Fragesteller das Leben hier
einfacher machen will. Der Eingangstakt geht links rein in die
Teilerkette und rechts sind die Ausgänge. Der Ausgang des ersten FF
(FF0) ist der Takt des zweiten rechts daneben liegendem FF (FF1). Damit
ist links das LSB.
Helmut S. schrieb:> Achtung, LSB bei mir links> FF 0,1,2,3> 12 = 0011
Bei mir auch - ich hätte nur 0011 nehmen sollen anstatt 0101. An meiner
Einschätzung ändert sich trotzdem (noch) nichts. :-)
Der synchrone Zähler braucht viel Aufwand, damit bei der
nächsten aktiven Taktflanke alle Ausgänge synchron (!) auf
den folgenden Zählerstand schalten. Dazu wird an J und K
jeder Stufe jeweils das zum folgenden Zählerstand passende
Signal gelegt.
Diesen Aufwand betreibt ein Asynchron-Zähler gerade nicht!
Deshalb ist es Unsinn, den auf asynchron reduzieren zu wollen.
Da arbeitet jede Stufe als T-FF, wobei der Takt vom Ausgang des
vorigen FFs kommt. Beim Erreichen (in deinem Fall) der 13, was
durch Logik-Verknüpfungen erfasst wird, werden alle FFs über
ihre SET/RESET-Eingänge auf die Binärkombination NULL gesetzt.
13 = Q0 & !Q1 & Q2 & Q3
Das funktioniert schulbuchmäßig bei negativer Flankensteuerung!
Bei positiver Flankensteuerung muss man halt mit den !Qx
und noch einem kleinen Trick arbeiten...
Hier meine Lösung wie bereits beschrieben. Das zusätzlich benötigte
ODER-Gatter A4 hatte ich ursprünglich nicht bedacht. Im Anhang sind auch
die Dateien für die Simulation mit LTspiceXVII. Unzip -> RUN.
@ Helmut S. (helmuts)
Da hast du dir ja viel Mühe gemacht - aber die Aufgabenstellung
übersehen:
Es soll ein asynchroner (such mal bei Guugle nach diesem Begriff)
Zähler werden ...
Jacko schrieb:> @ Helmut S. (helmuts)>> Da hast du dir ja viel Mühe gemacht - aber die Aufgabenstellung> übersehen:>> Es soll ein asynchroner (such mal bei Guugle nach diesem Begriff)> Zähler werden ...
Mein Zähler ist asynchron. Der ist ähnlich gestrickt wie der Teiler
durch 5 beim 74LS90.
Seite 4, http://www.ti.com/lit/ds/symlink/sn74ls92.pdf
Dieser 74LS90 ist ein Asynchronzähler. Mein Zähler ist auch ein
Asynchronzähler da der Ausgang des 1. FF den Takt des 2. FF erzeugt.
Dabei sind nicht alle FF taktmäßig hintereinander. Schau den Schaltplan
des 74LS90 an.
Helmut S. schrieb:> Mein Zähler ist asynchron. Der ist ähnlich gestrickt wie der Teiler> durch 5 beim 74LS90.
Naja, strenggenommen sind sowohl dein Zähler als auch der 7490
teilsynchrone Zähler, denn bei einem lupenreinen asynchronen Schaltwerk
zeichnet sich jeder Zustandsspeicher durch seine eigene, individuelle
Takt- bzw Datenleitung aus, die er mit keinem anderen Zustandsspeicher
im Schaltwerk gemeinsam hat. Diese Eigenschaft haben weder der 7490(
zwei FF gemeinsamer Takt) noch dein Vorschlag (drei FF gemeinsamer
Takt).
Ich sehe das genau so wie G.O.
Deshalb auch oben meine korrigierte Einschätzung, dass es mit rein
asynchronem Zähler nur über Reset gehen würde.
Aber asynchrone Designs haben ihre Tücken und auch die Variante mit
Reset hat sie. Schließlich müsste da für kurze Zeit der Zustand '13'
erreicht werden, der dann über Kombinatorik die Mimik zurücksetzt. Das
erzeugt Glitches, die niemand haben will.
Will man einen reinen Binärteiler durch 2^n haben, dann sind sie
vielleicht sogar vorteilhaft: es schalten w.c. nicht alle FFs
gleichzeitig.
Ja eben, das ist eine Hausaufgabe!
Beim schulbuchgemäßen asynchronen Zähler wird jedes FF
ohne Schnickschnack vom Vorgänger getaktet. Der Zähler von
0..12 muss also kurz die 13 liefern, um auf NULL gesetzt
zu werden.
Dass diese Einfachheit des Designs Vorteile (als schneller
Teiler) und Nachteile (als Zähler mit Ausgangs-Glitches) hat,
dürfte wohl der Sinn der Übung sein.
- Glitches gibts da schon vor dem maximalen Zählerstand!
Tückisch ist doch nur die positive Flanke! ;-)