Forum

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

Z80Ardu - Ein homebrew Computer mit Z80 und Atmega328

VorherigeSeite 5 von 5

Hallo zusammen,

auch die Platine des eigentlichen Z80Ardu hatte ich noch einmal neu erstellt. Ich hatte noch ein paar kleinere Designänderungen vorgenommen. Nur an der Platine selbst, nicht an der Schaltung.

Ich hatte das Resetsignal nicht nach außen geführt. Das ist jedoch ungünstig, da dieses Signal auch für andere Bausteine wichtig sein kann. Der UART zum Beispiel. Der benötigt zur Initialisierung das Resetsignal des Z80. Das habe ich jetzt nachgeholt. Zwar muss man jetzt mit einem kleinen Kabel arbeiten, das halte ich aber für vertretbar. Auf der Pin-Leiste ist nämlich leider kein Platz mehr (40 Pins belegt).

Ansonsten ist die Anordnung der Teile leicht verändert.

Beim Aufbau habe ich wieder IC Sockel benutzt. Praktisch, falls mal wieder etwas abraucht. Lediglich die Latches (74HCT573) haben keine. Und das liegt schlicht daran, dass ich keine mehr hatte.

Die Platine ist bereits fertig aufgebaut, jedoch noch nicht getestet.

Bildchen siehe unten.

Gruß,
Uni

 

Ächz...

Ich bin genervt. Gestern den Z80Ardu neu aufgebaut und er funktioniert nicht. Prozessor wird warm, Strom geht über 500 mA. Da stimmt etwas nicht. Habe die Platine komplett durchgemessen. Alle Verbindungen stimmen soweit. Jetzt geht es an die Logik. Ich vermute ein defektes Gatter (7404, 7432 oder 7408). Die sind für die Speicherlogik und den Resetvorgang verantwortlich.

Wenn zum Beispiel der Resetvorgang nicht funktioniert, bleibt der Z80 im Tristate-Modus, also quasi abgeschaltet. Erste Messungen in der Schaltung lassen eine solche Vermutung zu.... Ich habe neue Gatter bestellt... zur Sicherheit. Die verbauten Gatter werde ich wohl mal außerhalb der Schaltung testen, einbauen werde ich sie aber nicht mehr (wie gut, dass ich dieses mal IC-Sockel verwendet habe Big Grin ).

Tja... und dann wäre da noch die Grafikkarte. Die habe ich auch schon aufgelötet und sie funktioniert ebenfalls nicht. Ich bin den Schaltplan noch einmal durchgegangen und habe alle soweit geprüft. Da scheint es eine Verbindung zu Masse zu geben wo keine hingehört. Ich liebe es, wenn ein Plan funktioniert... Dodgy Ich habe die Stelle allerdings schon gefunden und hoffe das Problemchen mit einem kurzen Kabel und einer durchtrennten Leiterbahn in den Griff zu bekommen.

Wie Ihr seht, alles läuft super! Rolleyes

Grüße
Uni

Hallo zusammen,

ganz kurzes Update. Die Z80Ardu-Platine funktioniert wieder. Was ist schief gelaufen? Ich hatte neue Platinen bestellt, da ich die Bauteilanordnung ein wenig optimiert hatte und einen kleinen Designfehler beseitigt hatte. Dabei ist offensichtlich bei der Erstellung der Platine der Anschluss für die SD-Karte verdreht worden. Ich habe keine Ahnung, wie das passieren konnte, aber dadurch waren alle Anschlüsse logischerweise spiegelverkehrt. Durch gründliches Messen ist mir das letztendlich aufgefallen.

Also einfach den SD-Slot rumgedreht und schon geht's...

Was die Grafikkarte anbelangt: Weiterhin schwingt der Oszillator nicht. Das werde ich heute Nachmittag noch einmal zu beheben versuchen. Ich glaube, dass da etwas mit den Kerkos am Quarz nicht stimmt... Ich muss da wohl den Schaltplan noch einmal genauer prüfen. Dazu hatte ich bislang leider keine Zeit.

Inzwischen habe ich noch eine kleine Idee entwickelt: Ich könnte als Grafikprozessor auch einen TMS9918A einsetzen (der steckte beispielsweise im TI99/4A). Davon habe ich noch 2 rumliegen. Eine kleine Einschränkung ist, dass dieser Chip nur mit DRAM arbeitet. Das beudetet mehr Bauteile und ein anderes Speicherkonzept. Jetzt habe ich allerdings beim surfen eine Schaltung mit Flip-Flops gefunden, die den Anschluss von SRAM ermöglicht. Ich werde sie mal auf einem Breadboard aufbauen und prüfen, ob das eine Alternative ist. Der VDP TMS9918A ist nämlich um einiges leistungsfähiger als der MC6847.

Ja und dann wäre da noch das Speichermedium, welches uns das speichern von Daten erlauben soll. Ich habe ein CF-to-IDE Modul bestellt. Zusammen mit ein paar Flip-Flops und etwas Logik lässt sich das Teil am Z80 anschließen. Da muss ich dann "nur noch eben" das IDE-Protokoll implementieren.. Wink

Achja... ich bekomme es aktuell nicht hin, eine AT-Tastatur auszulesen um das Thema "Eingabemöglichkeit" zu verwirklichen... Blöd!

Gruß
Uni

Und noch ein kurzes Update:

Die Grafikkarte ist Schrott. Ich habe die Schaltung erneut überarbeitet und nochmals geprüft und dann neue Platinen bestellt (So langsam geht's echt ins Geld. Aber das kommt davon, wenn man zu schnell zu viel will!)

Das Ding mit dem TMS9918A-Grafikchip nehme ich mir mal für später vor. Ich bin ja schon froh, wenn ich eine stabile Anzeige mit der von mir aktuell entworfenen Karte hin bekomme. Da ich sowieso bislang keine "Grafikroutinen" implementiert habe, ist das auch egal. Ich könnte sogar Versuche mit dem TMS9918 machen, während die MC6847-Karte arbeitet. Die kommen sich nicht in die Quere. Die Teile für die TMS9918-Geschichte hätte ich jedenfalls da.

---

Ein Schnäppchen in der Bay hat mich veranlasst, zwei Z80-Prozessoren mit 10 MHz Taktfrequenz zu kaufen. Damit können wir den Z80Ardu um den Faktor 2,5 beschleunigen. Die passenden Oszillatoren sind auch schon unterwegs. Ob das zusammen mit den anderen Bauteilen klappt, wird sich rausstellen. Big Grin

---

Tja... Und dann habe ich im Netz noch ein HEX-Monitorprogramm gefunden, welches den Speicherinhalt anzeigen kann. Es macht die Ausgabe über die serielle Schnittstelle. Würde also prinzipiell funktionieren.... auch OHNE Grafikkarte! Das Programm ist von Max Francis. Ich passe es gerade auf meine Z80Ardu-Hardware an. Als Testprogramm würde es sich sicher bezahlt machen. Die Ausgabe später auf die Grafikkarte umzuleiten, erscheint mir nicht sehr schwer.

---

Und die letzte Sache in diesem Beitrag: Ich hatte im vorigen Beitrag von der IDE-Schnittstelle gesprochen. Den Schaltplan, angepasst auf die Z80Ardu-Hardware, habe ich inzwischen fertig. An der Schaltung lässt sich per IDE-Kabel eine Festplatte oder die oben genannte CF-Card anschließen. Ich muss die Schaltung noch kontrollieren und vielleicht sollte ich sie auch mal auf dem Breadboard aufbauen, aber wenn ich soweit sicher bin, werde ich auch dafür Platinen erstellen (lassen) und dann (schnell wie der Blitz) mal eben die passenden Programme schreiben (Ähm... Ich werde versuchen, ein bestehendes Programm anzupassen).

Schaltpläne, Bilder und Programme folgen...

Gruß
Uni

Hallo zusammen,

nach stundenlangem Signal-Debugging und Austausch diverser Gatter wegen einiger Timingprobleme, sowie einer gründlichen Reinigung der Lötseite der Platine von irgendwelchen Lötlackresten, funktioniert der Rechner nun wieder. Der Z80Ardu tut, was er soll. Jetzt gibt es noch ein kleines Timingproblem mit der Graka. Dort werde ich auch noch eine Reinigung vornehmen und ein wenig mit den verbauten Gattern spielen. Aktuell funktioniert das Latch zur Steuerung der Grafikmodi und der aktiven Speicherseite für das Video-Ram noch nicht optimal..

Aber erste Erfolge sind da, siehe Bild

Gruß
Uni

 

Ja Leute...

wenn man viel Zeit investiert um den Fehler zu finden, dann findet man ihn evtl. sogar. 🙂

Zum Einen gab es ein paar Signalprobleme. Ich musste der Grafikkarte ein paar zusätzliche Pulldown-Widerstände verpassen um die Steuersignale für die Grafikmodi und die Speicherseiten zu stabilisieren. Da habe ich momentan einfach so gelöst, indem ich die Pulldowns auf die Rückseite der Platine gelötet habe. Nicht schön, funktioniert aber Big Grin

Danach hatte ich immer noch das Problem, dass die Einheit zwar anlief, aber dann scheinbar nix mehr tat. Ich habe sicher zwei Stunden lang mit dem Oszilloskop versucht herauszufinden, wo denn da das Problem liegt... Und dann kam ich auf den Trichter, dass ja auch mein Programm einen Fehler haben könnte. Zwar hat das Programm zu einem frühen Zeitpunkt mal funktionier, jedoch hatte ich es inzwischen "optimiert". Unter Anderem hatte ich den Stackpointer auf eine Adresse im Videoram gesetzt. Tja... und genau da lag der Fehler. Ich weiß allerdings noch nicht, warum das so ist. Ich habe die Zeile aus meinem Programm gelöscht und siehe da: Es läuft!!

Sowohl der Z80Ardu als auch die Grafikkarte funktionieren, wie das beigefügte Video zeigt Big Grin

Grüße vom glücklichen Uni

Z80Ardu und MC6847 Grafikkarte funktionieren!

 

Nächste Stufe...

Ich habe mich in den letzten Tagen wieder etwas intensiver mit meinem Projekt beschäftigen können. Ein paar kleinere Unzulänglichkeiten auf der Grafikkarte konnten mit einfachen Mitteln behoben werden. Ich fand gestern auf meiner Grafikkarte noch einen Pin, der leider nicht mit dem Datenbus verbunden war. Der hing frei in der Luft. Das führte zu flackern und unkontrolliertem Umschalten zwischen externem und internem Zeichensatz. Da aber die Möglichkeit, einen externen Zeichensatz zu nutzen momentan nicht umgesetzt ist, fehlt zum Glück nichts bei den implementierten Funktionen. Es war aufgrund des unklaren Signals lediglich Salat auf dem Schirm zu sehen. Ich habe den Pin jetzt einfach an Masse angeschlossen. Jetzt gibt es ein klares Signal und alles ist gut! Die Änderungen am Design sind auch schon im Schaltplan umgesetzt. Bei Gelegenheit werde ich noch einmal neue Platinen bestellen. Momentan ist das aber nicht nötig.

Jetzt, wo Grafikkarte und Z80Ardu endlich so funktionieren, wie es sein soll, muss die nächste Stufe in Angriff genommen werden. Es gibt ja noch 3 bis 4 weitere Komponenten, die ich gerne integrieren möchte:

  • Tastatur
  • Datenspeicher ("Festplatte")
  • Serielle Schnittstelle mit WLAN (ESP8266)
  • Soundkarte

Ich denke, es macht Sinn, zunächst das Thema "Tastatur" in Angriff zu nehmen. Damit wäre schon mal Kommunikation mit dem Menschen möglich :-). Die Tastaturschnittstelle werde ich mit einem ATTiny 2313 von Atmel verwirklichen. Ein passendes Programm habe ich schon entworfen. Es ist auf eine PS/2-Tastatur zugeschnitten, ließt den Scancode einer gedrückten Taste und übersetzt diesen in einen ASCII-Code. Der Plan ist, den Code auf Port B des ATTiny auszugeben und das Ergebnis mit einem Latch (74HCT573), einem Tranceiver (74HCT245) oder einem Buffer Line Driver (74HCT244) auf den Datenbus zu legen, wenn der Prozessor diesen Abfragt. Der Z80 muss sich natürlich um die Abfrage der Tastatur kümmern und die Bildschirmausgabe steuern... Aber erstmal Hardware entwickeln... 🙂

Gruß
Uni

Und weiter im Text!

Ich habe leider keine AtTiny 2313 mehr vorrätig... Aber bestellt sind sie schon. Der Test der Tastaturschnittstelle muss somit ein wenig warten. Die Microcontroller werden wohl am Dienstag eintreffen. Ich habe da einen sehr zuverlässigen Händler aus Deutschland in der Bay. Der ist immer sehr flott und meistens auch nicht teuer.

Tja... Natürlich könnte ich jetzt damit beginnen, den "Festplattencontroller" zu bauen, jedoch will ich jetzt nicht wieder alle Module gleichzeitig beginnen. Das hat schon beim Z80Ardu und der Grafikkarte nicht funktioniert. Also warte ich damit noch ein wenig. Die Idee zum IDE-Controller entstammt im Übrigen dieser Seite: http://www.vaxman.de/projects/tiny_z80/

Was mache ich also alternativ? Ich werde mich um die Portierung des BASIC-Interpreters des VZ200/Laser 210-Computers, zu dem ich ein ROM-Listing vorliegen habe, kümmern. Einen relativ großen Teil des Listings habe ich bereits abgetippt (Ich schreibe es aus einem Buch ab, da ich keine Quelle im Internet gefunden habe, die ein fertiges Assembler-Listing anbietet). Ich werde da also heute mal weitermachen. Der BASIC-Interpreter des VZ200 ist im Übrigen in weiten Teilen mit dem des TRS-80 identisch. Ursprünglich wurde der Interpreter übrigens von Microsoft bzw. von Bill Gates für den Altair 8800 entwickelt. Das Programm hieß Altair BASIC. Der Altair 8800 hatte einen 8080-Prozessor. Der Z80 ist binär- bzw. abwärtskompatibel zum 8080. Daher laufen die Programme für den 8080 auch auf dem Z80.

Da der Z80Ardu ja einen Z80-Prozessor hat, und die Grafik, wie beim VZ200 über einen MC6847 ausgegeben wird, läuft der BASIC Interpreter prinzipiell auch auf dem Z80Ardu. Einige Veränderungen müssen dennoch vorgenommen werden, da der Hardwareaufbau des Z80Ardu ein wenig anders ist. Folgende Unterschiede sind vorhanden:

Z80 Ardu VZ200
8 oder 10 MHz 3,58 MHz
56 KB Speicher verfügbar 1,2 - 32 KB verfügbar
Tastaturabfrage per MC Direkte Adressierung der Tastaturmatrix
Grafikeinheit extern, also austauschbar Grafikeinheit fest verbaut
8 Grafikmodi 2 Grafikmodi
4 x 8192 Bytes Grafikspeicher 2048 Bytes Grafikspeicher
Steuerung der Peripherie über I/O-Ports Memory-mapped I/O
Datenaustausch per IDE-Schnittstelle (wenn fertig entwickelt) Datenaustausch per Tape
Sound per Soundblasterchip (wenn fertig entwickelt) Sound über Piezolautsprecher

Es gibt natürlich noch weitere Unterschiede im Design, die spielen aber für das "Betriebssystem" keine Rolle. Die oben genannten Unterschiede aber schon. Die Tastaturabfragen müssen anders gestaltet werden. Die Grafikroutinen müssen die erweiterten Möglichkeiten berücksichtigen. Außerdem ist die Interruptsteuerung auch minimal erweitert (beim VZ200 gibt es keinen Non Maskable Interrupt [NMI], beim Z80Ardu schon).

Zum besseren Verständnis der Ausgangsbasis für mein Projekt, hängt an diesem Thread noch ein Bildchen mit dem Schaltplan des VZ200 mit ein paar Kommentaren drauf

Gruß
Uni

 

Hallo liebe Gemeinde,

inzwischen sind meine ATTiny 2313 eingetroffen. Ein wunderbarer, kleiner Microcontroller mit 2 KB Flash-Speicher und 128 Bytes SRAM (wie süß!!). Mit 10 MHz kommt der auch klar. Also klein aber fein!

Ich hatte für den ATTiny 2313 bereits ein passendes kleines Programm in Assembler. Ist gerade mal 300 Byte groß oder so. Das habe ich am Wochenende mal ein wenig angepasst und dann die dazu passende Schaltung aufgebaut (ATTiny, 2 Widerstände 100 KOhm als Pullup, AT-Tastatur bzw PS/2-Tastatur). Also nix wildes. Mit meinem Oszi habe ich dann geprüft, ob Signale IN den ATTiny gehen und ob welche RAUS kommen. Das hat soweit funktioniert. Ob die Signale allerdings verwertbar sind, wusste ich da noch nicht.

Nächster Schritt war, die Ausgangssignale mit dem Z80Ardu zu verbinden. Also 8 Bit Scancode auf den Datenbus des Z80. Dabei habe ich zunächst den IO-Request vom Z80 als Chipselect-Signal für den ATTiny genutzt. Außerdem habe ich ein kleines Z80-Programm geschrieben, welches den passenden IO-Port abfragt und die Daten entgegennimmt. Das Ergebnis war: EINE KATASTOPHE  Rolleyes . Die Datensignale störten den Datenbus derart, dass der ganze Z80Ardu den roten Faden verlor und abstürzte. Nach genauerem Studium der Timing-Struktur des sogenannten IO-Requests des Z80 wurde mir klar, dass ich außerdem auch auf /RD (Read) des Z80 acht geben muss. Beide Signale, also IO-Request und /RD, müssen LOW sein. Dann ist der Datenbus bereit, die Daten entgegen zu nehmen.

Also: einen weiteren Pin des ATTiny als /RD definiert und eine entsprechende Abfrage in das Tastatur-Programm des Tiny eingebaut. Gestern Abend habe ich das noch kurz getestet, es hat aber nicht funktioniert. Der Z80Ardu stürzt zwar nicht ab, die Abfrage funktioniert aber auch nicht. Mir ist dann gestern am späten Abend noch ein kleiner Fehler in meinem Z80-Programm aufgefallen, der aber durchaus eklatant ist. Das Programm soll Daten des ATTiny entgegen nehmen und das entgegen genommene Byte auf dem Schirm ausgeben. Eine fehlerhafte Abfrage führte dabei unter Umständen dazu, dass der Speicher überschrieben wurde. Den Fehler habe ich schon behoben, jedoch noch nicht wieder getestet.

Wenn ich das mit dem ATTiny einigermaßen stabil hin bekomme, werde ich den Tiny mit in das Platinendesign des Z80Ardu einbauen. So spare ich einen IO-Pin und einen kompletten Steckplatz. Den Tiny würde ich dann natürlich sockeln, damit ich ihn zwecks Programmumgestaltung ggf. rausnehmen kann um ihn zu programmieren.

Soviel erstmal zum Zwischenstand.

Grüße
Uni

Hallo zusammen,

an dieser Stelle möchte ich diesen Thread in einzelne Projekte auftrennen. Man kann diesem Thread ja entnehmen, dass es neben dem reinen Rechner weitere Entwicklungen gab/gibt, bei denen Dinge, wie Grafikkarte, IDE-Schnittstelle, serielle Schnittstelle usw. im Mittelpunkt stehen. In dem Forum, in dem ich diese Dinge beschrieben habe (https://www.micro-dev.de) war alles in einem einzigen Thread zusammengefasst. Jetzt aber nutze ich die Gelegenheit, diese Dinge zu trennen.

Zu jedem der Entwicklungen wird es hier im Forum einen eigenen Thread geben.

Was den Z80Ardu angeht, gibt es zwei weitere Evolutionsstufen. Beide funktionieren. Die erste Version war noch auf einer kleineren Platine untergebracht. Dort wurde jedoch schon der Start von einem seriellen EEProm verwirklicht. Außerdem befindet sich die Tastaturschnittstelle bereits auf der Platine. Die Tastaturschnittstelle wurde mit einem Atmege328 verwirklicht. Im vorigen Eintrag hier im Forum war noch von einem ATTiny 2313 die Rede. Ich bin hier tatsächlich den Weg geringeren Widerstands gegangen, weil es für den Atmega328 (Arduino Nano) bereits fertige Bibliotheken zur Verwendung von PS/2-Tastaturen gibt.

Tastaturanschläge werden vom Atmega entgegen genommen und ausgewertet. Danach wird am Z80 ein NMI Interrupt ausgelöst und die bereit gestellten Daten entgegen genommen. Im Z80Ardu wird dann mit den empfangenen Daten weiter verfahren. Diese Vorgehensweise setzt natürlih voraus, dass der Z80 ordnungsgemäß auf den NMI reagiert (was ich in meinen Programmen bereits berücksichtige).

Die zweite Evolutionsstufe betrifft das Platinenformat und die IO-Ports. Die neue Platine des Z80Ardu ist breiter um sie an die neue Grundplatine anzupassen. Außerdem werden 7 weitere Ports zur Ansteuerung weiterer Hardware bereitgestellt. Zuvor hatte der Z80Ardu 6 Ports, jetzt sind es 13.

Ich habe die Grundplatine (das ist die Platine, in die die einzelnen Module eingesteck werden) auch entsprechend erweitert um die neuen IO-Ports nutzen zu können. Außerdem werden dort jetzt auch die fehlenden Prozessorsignale bereitgestellt.

Zu den bestehenden Modulen ist diese Grundplatine kompatibel.  Es gibt jetzt mehrere Spannungsregler. So wird die Last ein wenig verteilt und nicht mehr komplett von einem Linearregler getragen.

Hier ist die neue Grundplatine:

Und hier sind die beiden Evolutionsstufen des Z80Ardu:

 

Gruß

Uni

 

VorherigeSeite 5 von 5