In der Zeit VOR den Mikroprozessoren

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 805
Registriert seit: Apr 2014
Bewertung: 5
#1
18.10.2020, 14:13

Hallo zusammen,

es gab ja mal eine Zeit, zu der es noch keine Mikroprozessoren gab. Ja ja, wirklich!  Big Grin
Und trotzdem gab es da schon Rechner bzw. Computer. Teilweise waren sie riesig und wurden mit Relais aufgebaut. Teilweise wurden diese mit Elektronenröhren aufgebaut und waren trotzdem riesig. Und teilweise wurden diese mit Transistoren aufgebaut. Das war dann schon recht modern und sie waren auch kleiner.

Dann aber kam die Zeit, in der man in der Lage war, elektronische Grundschaltungen der Logik in IC's zu packen. Die ersten Logik-IC's waren einfache Logikschaltungen wie AND, OR, und NAND. Damals übrigens noch nicht in TTL- oder CMOS-Technik.

Mit diesen Grundschaltungen, die es dann in IC-Form gab, konnte man alle nur erdenklichen Logikfunktionen darstellen. Auch komplexe Logiken waren so möglich. Außerdem war man in der Lage, große Schaltungen, die zuvor auf Transistoren basierten, erheblich zu verkleinern. Prozessoren gab es da aber noch nicht. Alles was ein klassischer Prozessor, wie der MOS 6502 oder der Zilog Z80, kann, wurde mit den neuen Logikbausteinen aufgebaut. Und so baute man Computer eben aus diesen Bausteinen auf.

Register, Addierer, ROMs, Oszillatoren und Steuerlogik wurden so verwirklicht.

Und warum schreibe ich das jetzt? Nun, ich habe mir vorgenommen, einen Computer zu bauen, der keinen Prozessor hat und lediglich auf Logikbausteinen aus der TTL-Reihe (74ls...) basiert. Dazu, zugegeben schon etwas moderner, zwei 2-Kilobyte große Speicherbausteine und ein paar ROMs (bzw. EEPROM's um flexibel zu bleiben) um die Steuerlogik abzubilden. Inspiriert hat mich dabei der "Breadboard-Computer" von Ben Eater (https://eater.net). Ich wollte das zunächst auch einem Breadboard verwirklichen, bin aber gescheitert, weil ich ersten nich so viele Breadboards habe, zweitens nicht so viele passende Steckbrücken und drittens es meine Geduld zu sehr strapaziert hat.

Kleine Teilschaltungen habe ich auf dem Breadboard ausprobiert, den größeren Plan habe ich bei EasyEDA direkt als Schaltplan gezeichnet und heute die PCB's bestellt. Es ist also in Gänze ungetestet.  Big Grin

Die Steuerlogik ist recht komplex und ich muss für diesen "Computer" noch so etwas wie eine Programmiersprache entwickeln. Da bin ich allerdings völlig frei. Sie ergibt sich aus den Funktionen der einzelnen Befehle, die ich selbst definieren kann.... (äh... versteht das jemand?). Das das Ganze aber in Anlehnung an Ben Eaters Projekt geschieht, kann sich der interessierte Leser ja mal die Videos auf Ben's Seite ansehen. Die sind wirklich sehr lehrreich.

Und warum mache ich das? Einfach um mein Wissen zu erweitern. Es geht auch nur um das Konzept. Der Rechner wird vielleicht mit 500 Hz (Hz!!! Nicht KHz oder gar MHz) laufen.

So... jetzt noch kurz zu den Daten der Platine:

Größe:241.43mm x 213.74mm
Schichten:2
None Signal Layers:10
Komponenten:258
Lötstellen:1506
 Komponentenlöscher:1506
Bohrungen:6
Durchkontaktierungen:213
Netze:369/369
Length of Tracks:32412.22mm
Copper Areas:0

Außerdem noch ein Schaltplan und ein Bild der bestellten Platine.
Weiter geht's dann, wenn die Platinen eintreffen und ich die ersten Tests machen kann.

Gruß
Uni

   

   
-----

Sic mundus creatus est.
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 805
Registriert seit: Apr 2014
Bewertung: 5
#2
28.10.2020, 14:49

Hallo zusammen,

Die Platinen sind da. Ich bin sehr gespannt, was alles schief gehen wird Big Grin

Gruß,
Uni


[Bild: 69b6f9f94a5801a120ca4044a559eca8.jpg]

Gesendet von meinem SM-G965F mit Tapatalk
-----

Sic mundus creatus est.
(Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2020, 14:50 von Unilein.)
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 805
Registriert seit: Apr 2014
Bewertung: 5
#3
28.10.2020, 15:17

...und wie das halt so ist, habe ich natürlich beim durchmessen gleich zwei kleine Fehler gefunden. Am IC U21 (74LS173) fehlt ein Masseanschluss. Den habe ich schlicht vergessen. Und am IC U62 (74LS04) fehlt Vcc. Da war in der Symbolbibliothek Vdd statt Vcc für den Stromanschluss angegeben und das ist mir leider entgangen.

Ich werde nun wie folgt vorgehen. Zunächst werde ich wohl das Clockmodul (unten links. Kann man leider auf dem Foto nicht erkennen, aber im Beitrag davor auf den automatisch generierten Bild von EasyEDA schon). Den Stromanschluss werde ich auch auflöten. Es handelt sich um eine USB-Buchse, wie man sie von Druckern oder auch externen Festplatten her kennt.

Nach dem Clockmodul (und nur, wenn das Modul auch funktioniert, werde ich den Zähler aufbauen (oben links). Danach die Register, dann die ALU, dann die Speicherlogik und zum Schluss die Control Logik. Nach jedem Modul werde ich versuchen, die Platine zu testen. Der Test wird immer nur ein reiner Funktionstest sein, da erst am Ende, wenn die Control Logik aufgebaut ist und die 3 EEProms (AT28C64B) programmiert sind (die ich übrigens noch nicht habe), klar sein wird, ob die Idee und das Konzept funktioniert.

Ich habe übrigens vermutlich nicht genügend Fassungen, um die IC's später nur aufzustecken. Ich überlege noch, ob ich das Risiko eingehe und alle IC's direkt auflöte. Speziell bei den LED's und den Vorwiderständen komme ich sowieso nicht umhin, den Verlust zu riskieren.

Also... Let's get right to it!

Gruß
Uni
-----

Sic mundus creatus est.
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 805
Registriert seit: Apr 2014
Bewertung: 5
#4
29.10.2020, 20:11

Hallo zusammen,

kurzer Zwischenbericht aus der Bastelwerkstatt...

Ich habe mit dem Aufbau begonnen. Und wie schon angekündigt zunächst das Clockmodul aufgebaut und dabei auch gleich die Designfehler ausgebügelt. Dazu einfach ein kurzes Kabel an die betroffenen Pins von U62 gelötet. Beim Test ist mir dann aufgefallen, dass ich im Schaltplan einen Fehler gemacht habe und die Ausgänge der beiden NE555-Timer vertauscht habe. Doof das... Lösung: Pin 3 der beiden NE55 aus der Fassung raus und vertauscht mit Kabel an U61 (74HCT08 Und-Gatter) gelöstet. In einem späteren Bericht werde ich Fotos beifügen, damit man das auch erkennen kann.

Das zweite Modul ist der Programmcounter gewesen. Dort scheint alles korrekt verdrahtet zu sein. Ein Test war mir aber dennoch nicht möglich. Denn die gesamte Platine wirkt ohne alle Bauteile wie eine Antenne. Die Pins vom Counter fangen lustig Signale auf und bringen alles durcheinander. Wird also nix mit einem ordentlichen Test. Ich hoffe aber sehr, dass sich das gibt, wenn die anderen Bauteile auch auf der Platine sind.

Und weil es das Antennenproblem gibt, habe ich beschlossen, alle Bauteile aufzulöten. Damit habe ich inzwischen begonnen. Der Accumulator ist drauf, Register X ebenfalls und auch die Controll Logik ist auch schon fertig aufgelötet. Dazu natürlich auch die Vorwiderstände und die LED's.

Leider will jetzt das Clockmodul gerade nicht mehr.... Der Timer-IC funktioniert. Ein Signal ist da. Es kommt aber nicht an der CLK-Leitung an. Ich fürchte gerade, dass das UND-Gatter, an das ich auch die Kabel angelötet hatte, evtl. den Geist aufgegeben hat. Vielleicht stimmt aber auch mit der Zuleitung für das HLT-Signal etwas nicht. Ich habe jetzt erst einmal entnervt aufgegeben. Morgen ist ein neuer Tag und dann werde ich, bewaffnet mit Oszi und Prüfspitzen wird dann einmal gründlich durchgemessen.

Gruß
Uni
-----

Sic mundus creatus est.
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 805
Registriert seit: Apr 2014
Bewertung: 5
#5
30.10.2020, 17:01

Hallo zusammen,

ich habe die Platine komplett aufgebaut. Das waren schon ein paar Stunden Arbeit.
Jetzt geht's ans Testen.

Am Clockmodul war die blaue Leuchtdiode durchgebrannt Dodgy . Keine Ahnung, wie das denn passiert ist. Da ist, wie sich das gehört, ein Vorwiderstand davor. Egal! Ich habe sie ersetzt. Wer sich erinnern mag: Am IC U21 fehlte noch der Masseanschluss. Den habe ich nachgelötet.

Die drei großen IC-Fassungen, die links in der Controll Logik zu sehen sind, werden später mit EEProms mit dem sogenannten Mikrocode bestückt. Der Mikrocode steuert die Abfolge der Aktionen, die die einzelnen Module auf der Platine durchführen sollen.

Ein Beispiel dafür:

Denken wir uns den Maschinenbefehl "LD A" (Lade Akkumulator). Dafür sind verschiedene Aktionen erforderlich. Es müssen Daten aus dem Speicher geladen werden. Die Daten müssen dann im Register A(kkumulator) abgelegt werden. Um das durchführen zu können, müssen verschiedene Controllsignale zur richtigen Zeit gesetzt werden. Der Mikrocode legt die Aktionen, die Reihenfolge und das Timing fest.

Natürlich kennt dieser "Computer" bis jetzt keine Sprache. Er kennt nur Signale auf Leitungen. Ich kann aber den Signalen Befehle zuordnen. Und zwar so, wie ich es gerne möchte. Ich kann die Sprache selbst "erfinden". Ein Additionsbefehl könnte "ADD" heißen oder "SUM" oder "KNORZ"... Es liegt in meiner Hand.

Auf dem beigefügten Bild ist der "Computer" an. Da kein Mikrocode existiert, simuliere ich die Signale mit Steckbrücken. Ich lege Signale auf 0 Volt oder auf 5 Volt. Entsprechend regiert die Platine. Der Zustand ist auf dem Foto mehr oder weniger Zufall.

Was kommt als Nächstes? Jetzt geht die Testerei los. Ich muss jedes Signal simulieren und schauen, ob die einzelnen Module reagieren. Zum Beispiel, ob der Akkumulator Daten entgegen nimmt und auch abgeben kann. Dasselbe für Register X und Y. Wenn das funktioniert, kann ich die ALU testen. Also Additionen und Subtraktionen durchführen.

Ich bin gespannt, ob die Platine tut was ich mir vorgestellt habe....

Gruß
Uni




[Bild: c58ad742d098561f339e4ba60826701d.jpg]

Gesendet von meinem SM-G965F mit Tapatalk
-----

Sic mundus creatus est.
(Dieser Beitrag wurde zuletzt bearbeitet: 30.10.2020, 17:21 von Unilein.)
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 805
Registriert seit: Apr 2014
Bewertung: 5
#6
01.11.2020, 15:41

Hallo zusammen,

wieder mal einen kurzen Zwischenstand. Ich habe schon einige Erkenntnisse gewinnen können. Die Register A, X und Y, sowie  I(nstruction Register) nehmen Daten entgegen. Beim Test fand ich ein paar kalte Lötstellen bei den LED's, die ich einfach nur nachlöten musste. Leider habe ich beim Programmzähler (Counter) einen Fehler gemacht. Die LED's sind um eine Stelle versetzt. Die erste LED leuchtet gar nicht, weil dessen Zuleitung an der zweiten LED angeschlossen ist. Die von der zweiten an der dritten usw. Die letzte LED leuchtet demnach auch nicht (bzw. diese leuchtet immer, weil dort gar nichts angeschlossen ist und TTL-Bausteine aufgrund des internen Pullup-Widerstands bei nicht angeschlossenem Eingang ein HIGH-Signal am Ausgang haben).

Tja, schade.... Und nicht mit einer kleinen Kabelbrücke zu beheben. Da es sich aber nur um die Anzeige des Zählers handelt, ist es im Grunde nicht so schlimm. Beim Test im Einzelschrittmodus ists aber schon doof, weil ich so nicht genau erkennen kann, welche Adresse vom Zähler vorgegeben wird. Das ist mindestens bei der Entwicklung des Mikrocodes nicht schön.

Leider gibt es noch ein Problem, welches durch Schlamperei meinerseits entstanden ist. Ich habe im Design vergessen, für das Masse-Netz (GND) eine große Fläche vorzusehen. Selbst nach dem vollständigen Aufbau der Schaltung reagiert sie noch extrem empfindlich auf Störungen. Meine Hand in der Nähe der Schaltung stört bereits diverse Signale. Und je nach Luftfeuchtigkeit mal mehr, mal weniger. Das ist ein schwerwiegendes Problem, da so später evtl. kein stabiler Betrieb möglich sein wird. Aktuell, in der Entwicklungsphase, ist das aber noch OK.

Es wird also wohl nötig sein, die Platine noch einmal zu bestellen und zu bestücken. Natürlich nachdem (hoffentlich) alle Fehler behoben sind.

Gruß
Uni
-----

Sic mundus creatus est.
(Dieser Beitrag wurde zuletzt bearbeitet: 07.11.2020, 14:33 von Unilein.)
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 805
Registriert seit: Apr 2014
Bewertung: 5
#7
08.11.2020, 17:51

Hallo zusammen,

hier mal wieder ein paar Informationen aus meinem aktuellen Projekt.

Wie zuvor bereits erwähnt, tun die Register, was sie sollen. Auch das Speicheradressregister ist in Ordnung. Ob die Recheneinheit tut was sie soll, weiß ich allerdings aktuell nicht. Meine recht groben Tests diesbezüglich bringen eher undurchschaubare Ergebnisse zu Tage. Ich würde erwarten, dass z.B. 10 minus 20 dazu führt, dass das Zero-Flag anspricht. Oder umgekehrt 255 plus 10 dazu führt, dass das Carry-Flag gesetzt wird. Das kann ich so aktuell leider nicht feststellen.

Der Programmzähler tut leider was er will und nicht was er soll: So richtig zählen will er nicht. Theoretisch für meine Tests nicht wirklich relevant, praktisch bekommt der Zähler die Inhalte diverser Register mit und ist somit fast immer falsch. Und somit für meine Tests unbrauchbar.

Lange Rede kurzer Sinn.... Ich habe die Schaltung noch einmal überarbeitet:
  • Massefläche angelegt (damit sollte die Empfindlichkeit der Schaltung stark abnehmen)
  • Alle IC's mit Abblockkondensatoren versehen um die Stromschwankungen zu reduzieren, wenn ein IC schaltet
  • Einen Fehler im Accumulator beseitigt (und noch keine Lösung zur Behebung gefunden)
  • Die Platine ein wenig vergrößert, um den Leiterbahnen etwas mehr Platz zu geben
  • Bauteile teilweise neu angeordnet
  • Pin-Header eingebaut um die Steuersignale einfacher manuell geben zu können (also ohne Mikrocode)

Sobald ich die Lösung für den Accumulator gefunden habe, werde ich diese noch ergänzen und dann die Platinen neu bestellen.

Gruß
Uni
-----

Sic mundus creatus est.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste