8-Bit-Computerprogrammzähler (4-Bit-Zähler-IC) zählt, wenn deaktiviert

Vor einiger Zeit habe ich eine Version von Ben Eaters 8-Bit-Computer gebaut , auf meinem Build habe ich nur UND-, NICHT- und ODER-Gatter auf alle NAND geändert. Ansonsten war das Design exakt. Ich habe es getestet, bevor ich es berührt habe, und festgestellt, dass es immer noch funktioniert. Ich habe den Arbeitsspeicher modifiziert, indem ich einen Arduino Nano und 2 595 Schieberegister hinzugefügt habe, damit ich den Computer auf Knopfdruck programmieren kann. Das funktioniert alles. Das Programm wird erfolgreich vom Arduino in den Arbeitsspeicher geladen. Der Computer selbst scheint jedoch jetzt ein Problem zu haben, da derselbe Code, der zuvor funktioniert hat, nicht funktioniert. Mir sind 2 Probleme aufgefallen:

  1. Der Programmzähler wird, obwohl er deaktiviert ist (wie durch das Multimeter unten angezeigt), gelegentlich noch zählen, wenn dies nicht der Fall sein sollte. Es ist jedoch konsistent, dass in meinem Testprogramm etwa 90% der Zeit im ersten Taktzyklus gezählt werden (was nicht sollte), dann wieder im 2. Taktzyklus, was es sollte und tut.
  2. Die ausgegebenen 7-Segment-Anzeigen geben von Zeit zu Zeit eine Zufallszahl aus, scheinbar kurz bevor sie auf eine andere Zahl umschaltet, jedoch nicht jedes Mal. Die Zufallszahl taucht auch nirgendwo anders auf, weder auf dem Bus, im Speicher noch in einem der Register.

Das Problem, auf das ich mich hier konzentriere, ist der Zähler, aber ich bin mir nicht sicher, ob die beiden Probleme auf ein gemeinsames Problem zurückzuführen sind.

Der Zähler-IC ist ein 74ls161

Was ich versucht habe:

  1. Am offensichtlichsten ist es, zu prüfen, ob der Chip zum richtigen Zeitpunkt aktiviert ist, um zu prüfen, ob es sich um ein Problem mit der Steuerlogik handelt. Basierend auf dem Multimeter wird es nur aktiviert, wenn es sein sollte.
  2. Der Chip wird nicht geladen, das einzige Mal, dass er jemals geladen werden sollte, ist, wenn Sprungbefehle auftreten, von denen es in meinem Testprogramm keine gibt, dies wird auch mit einem Multimeter überprüft.
  3. Ich versuche, lose Kabel und Kurzschlüsse zu reparieren, wenn es einen gibt, der es verursacht, habe ich ihn noch nicht gefunden
  4. Ich habe den Zähler vom Computer entfernt und ihn selbst getestet, und er scheint gut zu funktionieren
  5. Ich habe versucht, ein EEPROM auszutauschen, das ich für zweifelhaft hielt, da es sich bei Berührung "auszuschalten" schien, aber ich glaube, dass dies eine Art Kurzschluss war, da dieses Problem jetzt nicht mehr besteht. Allerdings kann ich mir nicht 100% sicher sein, dass das so war.
  6. Zuletzt habe ich im Assembly-Testcode nach Mustern gesucht, aber die Probleme treten während des Testlaufs ein paar Mal auf und keine Anweisung wird mehr als einmal verwendet. Dies geschieht jedoch normalerweise während des allerersten Mikrocodebefehls, der für jeden Assemblerbefehl konsistent ist (Ausgeben des Zählers an den Bus und Empfangen des Speicheradressregisters).

Ich werde regelmäßig vorbeischauen und versuchen, so aktiv wie möglich hier bei der Arbeit zu sein. Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen!

Beschreibung der Fotos, da ich die Bildunterschriften nicht sehe

  1. Schritt 0, der Computer hat das Programm hochgeladen und wurde gerade zurückgesetzt (natürlich ohne RAM). 't), was bedeutet, dass es nicht mit der nächsten Uhr rechnen sollte. Bestätigt durch Multimeter
  2. Der Zähler (oben rechts, grüne LEDs, gezählt, obwohl er deaktiviert ist. Er ist JETZT aktiviert, sowohl bestätigt durch das CE-Licht als auch das Multimeter)
  3. Wieder wurde der Zähler inkrementiert, diesmal sollte es sein, aber jetzt wird uns eine ganze Speicheradresse fehlen

Schritt 0, der Computer hat das Programm hochgeladen und wurde gerade zurückgesetzt (natürlich ohne RAM). 't), was bedeutet, dass es nicht mit der nächsten Uhr rechnen sollte.  Bestätigt durch Multimeter Der Zähler (oben rechts, grüne LEDs, gezählt, obwohl er deaktiviert ist. Er ist JETZT aktiviert, sowohl bestätigt durch das CE-Licht als auch das Multimeter) Wieder wurde der Zähler inkrementiert, diesmal hätte er es tun sollen, aber jetzt wird uns eine ganze Speicheradresse fehlen

Ich sehe nur sehr wenige Entkopplungskondensatoren in Ihrem Setup - vielleicht ein oder zwei pro Steckdosenleiste. Wenn Sie hauptsächlich LSTTL verwenden, reicht das bei weitem nicht aus. Früher hatten wir selbst bei Verwendung einer richtigen Leiterplatte normalerweise fast einen Kondensator pro Chip . Wenn Sie LEDs mit Signalen ansteuern, die auch an andere Logik gehen, gefährden Sie außerdem ernsthaft Ihre Rauschgrenzen für diese Signale.
Ja, das ist sehr wahr. Mein nächstes Projekt wird Steckbretter in viel geringerem Maße verwenden. Das werde ich mir für den nächsten merken. Dieser Computer hat jedoch vorher funktioniert, ich habe das Arduino herausgezogen, um zu sehen, ob das Arduino vielleicht zu viel zeichnet, aber es hat keinen Unterschied gemacht.

Antworten (1)

Holen Sie sich bedrahtete 0,1-uF-Kappen, verteilen Sie die Leitungen und stecken Sie sie von Pin 7 (GND) bis Pin 14 (VDD) über die Oberseite jedes ICs.

Sie haben physische Änderungen vorgenommen, und Induktivitäten, die vor den Änderungen NIEDRIG GENUG waren, sind jetzt möglicherweise nicht mehr niedrig genug.

Ein weiteres Risiko ist das Fehlen von GROUND GRID.

==========================================

Zurück an der Universität implementierte ich eine 70-TTL-IC Tic-Tac-Toe-Maschine.

Da ich wenig über EMI wusste und mich noch nicht mit V = L * dI/dT beschäftigte, hatte ich professionelle Implementierungen großer IC-Systeme mit Wire-Wrap-Platinen (Augat) gesehen, die solide GND- und solide VDD-Ebenen (mit Tausenden von Wirewrap-Pins durchstochen) lieferten ).

Da ich kein Budget für solche Feinheiten hatte, habe ich lediglich X + Y-Erdungsdrähte (und X_only VDD-Drähte) eingefügt, die an jedem X + Y an jeder Kreuzung gelötet wurden.

Diese X + Y-Paralleldrähte (5 für X- und 18 für Y-Richtung), die bei jeder Gelegenheit gelötet wurden (4 * 17 = 68 Knoten), waren ein feines GROUND GRID und stellten sicher, dass die 5-Nanosekunden-TTL-Flanken immer innerhalb von 0,1 Zoll eines return_ground_wire lagen.

Mit 0,1-uF-Bypass-Kappen über jedem der 70 ICs (normalerweise Pin 14 zum GND-Gitter) gab es keine Debugging-Probleme.

Was ist ein Bodengitter?
@dka13 Ein Netzwerk für Boden, das überall läuft. Wenn es sich um ein massives Kupferblech handelt, ist es eine Grundplatte. Wenn es ein Drahtgeflecht ist, ist es ein Erdungsgitter.
Für alle, die sich das später ansehen, akzeptiere ich dies als Lösung, da es höchstwahrscheinlich mein Problem zu sein scheint. Wenn ich etwas anderes finde, das ich vermasselt habe und das das Problem verursacht, werde ich zurückkommen und die Antwort ändern