Hallo zusammen,
ich habe mit einem Arduino eine Schaltung und ein C Programm
geschrieben, mit dem ich ein 2716 EPROM emulieren kann. Faktisch nehme
ich die Adresse binär auf dem Adressbus an und gebe die gewünschten
Daten auf dem Outputbus binär aus.
Bevor ich das ganze in der realen Umgebung teste noch eine Frage:
Wann genau ist der Zeitpunkt die Daten auf dem Adressbus auszulesen?
Meine Überlegungen dazu:
1. Sofort sobald sich ein Bit geändert hat
2. die Spannung stabil ist
Beides kommt mir aber spanisch vor. google bringt dazu nix, vielleicht
weil mir die richtigen, kurzen Begriffe fehlen.
Danke für Eure Hilfe
Andre
Andre schrieb:> Wann genau ist der Zeitpunkt die Daten auf dem Adressbus auszulesen?> Meine Überlegungen dazu:
Die Daten Timings stehen im Datenblatt eines EPROM 2716. Z.B. bei Output
valid after Chip select oder Output Enable nach Address Setup Time.
Hallo Wilhelm,
so ganz habe ich es noch nicht verstanden. Wenn ich dieses Datenblatt
nehme und auf Seite 5 die Wellenform anschaue, dann könnte ich doch
anfangen zu lesen sobald EP auf 0 geht. Dann wechselt EP wieder auf 1
und beim erneuten Wechsel lese ich wieder. Richtig oder falsch?
http://www.futurlec.com/Memory/2716_Datasheet.shtml
Vermutlich eine absolute Anfängerfrage :)
Gruß
Andre
Du hast folgende Zustände:
EP oder G sind High -> Datenleitungen sind hochohmig
EP und G sind Low -> Daten am Ausgang
Gelesen werden die Adressleitungen wenn EP auf Low ist und anschliessend
G auf Low geht (in der Grafik ist über der Flanke der Adressbus valid -
bei der EP Flanke NICHT!).
Aber im Endeffekt ist es wohl egal. Lies die Adressleitungen sobald EP
und G low sind (also auf der zweiten Flanke H->L).
Übrigens: für eine echte Simulation ist der Arduino viel zu langsam.
Wenn Du also einen Prozessor an den Simulator hängst, dann erwartet der
die korrekten Daten nach tGLQV = 120ns (Nanosekunden! Der Arduino
braucht eher Microsekunden (Faktor 1000).
Andre schrieb:> Wann genau ist der Zeitpunkt die Daten auf dem Adressbus auszulesen?
Der richtige Zeitpunkt ist die fallende Flanke des /CE (oder /CS)
Signals. In diesem Moment sind die Adressleitungen stabil. Mit der
fallenden Flanke des /OE Signals solltest du dann deine Daten auf den
Bus legen. Sobald /OE wieder ansteigt, muss der Datenbus auf Tri-State
gehen.
Hi
>Der richtige Zeitpunkt ist die fallende Flanke des /CE (oder /CS)>Signals. In diesem Moment sind die Adressleitungen stabil.
Wo steht das? Man kann auch Lesen ohne das CS zwischen zwei Zugriffen
wieder H wird. Dann ist die Änderung auf dem Adressbuss maßgebend.
MfG Spess
Wofür braucht man denn einen so derart langsamen EPROM-Emulator?
EPROM arbeiten asynchron. Nach jedem Adreßwechsel wird auch das
Datenbyte geändert. Du müßtest den Pin-Change-Interrupt über alle
Adreßleitungen verwenden.
Die 450ns wirst Du jedenfalls nicht schaffen.
Peter Dannegger schrieb:> EPROM arbeiten asynchron. Nach jedem Adreßwechsel wird auch das> Datenbyte geändert. Du müßtest den Pin-Change-Interrupt über alle> Adreßleitungen verwenden.> Die 450ns wirst Du jedenfalls nicht schaffen.
warum dann überhaupt Interrupts?
while( 1 ) {
PORT_OUT = daten[ PORT_IN ];
}
so in der Art, man müsste aber noch das schreiben berücksichtigen.
Hallo,
danke für die vielen hilfreichen Antworten. Die bringen mich wirklich
ein ganzes Stück weiter.
Ich dachte, dass der Arduino schnell genug für die Geschichte ist. Da
dies leider nicht so ist, wäre die nächste Frage welches EEPROM als
Ersatz für das 2716 (ist ja "nur" ein EPROM) gehen würde. Ich habe
gelesen, dass das 2816 kompatibel ist. Dies bekomme ich aber in keinem
Shop.
Vom Verfahren her würde ich dann die Daten von der SD Karte lesen (per
Arduino) und nicht an den Pins des Arduino emulieren, sondern von dort
auf ein kompatibles EEPROM schreiben. Von dort würde der Prozessor dann
die Daten lesen.
Gruß
Andre
Andre schrieb:> Da> dies leider nicht so ist, wäre die nächste Frage welches EEPROM als> Ersatz für das 2716 (ist ja "nur" ein EPROM) gehen würde. Ich habe> gelesen, dass das 2816 kompatibel ist. Dies bekomme ich aber in keinem> Shop.
Das ist ja auch alles uraltes Zeugs.
Das wirst du wohl einen groesseren Baustein nehmen muessen und die nicht
gebrauchten Addresseingaenge auf GND legen.
Andre schrieb:> Vom Verfahren her würde ich dann die Daten von der SD Karte lesen (per> Arduino) und nicht an den Pins des Arduino emulieren, sondern von dort> auf ein kompatibles EEPROM schreiben. Von dort würde der Prozessor dann> die Daten lesen.
Dann nimm ein 29F040 Flash Eprom oder bessere ein RAM. Zwischen deinem
Arduino und Speicherbaustein und Zielsystem wirst du dann aber noch
einige Multiplexer schalten muessen um den Datenfluss zu steuern.
Die ersten Versionen vom 2716 mit 450ns Zugriffzeit waren in den 80er
fuer viele CPU schon zu langsam. Also mit simulieren durch Software im
Arduino funktioniert das nicht.
Hallo!
Für den Notfall geht oft auch ein RAM. Für den 2716 könnte man ein so
genanntes Timekeeper-RAM M48T02 (z.B. Reichelt) verwenden. Das hat neben
der eingebauten Batterie gleich noch eine Echtzeituhr.
isnah schrieb:> Du hast ein zuwenig ausführliches Datenblatt. Nimm lieber folgendes:> http://www.google.de/#sclient=psy-ab&q=2716+eprom&oq=2716&gs_l=serp.1.2.0l4.409265.412548.0.416126.4.4.0.0.0.0.314.810.0j3j0j1.4.0...0.0...1c.1.17.psy-ab.LWhFuNNuIJw&pbx=1&bav=on.2,or.r_qf.&fp=eefdd29a84764d60&biw=1143&bih=687> dort ist das "Valid-Timing" auf Seite 3 erklärt.
Gerade besonders EPROMs differieren von Hersteller zu Hersteller sehr,
auch wenn es der gleiche pin- und funktionskompatible Grundtyp ist. Die
einen wollen eine Programmierung mit vielen kleinen Impulsen, und die
anderen eine Programmierung mit einem langen Impuls bzw. einem
Einzelimpuls, haben da noch Zusatzlogik im Baustein drin. Man sucht sich
da wirklich am besten genau das Datenblatt des Herstellers, von dem man
ein EPROM hat. Besonders differieren sie in der Programmierspannung, die
wollen mal 12,5V oder auch 13V oder 21V oder 25V. Und eben die
Schaltzeiten.
Wenn schon, dann kauft man heute für 8-Bitter bspw. ein 27C512, und legt
da die höheren Adreßpins einfach auf Low, dann hat man sein 2716.
Aber warum emuliert einer ein 2716? Geht es da um Retro-Zeugs?
Andre schrieb:> Ich dachte, dass der Arduino schnell genug für die Geschichte ist.
Bei EProms kann das schon mit einem µC funktionieren - 2 Ports einlesen,
Daten bestimmen, entscheiden ob Ausgabe oder Tristate am Ausgang
schaffen viele in der Zeit von 150 ns, was eine damals schon schnelle
Zugriffszeit war. Ein Arduino-System ist da viel zu umfangreich.
Die Frage ist nur, wofür eigentlich - ich würde einen Adapter bauen mit
Stiften für 2716 und einer Fassung PLCC32 ähnlich wie auf dem Bild, da
passt z.B. ein 29F010 rein, den ich extern programmiere. Da stellt sich
die Frage nach der Zugriffszeit garnicht und das Ding passt überall rein
wo ein 2716 drin war.
Gruss Reinhard
PS natürlich müssen die Eingänge ständig gelesen werden, EProms sind
nicht getaktet!
Wenn Du von DS lesen und in das ROM schreiben willst, dann kannst Du ein
DualPort RAM verwenden. Dise CHips gibt es mit einem parallelem
Addressbus (so wie das EPROM) und einem seriellen Bus, den Du dann
jederzweit vom Arduino beschreiben kannst. Alle Multiplxer sind im RAM,
und du brauchst nur noch einen Pin-Adapter.
Kostet aber auch ein bisschen mehr.
Matthias M. schrieb:> Wenn Du von DS lesen und in das ROM schreiben willst, dann kannst Du ein> DualPort RAM verwenden.
Wow, vielen vielen Dank für den Tip. Habe schon mit fritzing überlegt
wie ich die ganzen Multiplexer auf dem Board unterbringe. So ist das
natürlich deutlich einfacher und zudem seriell.
Danke!
Andre
Wenn du verraten würdest, was du konkret vor hast, könnte man dir besser
helfen.
- Du musst ein 2716 ersetzen, um eine alte Schaltung zu beleben: 2716
findet man in gut sortierten Bastelkisten. Es gibt auch Leute, die so
etwas noch programmieren können.
- Du möchtest ein 2716 simulieren, um schnell verschiedene Dinge
ausprobieren zu können: Es gibt erprobte Schaltungen. Es gibt sogar
fertige Leiterplatten dafür, die man nur noch mit etwas Hühnerfutter
bestücken muss. Die werden üblicherweise wie ein Drucker angesprochen,
teils auch seriell.
- ???
Andre schrieb:> Hallo zusammen,>> Wann genau ist der Zeitpunkt die Daten auf dem Adressbus auszulesen?
WENN die Daten stabil sind :-) Das kann von Hersteller zu Hersteler bei
EPROMS verschieden sein. Deswegen hat der Z80 z.B. Waits eingefügt bei
io-Aktionen.