Umgang mit digitalen Schaltungen und der damit verbundenen Schaltgeschwindigkeit?

Beim Entwerfen einer digitalen Ein-Minuten-Zählschaltung stieß ich auf ein schwieriges Problem.

Grundsätzlich habe ich die Schaltung so entworfen, dass sie den (normalerweise HIGH) Takt des 10er-Steckplatzes niedrig treibt, wenn der aktuelle Zustand des 1er-Steckplatzes 9 war (eigentlich nur, wenn das erste und letzte Bit HIGH -> 1001 sind).

Die Geräte, die ich verwende, sind positive Flanken. Wenn also der 1s-Slot auf Null zurückkehrt, ist die Bedingung nicht mehr erfüllt - daher kehrt die Uhr in einen HIGH-Zustand zurück und erhöht den 10s-Slot.

Das Problem ist, dass ich Probleme mit doppelten Takten hatte (7-> 8-Übergang und der entworfene Uhrmechanismus).

Es stellt sich heraus, dass es beim Umschalten zwischen 7 -> 8 (0111 -> 1000) gerade genug Verzögerung gab, dass die erste/letzte Bit-HIGH-Bedingung erfüllt ist:

dh eine Kombination tritt in der Übergangsperiode auf, um ein logisches HIGH am Ausgang zu registrieren

1001 1011 1101 1111

Die vorübergehende Lösung für das Problem, das ich mir ausgedacht habe, bestand darin, die Uhr für den 10er-Steckplatz tatsächlich NIEDRIG zu halten, bis die Bedingung erfüllt ist, bei der der 1er-Steckplatz gleich 0 (0000) ist (also im Wesentlichen Uhr, WENN wir im Gegensatz zu vorher zum Zustand kommen ). Diese Lösung erfordert jedoch zu viele Gatter (ein NOR-Minimum mit 4 Eingängen). Mein vorheriges Design wurde tatsächlich von einem anderen Teil des bereits vorhandenen Designs gespeist, sodass keine zusätzlichen Schaltkreise erforderlich waren .

Irgendwelche Ideen für eine effizientere Lösung?

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Die in diesem Design verwendeten ICs sind der 74LS47 (7Segment-Decoder) und der 74LS163 (4-Bit-Binärzähler). Der Pulldown-Widerstand ist ein Mechanismus, um die Zähler auf 00 zu setzen und zu halten, während der Schalter geschlossen ist.

Antworten (3)

Der '163 ist ein synchroner Zähler (mit synchronem Reset), daher gibt es absolut keine Entschuldigung dafür, ihn mit einer Uhr im "Ripple"-Stil zu verwenden.

Stattdessen sollten Sie die Takteingänge beider Zähler mit Ihrer Taktquelle verbinden und die Eingänge „Enable P“ und „Enable T“ verwenden, um zu steuern, wann der zweite Zähler vorrückt.

Wenn Sie Probleme mit der Schaltgeschwindigkeit auf einem langsamen Schaltkreis haben, ist die einfachste Lösung, ihn zu verlangsamen. Ich würde vorschlagen, Ihre ursprüngliche Idee zu verwenden, aber einen Serien-RC-Tiefpassfilter (Serie R, dann Shunt C zu GND) direkt vor dem Takteingangspin mit einer Zeitkonstante (R mal C) in der Größenordnung von etwa einer Millisekunde hinzuzufügen. Dies sollte alle sehr kurzen Runt-Impulse herausfiltern, die erzeugt werden. Wenn das nicht funktioniert, erhöhen Sie die Zeitkonstante auf 10 ms oder sogar 100 ms. Zu hoch und es wird jedoch eine merkliche Verzögerung geben.

Die Uhr ist nicht das Problem. Das Problem liegt in der Schaltgeschwindigkeit der Gatter. Die Uhr geht zum Beispiel auf HIGH und es gibt einen kurzen Moment, in dem die Bits von 0111 -> 1000 umschalten, dass das erste und das letzte Bit gleichzeitig eingeschaltet sind.
Ich beziehe mich auf den Takteingangsstift am Zähler, der aufgrund des Fehlers einen Schritt überspringt. Die RC-Schaltung "frisst" den Glitch-Impuls, um zu verhindern, dass der Zähler erhöht wird, wenn dies nicht vorgesehen ist.

So wie ich es sehe, verursachen Sie sich selbst Probleme, indem Sie mehrere Taktdomänen verwenden, und schlimmer noch, indem Sie eine Uhr aus Daten ableiten. Das Problem mit Daten ist, dass sie sich regeln müssen. Deshalb haben wir getrennte Uhren. Eine kombinatorische Schaltung, die einige Variablen auswertet und dann eine Uhr ansteuert, lädt zu Ärger ein.

Zweitens, wenn Sie es vermasseln wollen, machen Sie es zumindest richtig. Sie können eine 9 nicht erkennen, indem Sie beachten, dass das erste und das letzte von vier Bits 1 sind. Wenn Sie ein Signal wünschen, das bei einer 9 ausgelöst wird, müssen Sie alle vier Bits ernsthaft auswerten und dieses Signal nur auslösen, wenn sie 1001 sind.

Es gibt keinen Grund, dies nicht so zu gestalten, dass ein einziger Takt auf alle Chips verteilt wird. Dann geht es darum, die Uhr langsam genug laufen zu lassen, damit sich alle Ein- und Ausgänge einpendeln, bevor jede Flanke eintrifft.

Lesen Sie das Datenblatt. Der TI sagt eindeutig: „Die Carry-Look-Ahead-Schaltung ermöglicht n-Bit-synchrone Anwendungen ohne zusätzliches Gating. Maßgeblich für die Erfüllung dieser Funktion sind zwei Zählfreigabeeingänge und ein Ripple-Carry-Ausgang. Beide Zählfreigabeeingänge P und T müssen hoch sein zählen [...]".

Es hört sich so an, als ob diese Chips dazu bestimmt sind, einfach miteinander verbunden zu werden. Sie können verhindern, dass die obere Ziffer bei der nächsten Taktflanke aufwärts zählt, indem Sie ihre Zählfreigabeeingänge deaktivieren. Immer wenn die untere Ziffer neun ist, kann Ihre Schaltung den Chip für die obere Ziffer zum Zählen aktivieren und auch die untere Ziffer so einrichten, dass sie einen synchronen Reset durchführt.

Wenn die nächste Taktflanke eintrifft (an allen Chips), zählt die obere Ziffer hoch und die andere springt auf Null.

Das ist wahr. Ich denke jedoch, wenn Sie für etwas so Einfaches mit diskreter Logik arbeiten, ist das Hinzufügen der gesamten zusätzlichen Logik, die erforderlich ist, um alles in einer Taktdomäne zu erhalten, nicht immer die beste Lösung. Ja, es ist möglicherweise nicht in der Lage, bei 10 MHz zu arbeiten, aber in diesem Fall scheint es, als müsste die Schaltung nur bei 0,1 Hz laufen, sodass eine alternative Methode genauso gut funktionieren sollte, aber weniger Chips benötigt.