74HC166 sagt Google
Das Datenblatt muss ich mir mal in Ruhe geben. Ich brauche einen Chip der mitließt und auf Zuruf den Datenstrom ausgibt
74HC166 sagt Google
Das Datenblatt muss ich mir mal in Ruhe geben. Ich brauche einen Chip der mitließt und auf Zuruf den Datenstrom ausgibt
Nach meiner Erfahrung ist sowas nur auf dem Papier schön, aber echt nicht ganz so einfach. Wenn man 8 bit über einen Schieberegister über eine wirklich kurze Zeitspanne lesen möchte, merkt man ziemlich schnell, dass es mit dem Arduino schwierig wird. Natürlich ist nichts unmöglich, aber man muss unbedingt vorher berechnen, ob das so überhaupt klappt und ggf. etwas anpassen.
Ah Sorry, würde HCT oder LS nehmen.
Der 80186 lässt sich entsprechend im Takt runterstellen, so wie i440bx das vorgesehen hat.
Bei Einzelschritten lässt sich dann schon abhören oder paar Hz.
Nach meiner Erfahrung ist sowas nur auf dem Papier schön, aber echt nicht ganz so einfach. Wenn man 8 bit über einen Schieberegister über eine wirklich kurze Zeitspanne lesen möchte, merkt man ziemlich schnell, dass es mit dem Arduino schwierig wird. Natürlich ist nichts unmöglich, aber man muss unbedingt vorher berechnen, ob das so überhaupt klappt und ggf. etwas anpassen.
Du hast zu 100% Recht. Dazu aber 3 Möglichkeiten:
1) CPU runtertakten (siehe Kommentar vom Admin). Ich kann bis auf 300khz runter gehen - fraglich ist dann aber, ob der 186 das mitmacht. Laut Datenblatt gibt's ne mindestfrequenz die an CLK anliegen muss.
Wären es zum Beispiel 1mhz, dann ballert der 186 aber nur mit rund 250khz neue Adressen, denn die meisten Befehle brauchen 4 oder mehr Zyklen
2) Das HALT Signal nutzen. Genauer Ablauf ist mir noch unbekannt, aber die CPU macht das was sie macht zu Ende und geht dann schlafen. Sprich die letzte Adresse ist im Rückwärtsregister gespeichert und kann abgefragt werden
3) mit max Mega-frequenz einen Interrupt rausballern, dessen Vektor auf ne 1000 Schritte NOP-prozedur gelegt ist. Dann kann der mega auch in aller Ruhe die letzte Adresse auslesen
zu 2) HOLD ist der Pin. Wenn also ein anderer Busmaster den Bus beansprucht
Hatte der nicht eine Instruktion um ihn Einzelschritte ausführen zu lassen ?
Müsste mich jetzt selbst einlesen..
Hat er. Der Singlestep ist aber Programmcode; ich brauche den mega aber vorab für 2 Dinge:
SRAM füllen
Füllung prüfen
Ich muss also die Daten schreiben und die CPU rechnen lassen. Während des rechnens muss ich mithorchen ob die CPU das tut was ich sage.
Tut sie es nicht muss ich hard- oder Software debuggen.
Wenn die Hardware und Software debuggt ist funktioniert der Singlestep zuverlässig - dann brauche ich den Mega aber nur noch zum Software ins SRAM schreiben
Der 8255 hat 3 Ports. Siehe Anhang.
Der 8255 hat 3 Ports. Siehe Anhang.
Oh. Das habe ich doch glatt übersehen... Macht den Chip wieder interessant für die Aufgabe.
Hab zufällig 3 oder 4 davon
Weiß nicht, ob das für irgendeinen Zweck interessant sein könnte, aber trotzdem als eine Option, man kann mit EPROM auch Adressen dekodieren.
Der 8255 hat 3 Ports. Siehe Anhang.
Oh. Das habe ich doch glatt übersehen... Macht den Chip wieder interessant für die Aufgabe.
Hab zufällig 3 oder 4 davon
Ist aber doof zu programmieren, mit Sicherheit komplexer als die Schieberegister abzulauschen oder zu befüllen.
Weiß nicht, ob das für irgendeinen Zweck interessant sein könnte, aber trotzdem als eine Option, man kann mit EPROM auch Adressen dekodieren.
Da hab ich auch schon dran gedacht.
Ich brauche also ein EPROM was 24 Adress und 8 datenpins hat
Problem ist dann aber, dass die 8 Bit n-mal in die 24bit passen; ich also alle n-adressen immer die gleiche 8bit Folge als Ausgabe habe.
Ich muss aber alle 24bit Möglichkeiten einzeln erkennen, darf mir also keine dublikate erlauben
Es macht vielleicht etwas mehr Arbeit beim Programmieren aber die Daten parallel abzugreifen ist deutlich schneller. Mit ein paar einfachen ASM Routinen ist das erledigt.
Für mich zum zwischenspeichern:
CPU-Karte:
ext-clk pin einbauen, clock-gen deaktivierbar machen
HOLD button einbauen
ALE auf den Bus legen
ardunino-karte:
8255 weiter verfolgen (Mode 0, Controlword 15)
PCS- und MCS-Signale ebenfalls Shift-Registern
ALE abfragen
2. Stück 8-zu-3 dekoder für MCS/PCS
Problem am 74*166 ist, dass ich 3x8Bit nur via Takt auslesen kann - sprich ich muss 24 high-low Signale am Ardunio-PinX generieren um auf PinY die seriellen Daten zu empfangen. Diese müssen in der Software dann noch umgerechnet werden.
Es macht vielleicht etwas mehr Arbeit beim Programmieren aber die Daten parallel abzugreifen ist deutlich schneller. Mit ein paar einfachen ASM Routinen ist das erledigt.
Das ist genau auch mein Gedanke gewesen, deswegen würde ich den 8255 als primäres Ziel nehmen. Ich brauche zwar noch ein paar mehr PINs am Mega, aber die hab ich schon gefunden.
Der 8255 kann im schlechtesten Fall mit 5MHZ (max 200ns) lesen. Das sollte ausreichen um zu Beginn zu debuggen
Es gibt auch noch die 8MHz variante 82c55.
Nachteil ist der geringere Strom je Pin.
Aktueller Stand bei der CPU und der Speicherkarte.
Die Arduinokarte baue ich gerade um:
Mehr Shiftregister für unwichtige Signale und dann ein 8255
Ich hatte heute ein sehr schönes und informatives Telefonat bezüglich der Arduinokarte.
Dabei kam auf, dass es wohl immernoch am Verständis des Aufbau des Computers hapert.
Dazu habe ich Posting 3 mal aktualisiert - bitte lesen (ja, es sind 40 Zeilen, ist schwer, ich weiß) und verstehen *oder* nachfragen.
Bäms! Arduinokarte 1 ist neu angefertigt
Durch die Informationen die ich erhalten habe, habe ich die komplette Karte nochmal überdacht. Dieses Ding ist nun kein Bus-sniffer mehr, sondern ein reines Datenschreibe- und Leseding
Durch den Tip von matze79 mit den Seriell-to-Parallel-Shiftern (SIPO und PISO) habe ich den Mega2560 durch einen Nano ersetzten können. Um später auch die Rudimäntärsten Dinge zu prüfen habe ich folgende Zusatzfunktionen eingebaut:
- CPU-Card detektor: Die CPU Karte legt einen Pin vom 186-ISA Bus auf High, sodass der Arduino erkennt, ob er der einzige Busmaster ist oder nicht
- Für den Fall, dass die CPU mit auf der Backplane ist, kann der Arduino ein HOLD schicken und die CPU zum Stillschweigen bringen
- Der Fall, dass die CPU-Karte gesteckt, aber keine CPU im Sockel ist, wird auch erkannt (Arduino ist der einzige Busmaster). Das brauche ich für folgenden Fall:
- Um den NMI-Generator auf der BIOS Karte zu testen, hab ich die CPU-Karte insofern erweitert, dass der Arduino ein 1HZ (oder ähnlich langsames) Signal auf den Bus geben kann. Dann kann ich das LED-Blinken zählen und gucken, ob der NMI-Generator auf der BIOS-Karte wie vorgesehen funktioniert.
- Zu guter letzt habe ich mir noch die READ und WRITE Signale auf ne LED gelegt, damit ich sehe, wenn der Arduino (schön langsam!) in den Speicher schreibt oder von ihm ließt
Schonwieder mehr als ein Jahr vergangen...
Kam diveres dazwischen, unter anderem eine geänderte Politik von Autodesk im Umgang mit freien- bzw. Studentenlizenzen. Und dem Sprung von KiCad auf Version 6 bzw. vor kurzem Version 7.
Auch mein AG hat sich im letzten Jahr entschieden von EAGLE auf KiCad zu wechseln und ich musste mich mit KiCad beschäften. Der 80186 Selbstbau sieht jetzt so aus:
Wenn man sich die vorherigen Boards anschaut erkennt man eine deutliche entschlankung des PCB. Ich habe mich entschieden bei den Treibern/Latchen SOIC-20 ein zu setzen, was das routing massiv vereinfacht hat. Im letzten EAGLE Versuch war ich bei einem 6 Layer-PCB angekommen weil es unmöglich war 9 THT Chips auf 2 Layer mehrfach miteinander zu verbinden.
Auch habe ich den Bus/ISA Pinout nochmal komplett über den Haufen geworfen; Diesmal ist das Pinout nicht "sortiert" (A0-A19 nebeneinander, D0-D8 nebeneinander, Steuersignale gruppiert, etc) sondern so angeklemmt wie es für das routing am einfachsten ist.
Dann habe ich mich dazu entschieden die sekundären Bausteine auf eine externe Platine zu packen. Das betrifft die RESET und die Taktgenerierung. Die beiden sind nun auf einem eigenen PCB und werden Huckepack angesteckt. Das vereinfacht das routing auf dem CPU-Board weil es nur 3 (4) Pins gibt die angeschlossen werden müssen. Außerdem kann ich diese notwenigen Dinger verändern/anpassen ohne direkt das Haupt-PCB neu zu gestalten.
---
Ein paar letzte Details fehlen noch (LEDs für die Spannungen, Beschriftung zum troubleshooten, Doku in KiCad, etc) aber so in etwa werden die ersten Platinen aussehen.
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!