Forum: Projekte & Code diskreter uC (und er funktioniert sogar)


von Johannes W. (klosskopf)


Angehängte Dateien:

Lesenswert?

Hier im Forum hört man ja öfter mal von irgendwelchen Plänen, CPUs, oder 
ganze Controller diskret bauen zu wollen.
Irgendwie hört man von den meisten nie wieder. Daher hab ich jetzt 
erstmal gebaut und getestet und
poste jetzt erst meinen kleinen bescheidenen Beitrag

Die Leiterplatten hab ich zwar ätzen lassen, aber jedes einzelne Bauteil 
von Hand gelötet.
(ca. 4000 Dioden, 2000 Transistoren und 4000 Widerstände)
Und nach ca. 4 Monaten hab ich jetzt nen 8bit Rechner mit:
-256Byte ROM (Diodenmatrix)
-16Byte RAM (Der Turm)
-ADD,SUB,OR,AND,XOR
-conditional branches: = != > <= (signed und unsigned)
-direct und indirect addressing leider nur Daten (Sprünge nur direkt)

Leider hab ich nicht darauf geachtet, dass die Ladungen aus der Basis 
auch wieder abfließen können,
weshalb er nicht wirklich schnell ist. (vielleicht 1kHz)

Auch ordentliche Logikpegel wurden eher nicht beachtet. Innerhalb der 
Module haben die meisten Gatter den gleichen Eingangs und 
Ausgangswiderstand.

Zunächst wollt ich das ganze fliegend verdrahten, hab mir dann aber doch 
n 300x300mm MAinboard ätzen lassen.
Daher die vielen unsachgemäßen bunten Verbindungen.

Das vorletzte Bild ist ein diskret aufgebauter und vereinfachter NE555 
als Taktgeber.
(Etwas zu sehr vereinfacht, daher die Kondensatoren)

Was er leider nicht hat sind Interrupts und leider leider auch kein 
Stack.
Vor allem indirekte Sprünge fehlen.

Hat natürlich nur ein Arbeitsregister. Das macht das Programmieren etwas 
umständlich.

Falls jemand ne Idee hat, was ich damit machen könnt. Immer raus damit.
Ist komplett funktionsfähig (endlich; Fehlersuche ist echt nicht lustig 
bei dem Scheißteil
(Vor allem, weil mir n tristate-Bus zu aufwendig war. Also hab ich 
rezessive und dominante Logik-Pegel))

Aber andererseits, wenn es nützlich wär, wär es ja Arbeit. (Nicht dass 
ich schon richtig arbeiten würde (Verbundstudent))

Für die die sich fragen, wo denn da der ROM im Bild ist. Der wird grad 
durch n Raspi emuliert.
Die Diodenmatrix funktioniert zwar, es ist aber ein klein wenig 
umständlich bei jedem Programmierfehler
die gesamte Matrix neu zu verlöten.

Die nächste Stufe scheint mir, wäre ein Rechner mit Pipelines. Bei mir 
braucht ein Befehl stupide 5 Tacktzyklen und zwei Byte ROM.
Aber das ist dann was für jemand anderen. Mir scheint James Sharman hat 
grad genug Probleme mit seinem.


Für die exakt 5 Hanserl dies interresiert: Hier noch der für den 
Programmierer verfügbare opcode:
(Sowas wie increment Programm Counter ist intern auch n Befehl, kann 
aber nur die Control Unit
1. PC - > Rom->befR
2. inc .   PC
3. PC->Rom->TransR
4. inc. PC
5. exec bef
)

0xff. Nop        : No operation
0xf0. Add        : Addiere w-Register mit RAM
0xf1. Add const  : Addiere w-Register mit konstante
0xf2. Sub        : Subtrahiere RAM von w
0xf3. Sub const  : Subtrahiere konstante von w
0xf4. And        : ...
0xf5. And const  : ...
0xf6. Or         : ...
0xf7. Or const   : ...
0xf8. xor        : ...
0xf9. xor const  : ...
0xfa. shiftR     : schiebe rechts; rücke 0 nach
0xfb. shiftL     : schiebe links; rücke 0 nach
0xfc. out        : w-Register auf 8bit Ausgang
0xfd. in         : Eingang ins w-Register
0xfe. ldpc       : Lade Programm-Counter ins w-Register
0x0f. jmp        : Lade Programm-Counter mit konstante
0x1f. Beq        : Sprung, wen vorherige Subtraktion = 0
0x2f. Bne        : Subtraktion != 0
0x3f. Bls        : Subtraktion <= 0 (unsigned)
0x4f. Bhi        : Subtraktion > 0 (unsigned)
0x5f. Bgt        : Subtraktion > 0 (signed)
0x6f. Ble        : Subtraktion <= 0 (signed)
0x7f. LdROM      : Lade Konstante aus ROM (addresse)
0x8f. LdROM ptr  : Lade Konstante indirekt aus ROM
0x9f. LdRAM      : Lade Variable aus RAM
0xaf. LdRAM ptr  : Lade Variable indirekt aus RAM
0xbf. LdR const  : Lade w-Register mit Konstante (ohne addresse)
0xcf. StR        : Speicher Variable ins RAM
0xdf. StR ptr    : Speicher Variable indirekt ins RAM
0xef. LdPtr      : Beschreibe das Pointerregister (fürs indirekte
                 Addressieren)

: Verschoben durch Admin
von Aaron C. (Firma: atcnetz.de) (atc1441)


Lesenswert?

Respekt !

Gefällt mir gut, auch wenn ich keine Verwendung weiß aber für dich zum 
Lernen bestimmt sehr gut gewesen.

: Bearbeitet durch User
von $$$ (Gast)


Lesenswert?

Da fehlen LEDs!

Voll viele LEDs!

Und noch mehr LEDs!

von Johannes W. (klosskopf)


Lesenswert?

$$$ schrieb:
> Da fehlen LEDs!
>
> Voll viele LEDs!
>
> Und noch mehr LEDs!

Da hast du völlig Recht! Das ist eins der Dinge, die ich im Nachhinein 
anders gemacht hätte. Anderersets würden all die LEDs auch von den 
Ausgabe-LEDs ablenken.

: Bearbeitet durch User
von $$$ (Gast)


Lesenswert?

> Die Diodenmatrix funktioniert zwar

Mein erster Z80 hatte als "Urlader" zum binaeren Eintippen
der Befehle auch einen 74154 und ein Haeufchen (Ge-)Dioden.

Und 3 kByte dRAM in schneeweissen 1103 mit gueldenem Deckelchen
und gueldenen Beinchen.

von Sebastian Frank (Gast)


Lesenswert?

Alter Schwede!!!

Respekt für diese Geduld und die Mordsarbeit.
Wie sauber die Dioden und Transistoren positioniert sind!
Da war sicher viel Liebe zum Detail im Spiel.

Was hast Du gemacht, als Du festgestellt hast, dass der Controller 
funktioniert?

von Johannes W. (klosskopf)


Lesenswert?

Sebastian Frank schrieb:
> Alter Schwede!!!
>
> Respekt für diese Geduld und die Mordsarbeit.
> Wie sauber die Dioden und Transistoren positioniert sind!
> Da war sicher viel Liebe zum Detail im Spiel.
>
> Was hast Du gemacht, als Du festgestellt hast, dass der Controller
> funktioniert?

Ich hab alles nacheinander aufgebaut. Ein Modul eingefügt, getestet, 
debugged, debugged, debugged, und das nächste Modul. Allein das hat 
schon fast zwei Wochen gedauert. Danach war ich einfach nur müde (Hat 
ein paar Nächte gekostet, die ich eher zum schlafen verwenden hätte 
sollen) und bin ins Bett gegangen.

Ist auch ein Traum, wenn man erst alles zum ersten Mal zusammengebaut 
hat, nen Widerstand sieht, den ich auf einer Seite vergessen hab zu 
löten. Also schnell den Lötkolben genommen, dann machts kurz Bzzz und 
nix funktioniert mehr, weil ich die Spannungsversorgung vergessen hab 
abzustöpseln. Hat fast zwei Tage gebraucht alle Fehler zu finden.

von foobar (Gast)


Lesenswert?

Spielt grob in der Klasse der kleinsten MCUs (Attiny4 oder der 3-Cent 
Padauk-MCUs), außer dass die schneller sind ;-)

Aber ein schönes Anschauungsmodell um Leuten die Komplexität (und den 
Preiverfall) moderner Rechner zu verdeutlichen: sieht modern und komplex 
aus aber selbst eine ganze Turnhalle, mit solchen Monstern 
vollgestapelt, erreicht nicht die Leistungsfähigkeit einer 
MicroSD-Karte, geschweige eines modernen Handys.

von Johannes W. (klosskopf)


Lesenswert?

foobar schrieb:
> Spielt grob in der Klasse der kleinsten MCUs (Attiny4 oder der 3-Cent
> Padauk-MCUs)

Wahrscheinlich nicht mal ansatzweise. Ich kann mir nicht vorstellen, 
dass die kommerziellen uC so ineffizient ihr Programm abarbeiten

von Dennis (Gast)


Lesenswert?

Nettes Projekt und saubere Arbeit! Sieht man selten.

von foobar (Gast)


Lesenswert?

>> Spielt grob in der Klasse der kleinsten MCUs (Attiny4 oder der 3-Cent
>> Padauk-MCUs)
>
> Wahrscheinlich nicht mal ansatzweise. Ich kann mir nicht vorstellen,
> dass die kommerziellen uC so ineffizient ihr Programm abarbeiten

Oh, wunder dich nicht: die PIC-Architektur (die Padauk-MCUs sind 
PIC-Clones) ist uralt und wirklich auf minimalen Gatter-Count getrimmt - 
die hat 12-Bit-Instructions, braucht 4 Takte pro Befehl (8 bei Branches) 
und hat nen fixen 2-Level-Stack.  Die AVR sind allerdings moderner.

von Bürovorsteher (Gast)


Lesenswert?

Endlich mal etwas wirklich Beeindruckendes hier im Forum!
Chapeau!

von Jens M. (schuchkleisser)


Lesenswert?

Huebsch.
Das Teil muss in einem WOPR-mäßigen Kasten aus Plexi mit 2048 LEDs, die 
schöne Muster blinken, und dann etwas Hausautomation betreiben.
Ein Raumthermostat, Thermohygrometer, sowas.

von F. F. (foldi)


Lesenswert?

Das Leben kann schon langweilig sein ...

von Johannes W. (klosskopf)


Lesenswert?

F. F. schrieb:
> Das Leben kann schon langweilig sein ...

Ja! Aber dagegen hat man ja Hobbys :)

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Echt nicht schlecht, ich hätte so viel Geduld nicht.
Vorsichtige Frage: Wieviel hat der Spaß gekostet?

von Johannes W. (klosskopf)


Lesenswert?

Ben B. schrieb:
> Echt nicht schlecht, ich hätte so viel Geduld nicht.
> Vorsichtige Frage: Wieviel hat der Spaß gekostet?

ca. 300 Euro.
Wär vermutlich auch mit 200 gegangen, aber du glaubst ja gar nicht, wie 
oft ich irgendwelche Teile nachbestellen musste. Dann hab ich manchmal 
sogar aus dem Inland bestellt, nur um weiterarbeiten zu können.

Generell hab ich aber so ziemlich das billigste(und zumeist 
schlechteste) bestellt, das ich zumeist auf e-bay finden konnte

von 5er (Gast)


Lesenswert?

n 5er.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Nich schlecht, ist denn noch geplant eine Dokuwebseite aufzusetzen?
Oder mal den ein oder anderen Schaltplan hier reinzuhängen?

von Johannes W. (klosskopf)


Angehängte Dateien:

Lesenswert?

Mw E. schrieb:
> Nich schlecht, ist denn noch geplant eine Dokuwebseite aufzusetzen?
> Oder mal den ein oder anderen Schaltplan hier reinzuhängen?

Für ne Dokuseite bin ich A) viel zu schreibfaul und B) nicht wirklich 
zufrieden mit zu vielen Stellen.
Die Schaltpläne kann ich gerne reinstellen. Hab die meisten Sachen, die 
ich beim erstellen verbockt hab korrigiert(seh grad, ich hab vergessen 
shift-left anzupassen), jedoch nicht die Layouts neu gemacht.
Übersichtlich, schön oder gar hilfreich sind allerdings nicht die 
geeigneten Begriffe für die Schaltpläne

: Bearbeitet durch User
von sid (Gast)


Lesenswert?

BILDSCHÖN!

Respekt! ..vor allem auch für die Engelsgeduld das Dingen zu bestücken!

Ich mag übrigens die bunten Patchkabel,
so bekommt das Dingen irgendwie was "realeres"
Computer haben numal auch Draht drin, gell?

Meiner Meinung nach musst Du da jetzt alte Fluoreszenzanzeigen
aus alten HifiAnlagen mit 'befeuern'
ne schnöde LED ist viel zu profan für das Schmuckstück!

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Wieviel Strom braucht das bei Vollbestückung?

von Johannes W. (klosskopf)


Lesenswert?

Ben B. schrieb:
> Wieviel Strom braucht das bei Vollbestückung?

Ziemlich genau 0,5A. Ich betreib die meisten Gatter mit 100k Pullup am 
Ausgang und 100k Eingangswiderstand. Das versaut mir natürlich meine 
ganzen Pegel, aber da wos nötig ist hab ich halt 10k pull-up verwendet.
 Die Transistoren arbeiten echt am unteren Limit

von Johannes W. (klosskopf)


Lesenswert?

sid schrieb:
> Meiner Meinung nach musst Du da jetzt alte Fluoreszenzanzeigen
> aus alten HifiAnlagen mit 'befeuern'

Wies der Zufall so will, war mein vorheriges Projekt ne Treiberplatine 
für ein VFD. Aber dann hät ich halt doch wieder ICs im Rechner.

Aber wahrscheinlich mach ich des. VFDs sehen einfach zu gut aus.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Dein nächstes Projekt: Diskrete VFD/NIXI-Treiber. ;)
Wird aber eher langweilig wenn man es geschafft hat, einen diskreten µC 
zu basteln. Ich hätte übrigens mit deutlich mehr Strom gerechnet, so 
2..3A hätte ich schon gedacht.

Aber ich fürchte für eine Uhr oder so wirst Du noch etwas mehr Speicher 
brauchen. Wobei 16 Byte hast Du... vielleicht reicht das, aber ob die 
256 Byte ROM reichen? Allerdings sehen die ROM-Platinen im Vergleich zum 
RAM ziemlich effizient aus.

Edit: Wieviel würde so ein Aufbau bestückt kosten und wenn man evtl. 
noch LEDs hinzufügt, um Zustände innerhalb der Maschine darzustellen? Du 
solltest überlegen, ob Du das vielleicht als Lehrmodell oder so 
verkaufen könntest. Bei der Menge Arbeit, die Du da investiert hast und 
dem wirklich schönen Ergebnis...

: Bearbeitet durch User
von Johannes W. (klosskopf)


Lesenswert?

Ben B. schrieb:
> Du
> solltest überlegen, ob Du das vielleicht als Lehrmodell oder so
> verkaufen könntest.

Dazu bräuchte es dann doch eine zweite kommplett generalüberholte 
Version. So wurden zu viele Fehler im Nachhinein ausgebessert. Keine 
Ahnung, wie viel das kosten würde. Materialkosten vermutlich 300-400 
Euro (bräuchte dann wohl ordentliche Stecker.) Und was das Bestücken 
kosten würde, will ich glaub ich gar nicht wissen.

von Kurt H. (Firma: KHTronik) (kurtharders)


Lesenswert?

Hallo,
das erinnert mich heftig an die PDP-8 (s. Wikipedia) an der ich 1970 
meine ersten Programme erstellt habe. Das dort verwendete Konzept für 
den Befehlssatz war schon recht effizient. Am Desy (Hamburg) waren ein 
Assembler und ein Editor entwickelt worden. Der Bootloader für die 
DEC-Tapes bzw. später die 2,4MB-Platte wurde anfangs über die Tasten 
eingegeben, später gab es dann einen ROM aus Dioden.
Die Komponenten waren auf standardisierten Boards untergebracht, die 2-3 
ICs der Komplexität eines 7400 enthielten :-).
Da ist Deine Lösung schon fast High-Tec :-).

Grüße, Kurt

von PittyJ (Gast)


Lesenswert?

Könnte man das nicht automatisch herstellen?

Ich hatte vor Jahre mal eine CPU im FPGA. Die brauchte ca 1000 Luts. Da 
bräuchte man doch nur eine Lut zu Designen, bei der man die 
Programmierung über Drahtbücken erledigt. Dann bestellt man sich 1000 
Luts beim Chinaman, lötet die Drahtbrücken und klöppelt die Luts 
zusammen.
Bei manchen FPGA hat eine Lut nur 4 Bit, (so wie ich das verstanden 
habe), also würde 16 Varianten der Luts genügen. Die könnte man so 
bestellen und bräuchte nicht mehr löten.

Alternativ kann man gleich einen FPGA nehmen.
Alternativ kann man auch gleich eine CPU kaufen.
Immerhin werden beim TE-Aufbau ja auch fertige Transisitoren benutzt, 
die nicht selbst gebaut werden.

von Nils (Gast)


Lesenswert?

Schönes Ding.

Mich würde mal interessieren wieviel Strom das Monster zieht, wenn es 
mit 1khz getaktet wird.

von Harald (Gast)


Lesenswert?

Nils schrieb:
> Mich würde mal interessieren wieviel Strom das Monster zieht, wenn es
> mit 1khz getaktet wird.

Immer diese Overclocker...

SCNR ;-)

von Johannes W. (klosskopf)


Lesenswert?

Nils schrieb:
> Schönes Ding.
>
> Mich würde mal interessieren wieviel Strom das Monster zieht, wenn es
> mit 1khz getaktet wird.

Tatsächlich ist die Stromaufnahme ziemlich konstant bei 0,5A, egal bei 
welcher Frequenz. Die statischen Verluste der tausenden Pull-ups lassen 
sämtliche dynamischen Verluste absolut vernachlässigbar hinter sich.

War auch das erste, was ich ausprobiert hab

: Bearbeitet durch User
von Nase (Gast)


Lesenswert?

Bürovorsteher schrieb:
> Endlich mal etwas wirklich Beeindruckendes hier im Forum!
> Chapeau!

Volle Zustimmung!
Respekt! Gefällt mir! Das nenn ich Ausdauer!

von Pandur S. (jetztnicht)


Lesenswert?

Zwischen einer diodenlogik und einer Pipeline liegen Welten. zB 
Tristate. Damit geht die benoetigte Leistung auch runter.

Eine tolle Sache. Muesste dokumentiert werden. Am besten auf einer 
Webseite.

von MaWin (Gast)


Lesenswert?

Sehr schönes Projekt!

Ich würde mich über mehr Detailphotos freuen.

von GEKU (Gast)


Lesenswert?

Tolle Leistung,  viel Arbeit!

Interessant wären auch die Schaltpläne.

von Johannes W. (klosskopf)


Lesenswert?

GEKU schrieb:
> Tolle Leistung,  viel Arbeit!
>
> Interessant wären auch die Schaltpläne.

Die hab ich ein bisschen weiter oben hochgeladen. Sind allerdings nicht 
besonders Hilfreich/Schön.

von Mann o Mann (Gast)


Lesenswert?

PittyJ schrieb:
> Immerhin werden beim TE-Aufbau ja auch fertige Transisitoren benutzt,
> die nicht selbst gebaut werden.

Ja, und die Atome, die er verwendet, hat er auch nicht mit einer selbst
erzeugten Supernova hergestellt.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Klosskopf D. schrieb:
> Übersichtlich, schön oder gar hilfreich sind allerdings nicht die
> geeigneten Begriffe für die Schaltpläne

Och, hier sieht man desöfteren schlimmeres.
Gruppiert und aufgeräumt isser ja.
Was noch fehlt wäre das eine oder andere BUS Symbol mit man sieht wo das 
Signal hinwill.

von Alexander J. (alexander_j)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich baue mir gerade auch einen. Ich begnüge mich mit 4-Bit.

Ich bin allerdings noch nicht mal ansatzweise so weit.

Ich hänge mal ein paar Fotos der schon fertigen und funktionierenden 
Bauteile an.
Leider habe ich noch kein "Mainbord", da bisher nicht alle Teile fertig 
sind und ich noch nicht sicher bin, ob das finale Pinout bleibt.

Bisher habe ich viel fliegend verdrahtet und fehlende Komponenten 
simuliert mir ein Arduino Mega.

Um mir zwischendrin anzusehen, was der "Bus" so macht, habe ich eine 
Anzeige gebaut, die mit einem ATtiny84 die 4- Bitsignale ein Hexzahlen 
umwaldelt und Steuerbits anzeigen kann.

von Name: (Gast)


Lesenswert?

Klosskopf D. schrieb:
> Leider hab ich nicht darauf geachtet, dass die Ladungen aus der Basis
> auch wieder abfließen können,
> weshalb er nicht wirklich schnell ist. (vielleicht 1kHz)
>
> Auch ordentliche Logikpegel wurden eher nicht beachtet. Innerhalb der
> Module haben die meisten Gatter den gleichen Eingangs und
> Ausgangswiderstand.

Wenn du eine Version 2 planst, sag hier Bescheid.
Da können wir dir sicher in diesen Hardwaredetails helfen.
Den Logikteil hast du ja offensichtlich im Griff, wenn die Funktion 
gegeben ist.

Ich finde es toll, wenn jemand nicht nur Schwätzt, sondern sowas auch 
mal komplett durchzieht, kleine Fehler hin, kleine Fehler her. Außerdem 
ist das mal so richtig sauber aufgebaut. Respekt!

von MaWin (Gast)


Lesenswert?

Alexander J. schrieb:
> Ich hänge mal ein paar Fotos der schon fertigen und funktionierenden
> Bauteile an.

Sehr schön.
Elektrop0rno.
Bitte mehr :)

von Helmut H. (der_andere)


Lesenswert?

Respekt, super und sauber gemacht. Hätte ich nie so gut hin bekommen.

Hab' mal mit einem Siemens 4Bit Rechner gelernt, mit Lochkarten stanzen 
und dann den Stapel lesen lassen als Programmcode ;-)

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Angehängte Dateien:

Lesenswert?

MaWin schrieb:
> Sehr schön.
> Elektrop0rno.
> Bitte mehr :)

Natürlich hat Henry Westphal mit einer Gruppe Studenten auch hier wieder 
den Vogel abgeschossen.
Die Anzahl der Transistoren ist Fünstellig!

Es ist wieder was neues "pr0nöses" in der Pipeline, aber mehr darf ich 
nicht verraten ;)

von Sinus T. (micha_micha)


Lesenswert?

Leute, das ist ja Alles wirklich sehr schön, aber das hat doch 
Klosskopfs CPU nichts zu tun. Macht doch bitte seinen Thread nicht 
kaputt.

von Philipp Klaus K. (pkk)


Lesenswert?

foobar schrieb:
>>> Spielt grob in der Klasse der kleinsten MCUs (Attiny4 oder der 3-Cent
>>> Padauk-MCUs)
>>
>> Wahrscheinlich nicht mal ansatzweise. Ich kann mir nicht vorstellen,
>> dass die kommerziellen uC so ineffizient ihr Programm abarbeiten
>
> Oh, wunder dich nicht: die PIC-Architektur (die Padauk-MCUs sind
> PIC-Clones) ist uralt und wirklich auf minimalen Gatter-Count getrimmt -
> die hat 12-Bit-Instructions, braucht 4 Takte pro Befehl (8 bei Branches)
> und hat nen fixen 2-Level-Stack.  Die AVR sind allerdings moderner.

Die Padauk sind keine PIC-Clones.

Die Padauk haben 13- 14- 15- oder 16-Bit-Befehle. Sie führen alle 
Befehle in 1 oder 2 Zyklen aus.

Die Padauk haben einen Softwarestack, was sie zu einer deutlich 
angenehmeren Zielarchitektur für C macht.

von Michael W. (Gast)


Lesenswert?

Respekt! Super Leistung!

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.