Forum: Projekte & Code 2MB DRAM an AVR


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Benedikt (Gast)


Angehängte Dateien:

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

: Gesperrt durch Moderator
von Thorsten (Gast)


Lesenswert?

Dieser ChaN ist schon krass drauf. Beeindruckend, was der so auf seiner
Seite hat. Vor allem das hier:
http://elm-chan.org/docs/wire/wiring_e.html

Ich würde niemals die Motivation aufbringen, das so ordentlich zu
machen. Seine gefädelte Leiterplatte sieht besser aus, als so manche
vom Profi layoutete :)

Thorsten

von Elektrikser (Gast)


Lesenswert?

Das ist beeindruckend. Sehe ich das richtig? Er klebt die Controller mit
einem doppelseitigen Klebeband auf eine Lochrasterplatine?

Gruß Gerd G.

von Benedikt (Gast)


Lesenswert?

Es ist schon schwer genug 0,5mm raster normal zu löten, und dann noch
ohne Platine einfach so Cu Draht anlöten. Das ist wirklich eine
Leistung !

Was ich auch empfehlen kann:
Das Kapazitätsmessgerät. Absolut einfach, aber päzise und
selbstkalibrierend !

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal ein kleiner Audiorecorder mit einem 2MB DRAM und das Layout für
Adapterplatinen für 256kx16 und 1Mx16 DRAMs.

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Hier ein C Code, um einen DRAM (512kB-2MB) als Speicher für einen AVR zu
verwenden.
Die Routinen sind komplett in Assembler geschrieben, also relativ
schnell (ca. 1-2us bei 16MHz)

von pebisoft (Gast)


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

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Hier etwas eine verbesserte Version der DRAM Routinen (einige Fehler
behoben, Unterstützung für neue DRAM Größen, etwas schneller.
Unterstützt werden 256kx8, 256kx16, 512kx8, 1024kx8, 1024kx16, 2024kx8,
4096kx8

von Benedikt (Gast)


Angehängte Dateien:

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.

von Bernhard (Gast)


Lesenswert?

Hallöchen Benedikt,

ein sehr interessanter Beitrag von Dir, gefällt mir.

Ich möchte mich auch etwas tiefgründiger mit

diesem Thema beschäftigen, könntest Du uns bitte einen Schaltplan zur

Verfügung stellen?

Danke

Bernhard

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal das Komplettpacket mit Routinen für DRAMs mit und ohne OE und
ein paar Layouts für Adapterplatinen.

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch ein Schaltplan mit ein paar Beispielen (SIMM und 1Mx16 DRAM)
wie man den DRAM an einen mega8515 anschließen kann.
Die Anschlussbelegung kann man aber beliebig ändern und in der DRAMIO.h
anpassen.

von Bernhard (Gast)


Lesenswert?

Danke Benedikt,

jetzt gibt's wieder viel zu lesen und zu staunen

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Falls jemand versuchen möchte DRAMs zu verstehen, dann habe ich hier was
schönes:
Ein ausführliches Datenblatt von Siemens auf deutsch !
Sowas ist heute selten, vor allem so ausführlich und gut erklärt.

von Markus Maussner (Gast)


Lesenswert?

abo

von Sepp (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Atmega8 A. (atmega8) Benutzerseite


Lesenswert?

@ Benedikt

Kannst du mir mal alle Unterlagen schicken, die man braucht um das
Kapazitätsmessgerät von Elem-Chan zu bauen?

Wär dir echt dankbar, die Seite von ihm/ihr ist nämlich down ...

von Atmega8 A. (atmega8) Benutzerseite


Lesenswert?

achso

atmega8 (ad) freenet (pungt) de

wenn noch jamand anderes etwas von der Seite hat ... wir können die
Seite ja wiederbeleben.
z.B.: www.elm-chan.de.vu

von Benedikt (Gast)


Lesenswert?

Bei mir geht die Seite wunderbar.

von Dirk Broßwick (Gast)


Lesenswert?

Also bei mir ist die seit unter http://elm-chan.org/ super zu erreichen
...

von Atmega8 A. (atmega8) Benutzerseite


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

von Paul Baumann (Gast)


Lesenswert?

Ich habe auf Deinen 2.Link geklickt und war bei Elm Chan "zu Hause"?!

Geht doch. ?-)

MfG Paul

von Benedikt (Gast)


Lesenswert?

Elm Chan hat irgendeinen Schutz drin, der verhindert dass man die
gesamzte Seite runterläd. Dann kommt man auf diese Seiten.

von Atmega8 A. (atmega8) Benutzerseite


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.

von Hauke Radtki (Gast)


Lesenswert?

Hab die gleiche IP aber bei mir geht die Seite ohne Probleme

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Ich habs geschafft ein SIMM modul anzusteuern (die wie sie aus alten PCs 
kommen) zumindest der RAM test am anfang geht schon, mehr hab ich noch 
nicht probiert. Wenn jemand das Platinenlayout haben will oder das 
bisherige Programm soll sich einfach melden

von Bernhard S. (bernhard)


Lesenswert?

Hallo Hauke,

> Wenn jemand das Platinenlayout haben will oder das
> bisherige Programm soll sich einfach melden

Ich würde mich brennend dafür interessieren :)

Gruß

Bernhard

von Atmega8 A. (atmega8) Benutzerseite


Lesenswert?

Hey, cool ...

Wär toll wenn du mir das Platinenlayout(Eagle?) geben würdest und 
vielleicht noch dazu schreibst welche Bezeichnung der Speicherchip hat.

Du machst das doch alles in C oder ... ?
Wenn ja, dann kannst du mir ein Päckchen packen mit Layout + bisherigem 
Prog.

lg

von Hauke R. (lafkaschar) Benutzerseite


Angehängte Dateien:

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.

von Bernhard S. (bernhard)


Lesenswert?

Hallo Hauke,

leider besteht Dein Assemblerprogramm nur aus 2 Zeilen Programmcode ;)

Könntest Du bitte den Schaltplan und das Layout als PDF oder JPG o.ä. 
dazulegen?

Leider gehöre ich auch zu den wenigen, die kein eagle besitzen.


Danke


Bernhard

von Hauke R. (lafkaschar) Benutzerseite


Angehängte Dateien:

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

von Hauke R. (lafkaschar) Benutzerseite


Angehängte Dateien:

Lesenswert?

...

von Hauke R. (lafkaschar) Benutzerseite


Angehängte Dateien:

Lesenswert?

....

von Bernhard S. (bernhard)


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

von Hauke R. (lafkaschar) Benutzerseite


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.

von Bernhard S. (bernhard)


Lesenswert?

@Hauke,

Danke für Deine Erläuterungen,

Du hast Recht, die "alten" SIMM Module sind zu verwenden, haben nur 30 
Pins, lassen sich sicherlich auch gut löten.

http://region-online.de/technik/lexikon/simm30.htm

von Hauke R. (lafkaschar) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier mal n paar Bilder von der Platine und meinen Ram Modulen

von Hauke R. (lafkaschar) Benutzerseite


Angehängte Dateien:

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.

von Hauke R. (lafkaschar) Benutzerseite


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

von Benedikt K. (benedikt)


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.

von Bernhard S. (bernhard)


Lesenswert?

Hallo Benedikt
Hallo Hauke

Respekt !!!

Habe mal bei mir etwas aufgeräumt und siehe da, ein alter PC mit SIMM30 
Modulen ist zum Vorschein gekommen.

Meine Frage: gibt es irgenwo Fassungen für diese SIMMS, wie heißen diese 
?

Bernhard

von Benedikt K. (benedikt)


Lesenswert?

Ich löte die immer aus alten Mainboards aus. Reichelt hatte die bisher 
auch, seit kurzem aber anscheinend nicht mehr. Unter SIMM Fassung findet 
man noch den leeren Ordner.
Alternative: Pinleisten an das Modul anlöten und direkt in die Platine 
einlöten oder die passende Buchsenleisten verwenden.

von Hauke R. (lafkaschar) Benutzerseite


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.

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Mensch, wieso ahben die dinger eigentlich keinen OE pin? wieso wurde der 
nicht rausgeführt? -.-
So kann man nämlich keinen ReadModifyWrite zyklus durchführen. :(

da bleibt wohl nur noch datenblatt raussuchen, pins vom PCB trennen  und 
kleines kabel verlegen ;)

von Benedikt K. (benedikt)


Lesenswert?

Warscheinlich wird RMW bei einem PC nie verwendet. Den OE Pin wollte ich 
schonmal rauslegen, da aber er Pin direkt unter dem DRAM zur 
Massefläsche (4 Layer Platine !) durchkontaktiert war, habe ich es doch 
besser gelassen.

von Bernhard S. (bernhard)


Lesenswert?

Hallo Hauke,
HALLO Benedikt,

könnt Ihr mir eine gute allgemene Beschreibung (deutsch) über DRAMs 
empfehlen ?

Bernhard

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Deutsch könnte höchstens bei Infineon zu finden sein. Aber die heißen 
jetzt Quasimodo oder so ähnlich. Ansonsten sind die englischen 
Applikationen von Micron, wie oben von Hauke zitiert, sehr ausführlich 
und auch für ältere DRAM-Ausführungen noch zu finden.

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Quasimodo heißt Qimonda:
http://de.wikipedia.org/wiki/Qimonda
http://www.qimonda.com/sitemap.html
aber die sprechet elles außer hochdeitsch
besser gesagt nur Englisch

von Benedikt K. (benedikt)


Lesenswert?

Das einzige was ich auch deutsch habe ist das hier:
http://www.mikrocontroller.net/attachment/8349/DRAM_Beschreibung.zip

Aber da liest sich ein englisches Datenblatt meiner Meinung nach 
leichter, zumindest wenn man mit den Begriffen vertraut ist. Die 
deutschen Übersetzungen versteht man erst nach mehrmaligem Lesen.

von Bernhard S. (bernhard)


Lesenswert?

Ich freue mich immer, wenn ich mir mit einem deutschen Text einen groben

Überblick verschaffen kann,

wenn dann noch einige Programmschnipsel zum besseren Verständnis 
vorhanden

sind, da kann das studieren der engl. Datenblätter richtig Spaß machen 
;)

von Bernhard S. (bernhard)


Lesenswert?

@Hauke
@Benedikt

kann es vielleicht sein, dass die Daten-Ausgänge der SIMM-30 Module sehr 
hochohmig sind ?

Hab gerade mal eine LED + 470 Ohm von +5V gegen einen Daten-Pin 
geschaltet,
sofort wurden die Daten zwischen µC und SIMM-Modul nicht mehr korrekt 
übertragen.


Bernhard

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Das hab ich nicht weiter gemessen, ich lese die daten mit 
ausgeschalteten Pullups ein. Gab bei mir keine Probleme.

von Benedikt K. (benedikt)


Lesenswert?

Eigentlich sollten das normale CMOS Ausgänge sein, die auch TTLs treiben 
können (also definitiv <100Ohm Ausgangswiderstand).
Vermutlich beeinflusst das das Timing. Welche Software verwendest du ?

von Bernhard S. (bernhard)


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



von Bernhard S. (bernhard)


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



von Benedikt K. (benedikt)


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

von Benedikt K. (benedikt)


Angehängte Dateien:

Lesenswert?

Mist, Dateianhang vergessen.

von Bernhard S. (bernhard)


Lesenswert?

Benedikt, danke für Deine Erklärungen :)


> Ich hatte sogar mal ein Termometer damit gebaut....

....grins... was man(n) alles so machen kann


Bernhard



von Bernhard S. (bernhard)


Lesenswert?

Wenn man mehrere SIMM-30 Module an einem µC betreiben möchte,

könnten doch die Adress und Datenleitungen miteinander verbunden werden,

nur RAS, CAS und WE müssten separat zu den SIMM-Modulen geführt werden,

wie denkt Ihr darüber?


Bernhard

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Ja, das ist richtig.
Noch einfacher wirds, wenn man an die CE leitung dran kommt.
Jedoch wurden in alten PCs die Module so betrieben, dass 16bit 
Datenbreite ausgenutzt wurden (also die Datenleitungen nicht parallel) 
dann musste nur noch CASH und CASL unterschieden werden (eigentlich wie 
das höchstwertige adressbit)

von Bernhard S. (bernhard)


Lesenswert?

> Noch einfacher wirds, wenn man an die CE leitung dran kommt.

welcher Pin soll den das am SIMM-30 Modul sein?


Wozu dient eigentlich der PIN 28 ("CAS8") ?

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

An die CE kommt man auf den Modulen selbst nicht dran ... leider. 
Genausowenig wie man an OE dran kommt, deswegen sind bei den modulen 
auch keine Read-Modify-Write zyklein möglich.

D8 ist glaub ich als Parity-bit gedacht und CAS8 ... ich hab keine 
ahnung ;) wird aber irgendwas mit D8 zu tun haben denke ich.

von Benedikt K. (benedikt)


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.

von Bernhard S. (bernhard)


Lesenswert?


Wie ist das eigentlich,

haben die SIMMS immer die gleiche Bussbreite für ROW und COUNT?


Bsp:

Ich habe hier ein 1MB SIMM30 angeschlossen,
10 Bit für ROW und 10 Bit für COUNT.

Anzahl SpeicherBytes = 1024 x 1024 = 1.048.4576 Bytes


Gibt es auch SIMMs mit 11 Bit für ROW und 10 Bit für COUNT ?

von Benedikt K. (benedikt)


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.

von Bernhard S. (bernhard)


Angehängte Dateien:

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

von Magnus Müller (Gast)


Lesenswert?

@ Bernhard:

...falscher Thread ;)

Gruß,
Magnetus

von Bernhard S. (bernhard)


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

von Daniel S. (sany)


Lesenswert?

Wie würde denn eine Anschlussbelegung für einen Samsung 220 - K4S5616320 
TL 75 aussehen?

von Ben U. (ben-utzer)


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

von Benedikt K. (benedikt)


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.

von Ben U. (ben-utzer)


Lesenswert?

Hi, danke, habe den Fehler endlich gefunden, die Masseverbindung zum Ram 
war wohl zu hochohmig, jedenfalls läufts jetzt mit einer zusätzlichen 
Masseleitung...


Super Code!!

von michl (Gast)


Lesenswert?

Hi Benedikt,

wie groß schätzt du denn den Aufwand ein den Code für einen VRAM 
anzupassen?
Oder hast du das vielleicht schon mal gemacht?

Danke
Michael

von Benedikt K. (benedikt)


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.

von michl (Gast)


Lesenswert?

Hi Benedikt,

ich hab ein paar tc524258bz ergattern können, die jetzt auf neue 
Aufgaben warten. Ich kenne auch deine 8051-Lösung, von der ich aber 
wegkommen möchte (nicht vom 8051, aber vom TTL-Grab außenrum). Dann werd 
ich mich mal in AVR-Assembler einarbeiten...

Danke
Michlael

von Benedikt K. (benedikt)


Lesenswert?

Kennst du das hier schon?
Beitrag "Grafik-LCD Controller mit AVR und VRAM"

Ist zwar auch wieder auf eine bestimmte Anwendung optimiert, aber 
komplett in C wenn ich das richtig sehe.

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.