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
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
Das ist beeindruckend. Sehe ich das richtig? Er klebt die Controller mit einem doppelseitigen Klebeband auf eine Lochrasterplatine? Gruß Gerd G.
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 !
Hier mal ein kleiner Audiorecorder mit einem 2MB DRAM und das Layout für Adapterplatinen für 256kx16 und 1Mx16 DRAMs.
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)
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
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
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.
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
Hier mal das Komplettpacket mit Routinen für DRAMs mit und ohne OE und ein paar Layouts für Adapterplatinen.
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.
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.
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
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.
@ 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 ...
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
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 ...
Ich habe auf Deinen 2.Link geklickt und war bei Elm Chan "zu Hause"?! Geht doch. ?-) MfG Paul
Elm Chan hat irgendeinen Schutz drin, der verhindert dass man die gesamzte Seite runterläd. Dann kommt man auf diese Seiten.
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.
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
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
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
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.
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
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? -.-
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
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.
@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
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.
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 ;)
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.
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
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.
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.
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 ;)
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.
Hallo Hauke, HALLO Benedikt, könnt Ihr mir eine gute allgemene Beschreibung (deutsch) über DRAMs empfehlen ? Bernhard
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.
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
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.
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 ;)
@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
Das hab ich nicht weiter gemessen, ich lese die daten mit ausgeschalteten Pullups ein. Gab bei mir keine Probleme.
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 ?
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
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
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...
Benedikt, danke für Deine Erklärungen :)
> Ich hatte sogar mal ein Termometer damit gebaut....
....grins... was man(n) alles so machen kann
Bernhard
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
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)
> 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") ?
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.
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.
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 ?
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.
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
@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
Wie würde denn eine Anschlussbelegung für einen Samsung 220 - K4S5616320 TL 75 aussehen?
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
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.
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!!
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
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.
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
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.