Forum

Bitte oder Registrieren, um Beiträge und Themen zu erstellen.

Z80Ardu - Ein homebrew Computer mit Z80 und Atmega328

VorherigeSeite 3 von 5Nächste

Hallo zusammen,

der "Loader" für den Z80-Computer ists nun fertig. Es handelt sich dabei um einen Arduino Nano, der über 3 Latches (74HCT573) den Speicher des Z80 mit einer "Firmware" versorgt. Dabei werden nacheinander über Port D des Arduino das Highbyte einer Adresse auf das erste Latch, das Lowbyte auf das zweite Latch und ein Datenbyte, welches von einer SD-Karte gelesen wird, auf das 3. Latch gelegt. Danach werden die Latches durchgeschaltet und der Speicher der Z80-Karte empfängt seine Daten.

3 Lustige bunte LEDs zeigen dabei den Reset-Vorgang und die Schreib- und Lese-Zyklen an. 🙂

 

Next Step....

Auf dem Breadboard habe ich jetzt meine "Grafikkarte" aufgebaut. Standalone funktioniert sie bereits. Problematisch ist momentan noch das Zusammenspiel mit dem Rest des Computers.

Gruß,
Uni

 

Ich habe jetzt noch MC6850 Schnittstellebausteine besorgt, um dem Compi eine serielle Schnittstelle verpassen zu können. Dazu werde ich dann wieder eine eigene Platine bauen. So richtig mit RS232-Schnittstelle in 9-polig (braucht heute kein Mensch mehr).

Außerdem arbeite ich immer noch an der "Grafikkarte". Da Timing ist wieder mal (wie schon ganz oft in meinen Projekten) ein großes Problem.

Und was auch noch fehlt, ist eine Steuerung für Ein-/Ausgabegeräte. Dazu wird, vermutlich auf der Grundplatte, noch ein Demultiplexer seinen Platz finden, der über die Adressen A0-A2 bis zu 8 externe Geräte ansteuern kann. So zum Beispiel die serielle Karte, die ich oben erwähnte.

Auf die Ergebnisse werdet Ihr aber mal wieder ein wenig warten müssen. Meine Zeit ist mal wieder knapp. Außerdem hat es bei mir im Haus gebrannt (Schornsteinbrand), sodass ich nun leider noch ein paar weniger elektronische Baustellen habe.

Gruß
Uni

Ich habe mein Projekt ja inzwischen "modularisiert". Also die einzelnen Bestandteile auf eigene Platinen gelötet. Das Ergebnis war ja in den vorigen Beiträgen bereits zu sehen. Ich benutze für meine Aufbauen ja meist Streifenrasterplatinen. Den korrekten Aufbau da unterzubringen ist schon eine komplexe Arbeit. Schließlich sind schon bei der Z80-Karte ca 150-200 Lötpunkte zu setzen und ca. 75-100 Kabel unterzubringen.

Ich habe deshalb jetzt meine Prozessorkarte wieder mal bei Easyeda gezeichnet und fertige Platinen bestellt. Die sind jetzt unterwegs. Dauer aber sicher noch bis ca. Ende Januar, bis die eintreffen. Die Karte werde ich dann aufbauen und dann auch die anderen Bestandteile, wie die "Grafikkarte" und die serielle Schnittstelle auch zeichnen und über Easyeda bestellen.

Aktuell löte ich noch eine Z80-Karte für Messungen und Tests. Die wird dann vermutlich nur für Programmiertests genutzt werden. Nunja... Morgen vielleicht noch ein wenig basteln, wenn meine Frau keine anderen Pläne für mich hat...

Gruß
Uni

Hallo zusammen,

hier mal wieder ein kleines Update zu meinem "never ending" Computerprojekt. Heute sind meine Platinen aus Singapur eingetroffen. Da musste ich natürlich gleich mal anfangen, meinen Z80Ardu zusammenzubauen. Nach nur ca 60 Minuten war ich mit dem Löten fertig.

Leider sitzt der Quarzoszillator ein wenig schief, weil ich nicht bedacht hatte, dass der ISP-Programmierstecker des Atmegaetwas breiter ist. Auf der einen Seite ragt er ein wenig über dem Platinenrand hinaus und auf der anderen Seite drückt er gegen die Fassung vom Oszillator. Naja... Egal, da überlege ich mir noch eine Lösung. So ein Oszillator hat ja nur 4 Pins. Evtl eine kleine Huckepackplatine oder so.

Getestet habe ich mein Werk noch nicht. Das werde ich morgen angehen. Das wird mal wieder spannend denn man glaubt gar nicht, was man so alles für logische Fehler beim Planen einer solchen Schaltung (die eigentlich nicht allzu komplex ist) machen kann.

Natürlich habe ich diesem Beitrag wieder Bilder beigefügt 🙂

Achja... Der Atmega328 (Der Chip, der auch auf dem Arduino Nano sitzt) sitzt links unten auf der Platine. Das Programm wurde für den Nano geschrieben und mit Atmel Studio Kompiliert. Das Ergebnis, eine HEX-Datei, habe ich mit dem ISP-Programmer auf den Chip übertragen. Danke der ISP-Schnittstelle kann das Programm jederzeit austauschen. Der 328er hat auch noch Platz für weitere Programmteile. Und es sind auch noch 7 freie Pins verfügbar, die ich auch auf der Platine als kleine Steckleiste bereit gestellt habe..

Grüße
Uni

 

Hallo Leute,

heute ist die neue Version meiner Z80Ardu-Platine gekommen. Das ist jetzt die dritte Version der Platine.

Zu erkennen ist gemäß der Beschriftung der Atmega328, welcher dem Chip auf dem Arduino Nano entspricht (links unten). Da drüber drei Latches, die die Adresse und die Datenbytes für das SRAM zur Verfügung stellen. Rechts dann der Z80 zusammen mit etwas Steuerlogik.

Gruß
Uni

Für meine Platinen habe ich mir noch eine Bus-Platine gebastelt auf die man die Karte aufstecken kann. Die ist auch noch für weitere Karten vorgesehen. Da ist auch schon eine Stromversorgung mit verbaut (klassisch mit 7805 Spannungsregler), die dann die Karten alle mit Saft versorgt. Vorsorglich habe ich einen kleinen Kühlkörper am Spannungsregler angeschraubt, damit es dem Kleinen nicht ganz so warm wird. 1,5 Ampere sollte das Teil aber an Last vertragen können. Aktuell bin ich, wenn der 16550 und ein Taktgenerator für denselben, sowie die Prozessorkate angeschlossen sind, bei 250 mA. Da geht also noch was.

Der PC16550 ist übrigens ein UART für serielle Datenübertragung. Ich versuche den gerade zur Kommunikation zu überreden Dodgy

Demnächst mehr aus diesem Theater...

Gruß
Uni

 

Hallo zusammen,

kurzes Update zum aktuellen Geschehen... Mein Plan war es ja, eine serielle Schnittstelle an meinen Z80Ardu anzuschließen. Dazu hatte ich einen PC16550 UART auf mein Breadboard gepackt und diesen mit dem Z80Ardu verdrahtet. Zunächst tat sich da überhaupt nichts. Im Terminalprogramm keinerlei Regung. Es hat eine ganze Weile gedauert, bis ich heraus gefunden hatte, dass der Oszillator (18,432 MHz), mit dem ich den Takt für den UART erzeugte, kein ordentliches Signal lieferte. Daraufhin habe ich den Oszillator um einige Treiberstufen erweitert, um das Signal entsprechend zu verbessern. Hat leider nix gebracht.

Mein nächster Versuch war ein 1,8432 MHz Quarz (Also nur noch ein Zehntel vom ursprünglichen Oszillator), den ich mit einer Pierce-Schaltung zum Schwingen gebracht habe. Der Takt war daraufhin stabil und ich hatte ein sauberes Rechtecksignal. Also Testprogramm umgeschrieben und erneute Versuche --> Tja... Tatsächlich kam jetzt auch etwas im Terminalprogramm an.... Allerdings nur Schrott. Ich weiß nicht, wie oft ich mein Programm überprüft habe.

Ich hatte dann den Verdacht, dass mein Z80Ardu vielleicht nicht ordentlich funktioniert. Also Logic-Analyzer ausgepackt und ewig Signale überprüft. Sah aber alles gut aus.

Tja... Am Ende war ich natürlich leicht genervt. Kann doch nicht so schwer sein!! Jetzt habe ich einen neuen Verdacht: Ich benutze einen UART nach USB-Konverter (aus China). Vielleicht verursacht der das Problem. Leider habe ich keine andere Möglichkeit zu testen, ob das Teil spinnt. Also muss eine neue Idee her. Und die Idee ist ziemlich nahe liegend. Ich nehme einfach einen Arduino und füttere ihn an einem Port mit den 8 Bit aus meinem Z80Ardu (also die Daten, die eigentlich über die serielle Schnittstelle raus sollten). Den Arduino verbinde ich mit meinem PC und gebe die 8 Bit einfach über die serielle Schnittstelle aus.

Heute wird das sicher nix mehr, aber wenn meine Frau mich lässt ( Big Grin ), dann kann ich das morgen mal umsetzen.

Gruß
Uni

Hallo zusammen,

ich hab meinen Plan noch einmal grob überschlagen und ein paar Fakten geprüft. Mit einem Atmega328 (also einem Arduino Nano) geht der Plan nicht auf. Zumindest nicht ohne größeren Programmieraufwand. Das liegt daran, dass lediglich EIN kompletter Port vorhanden ist (Port D). Den würde man idealerweise komplett nutzen um 8 Bit Daten direkt über die Eingänge PD0 - PD7 zu empfangen. Das geht aber nur solange, bis man auf die Idee kommt, den seriellen Port (UART) des Bausteins zu nutzen. Dieser liegt nämlich ebenfalls auf Port D und nimmt einem somit zwei Pins (RXD und TXD) weg.

Es ist dadurch also nötig, 8 Bit Daten in zweimal 4 Bit zu teilen und diese auf zwei halbe Ports zu legen. Das ist natürlich möglich, jedoch ist der Programmieraufwand dafür entsprechend größen und es macht das Programm langsamer.

Wenn ich das Ganze dennoch mit dem Atmega 328 umsetze, dann in Maschinensprache, da die Arduino IDE zu viel Overhead erzeugt und das Programm dadurch langsam wird. DA muss ich mir aber erstmal wieder meine Unterlagen herauskramen.... Ich habe schon eine Weile kein Assembler auf den Atmel Chips benutzt, weil ich mich doch recht starkt mit dem Z80 beschäftigt habe. Big Grin Vielleicht hilft mir ja dieser Beitrag: https://micro-dev.de/showthread.php?tid=317

Gruß
Uni

Moin!

Ich habe heute noch einmal ein wenig herum probiert und es dann tatsächlich geschafft 16 Zeichen seriell zu übertragen. Danach kam immer nur Salat im Terminalprogramm an.

Ich hab 1000 mal mein Programm überprüft. Auch alle Signale noch einmal mit dem Oszilloskop geprüft. Nix! Alles ok!

Also noch einmal das Datenblatt vom Pc16550 gelesen und dabei nicht schlauer geworden.

Ich wollte eben schon aufgeben, als ich die Idee hatte, mal die Taktfrequenz vom Z80Ardu von 3.57 MHz auf wenige KHz herunter zu schrauben. Und siehe da, es funktioniert. Bild vom Ergebnis hängt an.

Jetzt muss ich entweder mein Programm entsprechend anpassen, damit sich der PC16550 nicht verschluckt oder ich muss einen anderen Baustein benutzen.

Gruß
Uni

 

VorherigeSeite 3 von 5Nächste