Scannen von Matrixtastaturen mit 74LS194

Ich versuche, eine Matrixtastatur mit einem 74LS194 zu scannen. Das System funktioniert auf diese Weise, es gibt ein Schema unten, um die Erklärung zu unterstützen:

  1. Ein paralleles Laden wird durchgeführt, um eine zu verschiebende '1' einzufügen (Laden)
  2. Das System verschiebt die '1' solange, bis eine Taste gedrückt wird (!KeyDetected)
  3. Wenn eine Taste gedrückt wird (!KeyDetected), wird das Bit gehalten, damit das System die Zeilen- und Spaltenwerte lesen kann.
  4. Sobald die Taste losgelassen wird, wird das Bit nicht mehr gehalten und erneut verschoben.

Der Benutzer wird niemals mehr als eine Taste gleichzeitig drücken.

Im Simulator (Proteus) funktioniert einwandfrei. In der Schaltung, die ich um das Design herum mit LS-TTL-Chips und 1k-Widerständen aufgebaut habe, bekomme ich das Problem.

Bei einigen Drücken funktioniert das System gut, aber nach einigen Drücken, wenn die Taste nicht gedrückt wird, gibt das Register '0' in allen Ausgängen aus.

Ich suche seit Tagen alle Pins am Oszilloskop und nichts ist eindeutig. Aus irgendeinem Grund geht das Bit verloren.

Dies ist der Oszilloskopwert eines Ausgangs, wenn die Taste gedrückt wird. Anscheinend liegt es zwischen den Grenzen: Oszilloskop lesen.

Ich frage nach der Ursache dieses Problems, damit ich es beheben kann

Tastatur-Scan-System

Danke schön!

Hallo, dies ist eine Q&A-Seite, welche Frage hast du? Bitte bearbeiten Sie Ihre Frage und fügen Sie eine Frage hinzu.
For some reason, the bit is lost.... denken Sie darüber nach, was dazu führen würde, dass sich das Bit über Q3 hinaus verschiebt
@jsotola, Q3 ist mit SR verbunden, um es in Bewegung zu halten, und das tut es für einige Pressen ...
das war ein Hinweis ... ein zusätzlicher Taktimpuls zur falschen Zeit würde das Bit verschwinden lassen ... Q4 zur falschen Zeit niedrig gezogen könnte es tun, wenn Sie sich auf Rezirkulation verlassen
Betreiben Sie die Schaltung nur in einem Simulator oder haben Sie sie tatsächlich mit einem LS-TTL-Chip und 1k-Widerständen gebaut?
@Justme, im Simulator (Proteus) funktioniert einwandfrei. In der Schaltung, die ich um das Design mit LS-TTL-Chips und 1k-Widerständen herum gebaut habe, bekomme ich das Problem.

Antworten (1)

Laut Datenblatt des 74LS194-Chips hat er einen empfohlenen maximalen Ausgangsstrom von 0,4 Milliampere, was eine Ausgangsspannung zwischen 2,7 und 3,5 Volt garantiert.

Dies bedeutet, dass Ihre 1k-Pulldown-Widerstände den Ausgang zu stark belasten und ein Eingang ihn möglicherweise nicht mehr als logisch 1 bestimmt. Außerdem hat der Schaltplan keine Bypass-Kondensatoren. Wenn Ihre Schaltung also auch keine Bypass-Kondensatoren hat, funktioniert sie möglicherweise nicht richtig.

Danke schön! Behebt das Entfernen der Widerstände das Problem?
@ James221 ICH OH = 400 μ A ist die Standard-Beschaffungsstrom-Konformität für LS-TTL-Teile. Siehe dieses Diagramm . Beachten Sie auch sorgfältig v OH Und v ICH H . Es gibt nur ungefähr, im schlimmsten Fall, 400 mV Trennung bei Belastung durch 400 μ A . Nicht viel Rauschabstand oder Rand im Allgemeinen. Stellen Sie nur sicher, dass Sie diese Details sorgfältig entwerfen. Dazu gehört auch ein Blick auf das MCU-Datenblatt.
Ihre aktuelle Schaltung arbeitet gegen die Stärken von TTL - ändern Sie Ihre Logik so, dass ein logisches Low verwendet wird, um die Zeile mit einem Pullup-Widerstand an den Spalten auszuwählen - TTL hat eine bessere Senke als Quellspezifikationen. Sie werden dies in Old-Skool-Designs sehen. Außerdem möchten Sie möglicherweise Seriendioden in den Reihen hinzufügen, damit mehrere Tastendrücke die LS194-Ausgänge nicht kurzschließen.
@Kartman Oder wechseln Sie einfach zu Open-Collector-Geräten, genau das, was wir in Old-School- Designs verwendet haben, und das waren auch die allerersten Teile, für die TI sorgte, dass wir sie auch damals zur Verfügung hatten. Wir haben so gut wie nie TTL-Ausgänge zum Key-Scannen verwendet. (Und Tri-State war wie ein Luxusartikel, der Jahre später auf den Markt kam.)
@jonk - Ich kann mich nicht an zu viele TTL-Schieberegister mit Open-Collector-Ausgängen erinnern. Normalerweise ein Zähler mit einem 7445 oder später einem LS156. Nicht zu vergessen 7406/07.
@Kartman Gibt es keine. Wir würden wahrscheinlich den 74LS156 verwenden. Es wäre selbstgetaktet und wir würden ein 3-Zoll-UND-Gatter verwenden, um ein STOP auf einer Taste zu erkennen und dieses als Signal zu verwenden, um die Zeile und Spalte zu erfassen und (über ein UND-Gatter) die Uhr zu blockieren.
Und werfen Sie für ein gutes Maß eine 555 ein.
Ich habe der Frage einen Oszilloskopwert hinzugefügt. Es sieht so aus, als ob er zwischen den Grenzen dessen liegt, was als logische '1' angesehen wird.
@ James221 Ja, es beweist, dass beim Drücken der Taste ein 1k-Widerstand zwischen Ausgang und Masse angeschlossen wird, sodass der Ausgang zu stark belastet wird und ungültige Spannungen entstehen. Also mach das nicht.
Ja, wenn Sie die Pulldowns noch stärker machen, wird der Ausgang noch unangemessener belastet und das Ausgangssignal viel schlechter.
Hallo, ich habe den 1k Pulldown gegen einen 180 Ohm Pulldown ausgetauscht, und es ist noch schlimmer, der Wert am Ausgang sinkt so sehr, dass schon beim ersten Drücken das Bit verloren geht. Mir fehlen sicherlich grundlegende Konzepte aus dem ersten Kurs der analogen Elektronik. Sollte ich stattdessen den Wert erhöhen?
@Justme, ich habe sie von 1K Ohm auf 180 Ohm geändert, also habe ich den Pulldown dadurch schwächer gemacht und es wurde schlimmer.
Nein, du hast es nicht schwächer gemacht, du hast es sogar noch stärker gemacht, ungefähr fünfmal stärker.
2.2k hat bei mir ausgereicht. Danke schön!
Beachten Sie jedoch, dass die 2,2-KB-Last immer noch die empfohlenen Chip-Grenzen überschreitet.
@Justme, laut dieser Seite electronics-tutorials.ws/logic/pull-up-resistor.html sollte es 2k sein, ich dachte, 2,2k wäre eine gute Annäherung.
Sicher, ein 2k könnte ein geeigneter Wert als Pull-Down-Widerstandswert für einen TTL-Chip-Eingang sein. Ein TTL-Chip kann jedoch keinen 2k-Widerstand als Last mit ausreichend hoher Spannung ansteuern, damit ein TTL-Eingang ihn als logisch hoch bestimmt.
@Justme, Okay, sagen wir, ich möchte 3 V ausgeben, da ich weiß, dass der Ausgangsstrom 0,4 mA beträgt, der Widerstandswert nach dem Ohm-Gesetz 7,5 k betragen sollte. Habe ich recht?
Ich habe mehrere Widerstandswerte ausprobiert, nach einigen Drücken schlägt es früher oder später fehl. Könnte es auch ein Problem auf logischer Ebene sein?