Lesen/Schreiben eines SRAM-Chips mit einem Arduino

Der Hintergrund

Ich möchte ein Atmel AT28C256 EEPROM über ein Arduino Uno programmieren können. Ich hatte kein Glück, darauf schreiben/lesen zu können, also bin ich auf die Verwendung eines SRAM-Chips zurückgefallen, um die Dinge zu vereinfachen (das EEPROM kann sich beispielsweise im Schreibschutzmodus befinden).

Vom Arduino aus treibe ich 3 SN74HC95N-Schieberegister, die in Reihe geschaltet sind und mir die Möglichkeit geben, 16-Bit-Adressen und 8-Bit-Daten zu schreiben. So weit so gut, das funktioniert gut und ich habe es mit einem Logikanalysator überprüft.

Das Problem

Der Versuch, in SRAM zu lesen/schreiben, gibt mir jedoch nie etwas über den Lesevorgang. Das Datenblatt für den Chip ist hier , und es scheint eine ziemlich einfache (zu verwendende) Angelegenheit zu sein, die mit einem relativ breiten Spannungsbereich funktioniert.

Laut meinem Multimeter liegen zwischen VCC und GND etwa 4,5 V, und ich habe eine 100-uF-Kappe, um die Dinge zu glätten. Dies ist alles auf einem Steckbrett aufgebaut und der Schaltplan entspricht (hoffentlich) Ihren Erwartungen. Ich schließe einfach die Adresse an (obwohl die oberen 4 Adressleitungen geerdet sind, da mein EEPROM weniger Pins als das SRAM hat). & Datenleitungen und dann die anderen Eingänge vom Arduino ansteuern.

Der Code versucht, 8 Bytes mit den Werten 1-8 auf die Adresse 0-7 zu schreiben. Die Ausgabe des Logikanalysators ist unten (nur die ersten beiden Datenleitungen sind gezeigt, aber sie sollten immer noch Ausgabe in der Lesephase zeigen), mit Schreiben auf der linken Seite und Lesen nach rechts.

Die beiden Schieberegister für die Adresse sind immer ausgangsaktiviert, das Datenregister ist für Leseoperationen gesperrt, um eine Konkurrenz zu verhindern.

Ausgang des Logikanalysators mit A0-2, D0-1, OE CE und WE

Hilfe schicken!

Soweit ich herausfinden kann, sende ich die richtigen Signale, und das Timing der Impulse scheint auch korrekt zu sein (mindestens 50 ns auf CE und WE und meine sind 100 us). Ich würde erwarten, zwei Ausgangsimpulse in dem oben hervorgehobenen Bereich zu sehen, aber mir fehlt eindeutig etwas. Mache ich hier offensichtlich etwas falsch mit den Steuereingängen oder liegt das eher an meinen sehr laienhaften Elektronikkenntnissen? Ich kann Code einfügen, hoffe aber, dass die Ausgabe für sich selbst spricht.

Hast du die Datenleitungen nach dem Schreiben wieder auf Eingang im Arduino umgestellt? Sieht nicht so aus wie du.
Genau richtig, stellte sich heraus, dass ich es nicht war - hatte das OE des falschen Schieberegisters geerdet !!
Übrigens, wenn Sie Details zu einem Beispiel zum Schreiben eines AT28Cxx von einem Arduino wünschen, habe ich meinen Code, meine Notizen und Schaltpläne auf github github.com/tardate/LittleArduinoProjects/tree/master/playground/…
Danke @tardate! Ich glaube, das ist eines, das ich eigentlich schon mit einem Lesezeichen versehen hatte :)

Antworten (1)

Ich denke, vielleicht deaktivieren Sie die Datenbits der 74xx95-Ausgänge nicht, also kämpfen sie mit den RAM-Datenausgängen. Logische „0“-Ausgänge gewinnen tendenziell, wenn sowohl eine „0“ als auch eine „1“ gleichzeitig auf eine Signalleitung getrieben werden. Sie benötigen eine Methode in Ihrer Schaltung, um Ihre 74xx95-Ausgänge zu schweben / zu deaktivieren / mit drei Zuständen zu versehen, damit die RAM-Ausgänge übernehmen können.

Von der Detailebene, die ich in der Spur sehen kann, sieht es ziemlich sauber aus. Aber es gibt nicht genug Auflösung, um zu sehen, was CE und WE genau tun.

Oh, ich könnte dich umarmen. Ich habe das stundenlang angestarrt und konnte es nicht herausfinden, aber nachdem Sie gesagt haben, dass ich angefangen habe, die OE-Steuerung für das Datenschieberegister zu debuggen, und bam ... keine Wirkung. Es stellte sich heraus, dass ich OE für das untere Adress- und Datenregister geerdet hatte, nicht für die beiden Adressregister!