www.mikrocontroller.net

Forum: Codesammlung 2MB DRAM an AVR

Autor: Benedikt (Gast)
Datum: 23.10.2004 09:36
Angehängte Dateien:

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
Autor: Thorsten (Gast)
Datum: 23.10.2004 16:16

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
Autor: Elektrikser (Gast)
Datum: 23.10.2004 20:41

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

Gruß Gerd G.
Autor: Benedikt (Gast)
Datum: 23.10.2004 21:07

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 !
Autor: Benedikt (Gast)
Datum: 09.03.2005 09:28
Angehängte Dateien:

Hier mal ein kleiner Audiorecorder mit einem 2MB DRAM und das Layout für
Adapterplatinen für 256kx16 und 1Mx16 DRAMs.
Autor: Benedikt (Gast)
Datum: 25.06.2005 12:23
Angehängte Dateien:

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)
Autor: pebisoft (Gast)
Datum: 26.07.2005 11:32

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
Autor: Benedikt (Gast)
Datum: 14.08.2005 09:36
Angehängte Dateien:

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
Autor: Benedikt (Gast)
Datum: 15.08.2005 14:27
Angehängte Dateien:

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.
Autor: Bernhard (Gast)
Datum: 15.08.2005 20:28

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
Autor: Benedikt (Gast)
Datum: 16.08.2005 15:14
Angehängte Dateien:

Hier mal das Komplettpacket mit Routinen für DRAMs mit und ohne OE und
ein paar Layouts für Adapterplatinen.
Autor: Benedikt (Gast)
Datum: 16.08.2005 17:28
Angehängte Dateien:

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.
Autor: Bernhard (Gast)
Datum: 16.08.2005 19:01

Danke Benedikt,

jetzt gibt's wieder viel zu lesen und zu staunen
Autor: Benedikt (Gast)
Datum: 16.08.2005 20:39
Angehängte Dateien:

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.
Autor: Markus Maussner (Gast)
Datum: 06.10.2005 16:20

abo
Autor: Sepp (Gast)
Datum: 09.11.2005 10:58

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
Autor: Rufus t. Firefly (rufus) (Moderator) Benutzerseite
Datum: 10.11.2005 14:12

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.
Autor: Atmega8 Atmega8 (atmega8) Benutzerseite
Datum: 20.09.2006 13:14

@ 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 ...
Autor: Atmega8 Atmega8 (atmega8) Benutzerseite
Datum: 20.09.2006 13:18

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
Autor: Benedikt (Gast)
Datum: 20.09.2006 13:43

Bei mir geht die Seite wunderbar.
Autor: Dirk Broßwick (Gast)
Datum: 20.09.2006 21:55

Also bei mir ist die seit unter http://elm-chan.org/ super zu erreichen
...
Autor: Atmega8 Atmega8 (atmega8) Benutzerseite
Datum: 21.09.2006 12:19

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 ...
Autor: Paul Baumann (Gast)
Datum: 21.09.2006 12:30

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

Geht doch. ?-)

MfG Paul
Autor: Benedikt (Gast)
Datum: 21.09.2006 15:19

Elm Chan hat irgendeinen Schutz drin, der verhindert dass man die
gesamzte Seite runterläd. Dann kommt man auf diese Seiten.
Autor: Atmega8 Atmega8 (atmega8) Benutzerseite
Datum: 21.09.2006 22:54

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.
Autor: Hauke Radtki (Gast)
Datum: 21.09.2006 23:54

Hab die gleiche IP aber bei mir geht die Seite ohne Probleme
Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum: 10.01.2007 13:34

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
Autor: Bernhard S. (bernhard)
Datum: 10.01.2007 13:54

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
Autor: Atmega8 Atmega8 (atmega8) Benutzerseite
Datum: 10.01.2007 18:14

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
Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum: 11.01.2007 01:23
Angehängte Dateien:

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.
Autor: Bernhard S. (bernhard)
Datum: 11.01.2007 03:27

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
Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum: 11.01.2007 14:10
Angehängte Dateien:

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? -.-
Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum: 11.01.2007 14:12
Angehängte Dateien:

...
Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum: 11.01.2007 14:15
Angehängte Dateien:

....
Autor: Bernhard S. (bernhard)
Datum: 11.01.2007 21:13

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
Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum: 11.01.2007 22:00

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.
Autor: Bernhard S. (bernhard)
Datum: 12.01.2007 13:22

@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
Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum: 12.01.2007 16:21
Angehängte Dateien:

Hier mal n paar Bilder von der Platine und meinen Ram Modulen
Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum: 15.01.2007 00:27
Angehängte Dateien:

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.
Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum: 15.01.2007 00:45

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 ;)
Autor: Benedikt K. (benedikt) (Moderator)
Datum: 15.01.2007 08:22

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.
Autor: Bernhard S. (bernhard)
Datum: 15.01.2007 11:25

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
Autor: Benedikt K. (benedikt) (Moderator)
Datum: 15.01.2007 12:31

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.
Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum: 15.01.2007 16:03

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.
Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum: 16.01.2007 22:38

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 ;)
Autor: Benedikt K. (benedikt) (Moderator)
Datum: 17.01.2007 08:11

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.
Autor: Bernhard S. (bernhard)
Datum: 17.01.2007 10:05

Hallo Hauke,
HALLO Benedikt,

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

Bernhard
Autor: Christoph Kessler (db1uq) (Gast)
Datum: 17.01.2007 10:19

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.
Autor: Christoph Kessler (db1uq) (Gast)
Datum: 17.01.2007 10:23

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
Autor: Benedikt K. (benedikt) (Moderator)
Datum: 17.01.2007 11:47

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

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.
Autor: Bernhard S. (bernhard)
Datum: 17.01.2007 12:25

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
;)
Autor: Bernhard S. (bernhard)
Datum: 26.02.2007 14:51

@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
Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum: 26.02.2007 15:59

Das hab ich nicht weiter gemessen, ich lese die daten mit
ausgeschalteten Pullups ein. Gab bei mir keine Probleme.
Autor: Benedikt K. (benedikt) (Moderator)
Datum: 26.02.2007 16:52

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 ?
Autor: Bernhard S. (bernhard)
Datum: 27.02.2007 00:16

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


Autor: Bernhard S. (bernhard)
Datum: 27.02.2007 01:44


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


Autor: Benedikt K. (benedikt) (Moderator)
Datum: 27.02.2007 08:05

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...
Autor: Benedikt K. (benedikt) (Moderator)
Datum: 27.02.2007 08:07
Angehängte Dateien:

Mist, Dateianhang vergessen.
Autor: Bernhard S. (bernhard)
Datum: 27.02.2007 13:56

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


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

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


Bernhard


Autor: Bernhard S. (bernhard)
Datum: 27.02.2007 23:35

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
Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum: 27.02.2007 23:45

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)
Autor: Bernhard S. (bernhard)
Datum: 27.02.2007 23:52

> 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") ?
Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum: 28.02.2007 07:30

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.
Autor: Benedikt K. (benedikt) (Moderator)
Datum: 28.02.2007 09:07

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.
Autor: Bernhard S. (bernhard)
Datum: 28.02.2007 13:54


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 ?
Autor: Benedikt K. (benedikt) (Moderator)
Datum: 28.02.2007 15:54

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.
Autor: Bernhard S. (bernhard)
Datum: 05.03.2007 14:57
Angehängte Dateien:

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
Autor: Magnus Müller (Gast)
Datum: 06.03.2007 14:48

@ Bernhard:

...falscher Thread ;)

Gruß,
Magnetus
Autor: Bernhard S. (bernhard)
Datum: 06.03.2007 19:59

@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
Autor: Daniel Steiner (sany)
Datum: 03.11.2007 19:24

Wie würde denn eine Anschlussbelegung für einen Samsung 220 - K4S5616320
TL 75 aussehen?
Autor: Ben Utzer (ben-utzer)
Datum: 21.05.2009 18:39

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
Autor: Benedikt K. (benedikt) (Moderator)
Datum: 21.05.2009 21:05

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/DRA...
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.
Autor: Ben Utzer (ben-utzer)
Datum: 22.05.2009 01:04

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!!
Autor: michl (Gast)
Datum: 06.06.2009 00:52

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
Autor: Benedikt K. (benedikt) (Moderator)
Datum: 06.06.2009 09:37

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.
Autor: michl (Gast)
Datum: 07.06.2009 20:04

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
Autor: Benedikt K. (benedikt) (Moderator)
Datum: 08.06.2009 08:01

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.

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate

Hinweis: der Originalbeitrag ist mehr als 6 Monate alt.
Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net