2MB DRAM an AVR

Gast #186085
Lesenswert?

Hier ein kleines Beispiel für die DRAM Ansteuerung mit einem AVR.
Da der AVR sehr schnell ist, kann man das ganze Timing in Software
machen.
Dieses Beispiel digitalisiert ein Signal mit ADC0, schreibt es in den
DRAM und gibt es mit einigen Minuten Verzögerung wieder aus.
Da PWM (OC1A) als DAC verwendet wird, sollte man mindestens 8MHz,
besser die vollen 16MHz Takt verwenden, um eine ausreichend hohe PWM
Frequenz zu erreichen.
Bei 12MHz wird das Signal mit etwa 14,4kHz abgetastet und man erhält
eine Verzögerung von 142s.

Da wohl jeder ein paar alte DRAMs aus PCs, oder anderen Geräten
rumliegen hat, ist das hier sicher eine interssante Mögichkeit solche
Speicher sinnvoll zu verwenden.

Wie weit man das ganze optimieren kann, und zu was ein AVR alles fähig
ist, sieht man hier:
http://elm-chan.org/works/vp/report.html
Angehängte Dateien:
Gast #186091
Lesenswert?

hallo, kannst du mir eine platine mit ram funktionsfähig anfertigen,
soll am avr laufen. ich kann nicht alles anfertigen, jeder mesnch hat
seine fachliche fähigkeiten auf speziellen gebiet. beim anfertigen von
platinen usw. habe ich meine grenzen erreicht.
anfertigung natürlich gegen ein gutes honorar selbstverständlich.
meine mail: pebisoft@arcor.de

mfg pebisoft
Gast #186093
Lesenswert?

Um die Adress und Datenleitungen zu verbinden, muss der DRAM ein OE\
haben. Dieser ist bei Speichermodulen aus PCs (z.B. 30polige SIMMs)
aber fest auf Masse gelegt.
Daher wird ein weiterer Port für die Adressen benötigt.
Diese Version hier wurde komplett überarbeitet (Inline Assembler durch
echten Assemblerfunktionen ersetzt), und getestet mit 256kB, 1MB und
4MB SIMM Speichermodulen, jeweils 1 oder 2 Module zusammen.
Die read/write_word Funktion hatte in der letzen Version einen Fehler,
daher die alten Versionen nicht mehr verwenden.
Die _word Funktionen wurden jetzt durch eine _string Funktion ersetzt,
die es erlaubt eine beliebige Anzahl an Bytes zu schreiben/lesen. Diese
Funktion verwendet auch den Page Mode der DRAM und ist daher ziemlich
schnell.

Eine Version für DRAMs mit OE ist in Arbeit und kommt demnächst.
Angehängte Dateien:
Gast #186100
Lesenswert?

Ich hab mir die Seite http://elm-chan.org/docs/wire/wiring_e.html mal
genauer angeschaut.

Giebt's da keine Probleme mit dem "Übersprechnen" bei den langen so
dicht nebeneinander liegenden Leitungen?

Ich kenn das nur bei uns aus der Arbeit wenn wir "normalverseilte"
Kabeln testen.
(Unter "normalverseilten" Kabeln verstehen wir bei uns in der Arbeit
Kabeln, bei denen bis zu 100 Adern in Lagen parallel verseilt wurden
wobei bei jueder lage die Verseilrichtung wechselt.)

Da kann man keinen Unterschied bemerken wenn man mal eine Ader neben
der eigentlichen Komunikationsader liegt.
Das übersprechen des Signals kann man erst bei der übernächsten Ader
als solches erkennen.

Bei uns sind aber die Leitungen immer länger als 1km.

Aber bei den Taktraten die bei den Mikrokontroller verwendet werden
könnte ich mir schon vorstellen das es das Problem des Übersprechens
giebt.

Liege ich mit meiner Vermutung richtig oder sind in diesem Fall die
Kabellängen zu kurz?

mfg Sepp
Persönliche Seite #186101
Lesenswert?

Wenn Leitungen parallel geführt werden, die gleichzeitig schalten (wie
bei Adress- und Datenbussen der Fall), dann stört eine Parallelführung
auch bei ziemlich hohen Taktfrequenzen nicht.
Bei der abgebildeten Leitungslänge von weniger als 10 cm dürfte das nur
bei analogen Signalen wie A/D-Wandler-Eingängen etc. überhaupt zu
Problemen führen.
Mit dieser Technik lassen sich durchaus Prozessorschaltungen mit
Taktfrequenzen über 20 MHz realisieren; wichtig ist hierbei die saubere
Auslegung der Stromversorgungsleitungen. Diese sollten größtenteils
nicht gefädelt und mit ausreichend vielen Abblockkondensatoren versehen
sein.
Persönliche Seite #186106
Lesenswert?

komisch, wenn ich "http://elm-chan.org/"; eingebe sehe ich da nur eine
Fedora Core Test Page und wenn ich
"http://elm-chan.org/works/avrx/report_e.html " eingebe werde ich
immer auf "http://www.pir.org/"; umgeleitet.

Kann es sein dass du deine Daten noch in den temporären Dateien drin
hast?

Gibt es da bestimmte Uhrzeiten wo die Seite online ist oder sowas ?

Ich will die Seite wenigstens mal sehen ...
Persönliche Seite #186109
Lesenswert?

Wenn einer von euch mir mal die IP von elm-chan.org geben kann hilft mir
das vielleicht weiter.

ping elm-chan.org


C:\>ping elm-chan.org

Ping elm-chan.org [69.94.79.13] mit 32 Bytes Daten:

ihr habt die gleiche IP ?

Was mach ich falsch ?
Kann es sein dass ich aus Ostdeutschland nicht raus kann ?
War ja damals schon so ...

Bin weiterhin für jegliche Hilfe dankbar.
Persönliche Seite #473591
Lesenswert?

Das ganze ist in assembler und beruht fast zu 100% auf dem anfänglichen 
code .. läuft mit nem Mega16 (benötigt halt viele IOs), den Refreshtimer 
hab ich noch nicht getestet, da dort das AVR Studio wohl nen bug hat, 
und den timer 0 mit dem prescaler einfach nich laufen will. Ist 
sozusagen einfach nur der RAM test der ausgefürt wird, indem die 
gelesenen daten per UART an den PC gesendet werden und manuell überprüft 
werden (hatte auf meiner platine nen paar kalte lötstellen, deswegen war 
das für mich von vorteil.

Das layout ist mit eagle erstellt. Der Audio eingang ist experimentell, 
da ich das audiosignal per kondensator einkoplle und mit 2 widerständen 
nach GND und AREF (noch über eine induktivität gekoppelt) auf AREF/2 
ziehe.
Lange Rede kurzer Sinn: ich hab keine Ahnung ob das so funktioniert.

Die "Ausgangsstufe" besteht einfach nur aus einem MosFet und einem 
steuernden Transistor, damit die geschichte funktioniert muss da noch ne 
Induktivität dran (--> step down wandler) um dem überhaupt sinnvolle 
töne zu entlocken. Normalerweise würde man sowas ja über nen OPV machen, 
da ich aber keinen da hatte und nicht bestellen wollte hab ich einfach 
die beste lösung genommen die ich mit verfügbaren mitteln herstellen 
konnte.

2 ADC kanäle sind über 2 Pins erreichbar (der rest des Ports geht für 
den Ram drauf)

Ebenfalls über 2 pins sind die XTAL pins zu erreichen um noch nen 
externen qu arz/oszillator anzuhängen. Kondensatoren hab ich vergessen, 
funktioniert bei mir mit gesetztem CKOPT Fuse aber auch ohne (16MHz 
Quarz)

PORTD ist komplett auf eine Stiftleiste geführt.

Bei mir hab ich den Ram direkt draufgelötet (pinleiste an den ram und in 
die Platine gelötet) da ich keinen Ram sockel besorgen konnte. (Falls 
jemand ram sockel für diese rams hat ich würd welche nehmen ;) )

So viel spass damit.
Angehängte Dateien:
Persönliche Seite #473880
Lesenswert?

oh dann war das das falsche file ... sry hatte ein problem mit 
AVRStudio, deswegen hatte ich das Projekt zwei mal unter ähnlichem Namen 
angelegt (beim ersten mal meinte er er könne irgend eine datei nicht 
öffnen) und es war schon spät, da hab ich nich mehr so drauf geachtet ;)

Achja: Verwendet hab ich einen MM256k0j9s-08H von NMBS, sollte aber
eigentlich mit jedem SIMM modul laufen, ich hab 10 Adressleitungen
rausgeführt, also soviel wie so ein Modul maximal haben kann.

PS: Eagle kann man sich ja wenigstens runterladen um die Files 
anzugucken ... muss man ja nicht gleich benutzen ;)

GRML, wie groß dürfen denn die Dateien hier sein, die man anhängt? -.-
Angehängte Dateien:
#474204
Lesenswert?

Hallo Hauke,

> wie groß dürfen denn die Dateien hier sein, die man anhängt

so viel ich weiß nur 1MB


Danke für Dein Assemblerprogramm, ich beschäftige mich gerade damit.

Das Register "voll" gefällt mir ;)

Könntest Du uns mal bitte kurz und knapp erläutern, wie das Programm im 
Groben funktioniert, dann lässt sich der Code besser nachvollziehen.


>Verwendet hab ich einen MM256k0j9s-08H von NMBS, sollte aber
>eigentlich mit jedem SIMM modul laufen, ich hab 10 Adressleitungen
>rausgeführt, also soviel wie so ein Modul maximal haben kann.

Da haste gut mitgedacht, eigentlich müssten doch alle SIM-Module 
kompatibel sein?

Hab gerade aus einem alten 386/486 PC ein 4MB RAM-Mpdul herausgezogen 
und die Platinen-Pins mal abgezählt.

72 Platinen Pins und 2 ICs TMS418160 tummeln sich auf der Platine herum

auf einer anderen

8 IC CW417404 , da frage ich mich, wie die Adressen und Daten 
koordiniert werden?


Sehe ich das richtig, dass man mit nur eine halbe RAM-BANK eines PCs 
richtig nutzen kann (2x36 Pins) ?

Bernhard
Persönliche Seite #474249
Lesenswert?

Das was du hast ist ein 72 Pin modul, das ist noch mal ne runde neuer 
als die, die ich verwende.

Die belegung der 72 Pin module gibts hier:
http://region-online.de/technik/lexikon/simm72.htm

Ich hab ein 30 Pin modul verwendet, die belegung auf der Platine stimmt 
mit der belegung der 30 Pin module überein.

Das Programm ist ziemlich simpel.

Wichtig ist erst mal addrL-addrH, dort ist die Adresse für den DRAM 
gespeichert. (Hier werden von den 24bit maximal 20 bit benötigt)

Die Read und Write funktionen hab ich soweit fast komplett übernommen, 
einzige änderung es gibt kein read/write high/low sondern nur read und 
write, da diese speicher 8 bit breite haben.

Das einzige was der code bis jetzt "kann" ist also von der Adresse 0 bis 
Adresse 128 bytes in den speicher schreiben und diese dann direkt danach 
von 0 bis 128 übers UART ausgeben. Das ist als testfunktion gedacht und 
ist auch von Benedikt übernommen (bis auf das er einfach überprüft hat, 
ob sie gleich sind und ich eben sie per uart rauspumpe).

Weiterhin läuft der ADC aber wie man an der schmalen Interruptroutine 
sieht, wird noch nix weiter mit den daten gemacht.

Der Timer für den Ram Refresh ist ebenfalls noch nicht richtig 
eingestellt.
Persönliche Seite #476186
Lesenswert?

Soooo ... jetzt gibts neuen code.
Der Code von oben ist nahezu nicht lauffähig ;)

Das heir sind 2 Codes.

Einer arbeitet mit einem Burst refresh, d.h. es werden immer 256 Zeilen 
auf einmal refreshed. Problem hierbei: Da sich die Refresh methode in 
der Mainmethode befindet können während einem Refresh nur daten aus 
einem Interrupt in den Ram geschrieben werden, nicht jedoch aus der Main 
(Problem z.b. bei großen Datenmengen, die auf einmal anfallen, und nicht 
per interrupt getimed ankommen) Zur Demonstration schreibe ich hier die 
vom ADC kommenden daten in der Main in den RAM, dadurch ergeben sich 
lücken in der aufzeichnung. Um den Effekt besser sichtbar zu machen, 
kann man die den Kommentar von
  //mov ADCData,bla
entfernen (im ADC Interrupt) dann wird nicht der wirkliche wert 
eingelesen, sondern der wert, der sich bei jedem ADC Interrupt um eins 
erhöht, dadurch ergibt sich ein sägezahn, an dem man dann bei 
graphischer darstellung der werte schön erkennen kann, dass ein paar 
samples ausgelassen wurden.

Die andere Version arbeitet mit einem Distrbuted Refresh, bzw aus einem 
Mix aus distributed refresh und burst refresh. Es werden immer 8 Zeilen 
Refreshed. So wird ein Interrupt mit ca 8kHz erzeugt, der immer diese 8 
Zeilen refresed. Wenn gerade eine Schreib oder Lese operation am laufen 
ist kann natürlich nicht refreshed werden, deswegen wird geprüft, ob 
gerade gelesen oder geschrieben wird, wenn nicht wird refreshed, wenn 
ja, wird ein flag gesetzt (bzw nicht wieder gelöscht) sodass die schreib 
bzw lese routine am ende einen Refresh ausführen kann.

Welcher Refresh jetzt besser ist, oder wo vor/nachteile liegen weis ich 
nicht genau.

http://download.micron.com/pdf/technotes/DT30.pdf

Das PDF hatte ich gefunden und dort waren beide Methoden beschrieben, 
deswegen ahb ich einfach beide Programmiert ;)

Der Code macht nichts weiter als ca 6 sek lang aufzunehmen, und die 
daten in 256kB ram zu schreiben. Nach einer weile (glaub ca 20 sek) 
werden die Daten über die serielle schnittstelle mit 38400 bps 
ausgegeben, das ist die höchste baudrate, die relativ fehlerlos mit nem 
16 MHz quarz hinzubekommen ist.
Angehängte Dateien:
Persönliche Seite #476189
Lesenswert?

Ich würde ja Editieren, lässt er mich aber nicht :(( (Application Error 
(Rails) oder so ähnlich)

Noch was zum Stromverbrauch: Die ganze Platine zieht bei mir im Idle 
(also nur der Refresh am laufen) durchschnittlich 33,3 mA getestet mit 
der distributed Refresh version. In der anfangsphase in der der Ram 
vollgeschrieben wird sind es etwa 35 mA.

So das wars gute Nacht ;)
#476222
Lesenswert?

Der Stromverbrauch hängt sehr von den verwendeten DRAMs ab. 
Durchschnittliche DRAM SIMM Module brauchen weniger als etwa 50mA. Ich 
habe aber auch einige (anscheinend ältere) Module, die mit 8x 1MBit x1 
DRAMs bestückt sind (anstelle der meist verwendeten 2x 1MBit x4), diese 
Module ziehen Idle etwa 100mA und während einer Aktivität bis zu 500mA ! 
Die werden dann auch gut warm.
Persönliche Seite #476627
Lesenswert?

Ich suche auch noch nach fassungen für die RAMs, die Riegel hab ich von 
einem Freund aus der Schule geschenkt bekommen, jetzt hab ich, wie man 
auf dem Bild sehen kann, erst einmal Pins dranngelötet und so direkt auf 
die Platine gelötet. Ein Slot ist eine wesentlich bessere lösung, nur 
leider hab ich keine sooo alten Mainboards mehr, dass ich welche 
auslöten könnte. Man könnte auch einen ISA slot missbrauchen, jedoch ist 
das auch nicht die optimale Lösung.
#507693
Lesenswert?

Ich danke Euch beiden, habe den Fehler gefunden,

hatte vergessen am SIMM-30 die PINS 28 + 29 auf +5V zu legen.


Ich schreibe gerade die Software komplett neu auf einen ATmega32,
muss mich erst mit dieser Materie etwas anfreunden ;)



In einer Endlosschleife wird ein Byte in den DRAM geschrieben und ein 
Byte in aus dem DRAM gelesen.

Sieht vom Prinzip so aus:

WRITE:
ADRESSE(ROW)    anlegen + RAS auf LOW
Datenbyte       anlegen + WE  auf LOW
ADRESSE(Column) anlegen + CAS auf LOW
RAS, WE, CAS                  auf HIGH

READ:
ADRESSE(ROW)    anlegen + RAS auf LOW
ADRESSE(Column) anlegen + CAS auf LOW
Datenbyte       auslesen
RAS,CAS                       auf HIGH



Problem Refresh:

Ich habe gelesen (SIMM-TESTER), wenn permanent Daten in das SIMM-Modul 
geschrieben werden, dann braucht kein Refresh durchgeführt werden,
was meint ihr dazu?

Würde es genügen, wenn alle xx ms ein "RAS-ONLY REFRESH", also 
kurzzeitig
RAS auf LOW durchgeführt wird?

Oder müsste ein "CAS-BEFORE-RAS REFRESH", also CAS auf LOW und 
anschließend RAS x mal auf LOW durchgeführt wird?


Bernhard


#507711
Lesenswert?


Ich bin verwirrt.

Mein uraltes SIMM-30 Modul verliert seine Daten nicht,

Es wird kein Refresh ausgeführt und auf das SIMM Modul wird minutenlang
nicht zugegriffen (kein READ/kein WRITE).

Selbst wenn die Versorgungsspannung auf 2V herabgesetzt wird, bleiben 
die Daten erhalten.

Erst durch ein totales Abschalten der Versorgungsspannung führt endlich 
zum Datenverlust.


Habt Ihr die gleichen Erfahrungen gemacht?


Bernhard


#507751
Lesenswert?

Bernhard Schulz wrote:
> Problem Refresh:
>
> Ich habe gelesen (SIMM-TESTER), wenn permanent Daten in das SIMM-Modul
> geschrieben werden, dann braucht kein Refresh durchgeführt werden,
> was meint ihr dazu?

Es wird aber nur die entsprechende Zeile refreshed aus der Daten gelesen 
werden. Verwendet man das DRAM also z.B. als FIFO bei dem immer wirklich 
alle Daten innerhalb von <1s gelesen werden, kann man auf einen Refresh 
verzichten.

> Würde es genügen, wenn alle xx ms ein "RAS-ONLY REFRESH", also
> kurzzeitig
> RAS auf LOW durchgeführt wird?

Jain: Man muss aber immmer die Adresse weiterzählen. Der CBR Refresh 
verwendet daher einen internen Adresszähler und ist somit das 
allereinfachste.

> Mein uraltes SIMM-30 Modul verliert seine Daten nicht,
>
> Es wird kein Refresh ausgeführt und auf das SIMM Modul wird minutenlang
> nicht zugegriffen (kein READ/kein WRITE).

Ich habe solche Versuche auch mal gemacht. Je nach DRAM kann es sein, 
dass die Daten Minutenlang erhalten bleiben.
Wie man am unteren Bild sieht, steigt die Fehlerrate nahezu 
exponentielle mit der Temperatur an. Ich hatte sogar mal ein Termometer 
damit gebaut indem ich die Fehler nach 1 Minute gemessen hatte. 
Allerdings fing der Messbereich bei 40° an, wurde nach oben hin aber 
ziemlich hochauflösend. Die im Datenblatt angegebenen Werte für die 
Refreshzeit garantieren daher, dass selbst bei 70° mit Sicherheit noch 
keine Daten verloren gehen.
Wenn man unter 50° bleibt kann man daher bei Bastelschaltungen auch mal 
eine Faktor 10 niedrigere Refreshrate nutzen. Und wenn man das DRAM auf 
Es legt auch mal Faktor 1000...
#508636
Lesenswert?

Hauke Radtki wrote:
> Noch einfacher wirds, wenn man an die CE leitung dran kommt.

Das wird sehr schwer, denn DRAMs haben kein CE !!!
Das kann man wunderbar mit RAS/CAS machen.
Die SIMM Mudule kann man bis auf RAS oder CAS komplett parallel 
schalten.
Beim PC wird das üblicherweise so gemacht: CAS dient als Byte Enable 
Anschluss, RAS zur Erweiterung des Speichers.
Bei einem 64Bit System (Pentium) hat man daher 8 CAS und bis zu 4 RAS 
Leitungen (2 Riegel werden für 2x32=64bit gebraucht, mit 4 Riegel hat 
man 2 RAS * 2 bei doppelseitigen Modulen.)
Bei einem 486er werden 32bit (also 4 CAS) benötigt. Bei 8 Modulen erhält 
man so 1 oder 2 RAS Leitungen.
Der Speicherkontroller verwaltet die ganzen RAS/CAS Leitungen und 
"rechnet" die  aus der gewünschten Speicheradresse aus. Denn nur wenn 
RAS und CAS zusammen aktiv sind, werden Lese/Schreiboperationen im DRAM 
gestartet.

CAS8 ist Parity wie Hauke schon richtig schrieb. Ich hänge die Leitung 
meist direkt an Vcc. RAS von dem Parity RAM ist mit dem anderen RAS Pin 
verbunden.
Das Parity RAM hat immer dieselbe Größe wie das Modul, aber eben nur 
1bit. Bei vielen Modulen ist der Parity RAM aber nicht bestückt, da nur 
die wenigsten PCs Parity unterstützen.
#509007
Lesenswert?

Mir sind zumindest keine bekannt. Es gibt nur 256kB, 1MB, 4MB und 16MB 
Riegel. Die 4MB sind schon recht selten, 16MB habe ich noch nie in der 
Hand gehabt. Die müssen damals ein Vermögen gekostet haben (Vermutlich 
um die 500DM für einen 16MB Riegel.)
Ist genauso wie bei SRAMs: Da gibt es ja auch nur 2kB, 8kB, 32kB, 128kB, 
512kB usw. (wenn man mal von einigen Cache SRAMs mit 16 oder 64kByte 
absieht).
Es gab aber mal ein paar DRAMs mit weniger Rows als Cols, um den Refresh 
zu vereinfachen (weniger Rows -> weniger Refreshzyklen -> weniger 
Stromverbrauch.)

Bei den 72poligen SIMM PS2 Modulen ist es genauso. Es gibt da zwar 4MB, 
8MB, 16MB, 32MB, 64MB und 128MB, aber die 8, 16 und 64MB sind jeweils 
Doppelseitige (mit 2 RAS Pins) die im Prinzip aus 2 halb so großen 
bestehen.
#512380
Lesenswert?

Ich habe mal etwas experimentiert,

Ihr wisst doch, spielend erlent ein Kleinkind seine Umwelt ;)


Ein NF-Signal wird mit dem ADC digitalisiert und anschließend wird das

digitalisierte Signal mit einem R2R Netwerk wieder in ein analoges 
Signal

gewandelt.


Mir ist aufgefallen, dass das NF Signal gefiltert werden muss,

die maximale NF-Frequenz darf (Samlingfrequenz/2) nicht überschreiten,

sonst kommt es zu sehr unerwünschten Verzerrungen und Nebengeräuschen.


Bernhard
Angehängte Dateien:
#513435
Lesenswert?

@Magnetus

> ...falscher Thread

Ich wollte Benedikt seinen Thread mit der Problematik AD und DA Wandlung

etwas ergänzen, hätte vielleicht doch etwas mehr dazu schreiben sollen.

Kritik ist angekommen.


Ein NF-Signal kann per ADC digitalisiert und die Daten in einem DRAM

abgelegt werden.

Das ablegen der Daten im DRAM habe ich mal außer acht gelassen und mich

nur auf die AD / DA Wandlung konzentriert.

Bernhard
#1271300
Lesenswert?

Hi,

versuche grade einen 2MB-Ram mit Benedikts Code anzusteuern.
Leider scheitert schon der Ram-test in der Init Routine.
Ich habe testweise die Testbytes alle auf 0 und bei einem anderen 
Versuch alle auf 255 gesetzt, auch dann scheint es zu 
Lese/Schreibfehlern zu kommen.

Gibt es eine Möglichkeit zu testen, ob der Baustein überhaupt 
funktioniert?

Mir ist ausserdem aufgefallen, dass während des tests der OE Pin 
zunächst auf low ist und dann später auf high.
Müsste es nicht gerade umgekehrt sein (beim schreiben auf high, beim 
lesen auf low)?

Muss man alle VCC und VSS anschlüsse am Baustein anschließen?

Achja,  habe sicherheitshalber A10 und A11 fest auf Masse gelegt, hilft 
nicht.

Danke euch
#1271422
Lesenswert?

Ben Utzer schrieb:
> Gibt es eine Möglichkeit zu testen, ob der Baustein überhaupt
> funktioniert?

Im Prinzip ist der RAM Test diese Möglichkeit.

> Mir ist ausserdem aufgefallen, dass während des tests der OE Pin
> zunächst auf low ist und dann später auf high.
> Müsste es nicht gerade umgekehrt sein (beim schreiben auf high, beim
> lesen auf low)?

Ja, eigentlich schon.
Hast du die neueste Version verwendet, also diese hier?
http://www.mikrocontroller.net/attachment/8347/DRAM_Controller.zip
Falls ja, prüf mal ob die Pins in der DRAMIO.h richtig eingestellt sind.

Die ist am ausgiebigsten getestet und sollte eigentlich mit nahezu allen 
DRAMs funktionieren.

> Muss man alle VCC und VSS anschlüsse am Baustein anschließen?

Offiziell ja, aber es funktioniert oft auch wenn man einen Anschluss 
offen lässt, da die intern alle verbunden sind. Ist halt nicht unbedingt 
praxistauglich, da DRAMs durchaus einige 100mA während eines Refreshs 
ziehen.
#1288808
Lesenswert?

Theoretisch ist es kein großer Aufwand.
Vermutlich reicht es aus, das Timing zu kontrollieren und anzupassen, 
das bei VRAMs kritischer ist als bei DRAMs, denn teilweise haben beiden 
Flanken Funktionen.
Ich habe diese schon ein paarmal verwendet, allerdings in Assembler und 
direkt speziell auf die Anwendung optimierte Funktionen, da das ganze 
dann Zeitkritisch war.
Was ich bisher so gesehen habe, gibt es auch mehrere Generationen von 
VRAMs die sich durch leicht andere Funktionen unterscheiden und auch 
durch die Größe des SRAMs.
Beitrag #5956326 wurde von einem Moderator gelöscht.
Beitrag #7197791 wurde von einem Moderator gelöscht.
Beitrag #7197793 wurde von einem Moderator gelöscht.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.