Ich benutze vier SchiftOut Register des Typs 74HC595 um einen 24 Bit Adressbus zu bilden. Dies funktioniert prima.
Mit im Rennen sind zwei Stück 512k x 8 statische Rams. Bedeutet: Die Rams sind mit jeweils 19 Bit anzusteuern und das 20. Bit wird für die Selektion der beiden Bausteine verwendet. Die Logik ist klar: Das Bit 20 wird durch einen Inverter zerlegt. Alles was ab dem 20. Bit ist, wird sich auf den 2. Baustein auswirken. Also wird das /CE Signal durch Bit 20 einmal für den einen Chip low, oder für den Anderen
Ich habe nun zwei Möglichkeiten. Entweder ich benutze einen flotten NPN Transistor um einen Inverter zu realisieren oder sollte ich lieber einen 74XX Inverter benutzen? Transistoren hätt ich ja zufällig einige da. Ich befürchte, daß mir unter Umständen die Timings einen Strich durch die Rechnung machen. Obwohl die Schaltung momentan sehr langsam läuft, da auf Steckbrett mit 9600 Baud. Später jedoch kann der µC direkt und flott den Ram bedienen.
Nein, ich erzeuge den Adressbus und ein Datenbus mit den 595ern. Die Steuersignale kommen alle direkt vom Arduino. Außer /CE für die Staticrams.
Ich könnte ja auch einfach zwei separate /CE vom Arduino erzeugen lassen, aber ich möchte lieber /CE aus Bit 20 der Adresse bilden. Später muss ich /CE ohnehin noch durch eine zusätzliche Logik jagen, da eine Batteriepufferung für die Rams vorgesehen wird.
Edit: Der Datenbus (8Bit) wird durch das vierte 595 Register ausgegeben. Das Rücklesen des Bytes geschieht dann durch einen 74HC165. Oder eben direkt aus dem Byte des Rams, je nach Anwendung. Das ist auch nicht das Problem.
ich habe für meine Speichererweiterung, die ich mal gebastelt habe, einen 74LS04 (bzw. den DDR-Ersatztypen DL004D, weil ich den gerade in der Schublade hatte) genommen. Wenn Du Dir das mal ansehen willst: Speichererweiterung.
Ich kann mir vorstellen, dass ein Transistor als Inverter schnell genug wäre, wenn die Schaltzeit innerhalb der "Bitschiebezeit" der Shift-Register liegt.
Ansonsten, wenn Du ein Oszilloskop und einen Funktionsgenerator hast, der schnell genug ist (meiner geht leider nur bis 100 kHz - sonst hätte ich es mal getestet), kannst Du es ja ausprobieren. Oder ausrechnen, hier steht ab Kap. 12.3.1., wie.
Ich denke auch daß ich einen Inverterchip benutzen werde. Oder ein NAND mit zwei parallelgeschalteten Inputs müsste auch funktionieren. Ich hatte das damals bei den 8051 Deviraten auch so gemacht.
Ich muss nur noch gucken wie ich den /CE sicher auf High bekomme, wenn die Versorgungsspannung ausfällt, da ich den Speicher batteriepuffern will. Ich glaube sogar daß es eine fertige Logik gibt, die die beiden /CE´s für diesen Fall steuert. Ich glaube auch mal gelesen zu haben daß diese Chips so intelligent sind und bei Wiedereinschalten kurze Zeit warten, damit die Prozessorpins stabil sind. Ich finde bloß die Bezeichnung des Chips nicht mehr.
Jedenfalls danke schonmal, das bestätigt meine Gedanken. Ich lass das mit dem Transistor mal lieber bleiben.
So, ich habe nun ein 74HC00 in meiner Kiste gefunden und diesen als Inverter beschaltet. Die Chipauswahl funktioniert perfekt.
Thema ist somit auch gelöst.
Nun kann ich 1 Megabyte beschreiben und auslesen. Das mit dem HC165 bekomme ich auch noch hin, dann können die Daten aus dem Ram auf die serielle Schnittstelle ausgegeben werden. Hier sind es halt momentan LED´s zum Debuggen. Was für eine irrsinnige Speichermenge.
Nach dem Einschalten der Spannung befinden sich in der Tat scheinbar zufällige Bytes in den beiden Speicherbausteinen. Man kann das beim Durchsteppen der Adressen prima mitverfolgen.
Edit: Bei 9600 Baud dauert das Beschreiben eines Megabytes etwa 18 Minuten. Später, wenn die Schaltung von dem Breadboard auf eine Platine kommt, dürften wesentlich höhere Datenraten erzielt werden können. Hier habe ich momentan auf Abblockkondensatoren verzichtet und deswegen ist die ganze Geschichte nur zuverlässig wenn ich mit sehr niedrigen Datenraten arbeite. Das macht momentan zum Debuggen sowieso Sinn. Drückt mir die Daumen zur Vollendung des Projekts. Ich werde es dann vorstellen.