Forum: Mikrocontroller und Digitale Elektronik JK Flip Flops: Wie von synchronen 4-Bit Zähler zu


von EinNutzer (Gast)


Lesenswert?

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.)

von Helmut S. (helmuts)


Lesenswert?

> 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?

: Bearbeitet durch User
von EinNutzer (Gast)


Lesenswert?

Von 0 bis 12 sollte gemeint sein.

von EinNutzer (Gast)


Lesenswert?

Lol Tschuldigung. Also zählt von 0 bis einschließlich der 12 und springt 
dann zur 0.

von HildeK (Gast)


Lesenswert?

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.

von EinNutzer (Gast)


Lesenswert?

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?

von Helmut S. (helmuts)


Lesenswert?

> 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.)

: Bearbeitet durch User
von EinNutzer (Gast)


Lesenswert?

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.))

von Helmut S. (helmuts)


Lesenswert?

Eingangsstakt -> FF0 -> FF1
Eingangsstakt -> FF2
Eingangsstakt -> FF3

Wertigkeit der FFs
FF0 , FF1, FF2, FF3
1, 2, 4, 8

von HildeK (Gast)


Lesenswert?

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.

von Helmut S. (helmuts)


Lesenswert?

Achtung, LSB bei mir links
FF 0,1,2,3
12  = 0011

von Wolfgang (Gast)


Lesenswert?

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> 
... ;-)

von Helmut S. (helmuts)


Lesenswert?

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.

: Bearbeitet durch User
von HildeK (Gast)


Lesenswert?

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. :-)

von Jacko (Gast)


Lesenswert?

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...

von Helmut S. (helmuts)


Angehängte Dateien:

Lesenswert?

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.

: Bearbeitet durch User
von Jacko (Gast)


Lesenswert?

@ 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 ...

von Helmut S. (helmuts)


Lesenswert?

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.

: Bearbeitet durch User
von G. O. (aminox86)


Lesenswert?

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).

von HildeK (Gast)


Lesenswert?

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.

von Jacko (Gast)


Lesenswert?

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! ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.