Forum: Mikrocontroller und Digitale Elektronik EPROM emulieren, wann Adressbus lesen?


von Andre (Gast)


Lesenswert?

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

von Wilhelm F. (Gast)


Lesenswert?

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.

von Andre (Gast)


Lesenswert?

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

von Matthias M. (matthias_m69)


Lesenswert?

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).

von isnah (Gast)


Lesenswert?


von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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.

von Andre (Gast)


Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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.

von Route_66 (Gast)


Lesenswert?

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.

von Wilhelm F. (Gast)


Lesenswert?

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?

von Reinhard Kern (Gast)


Angehängte Dateien:

Lesenswert?

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!

von Matthias M. (matthias_m69)


Lesenswert?

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.

von Andre V. (dadude)


Lesenswert?

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

von Georg G. (df2au)


Lesenswert?

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.

 - ???

von oszi40 (Gast)


Lesenswert?

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.

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.