PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DRAM (Simm Modul) am Atmega8



Mehto
07.08.2005, 22:31
Hi!

Da ich ja demnächst vor hab ein 640x400 Grafik Diplays anzusteuern braucht der µC Speicherplatz, viel Speicherplatz. Vor allem Ram.

Das gute ist das ich eine Menge Speicherriegel und alte Mainboards auf dem Speicher rumliegen habe.
Auf dem Mainboards befinden sich zwar SRAM 's die leichter anzusteuren sind als die alten Arbeitspeicher, aber die haben leider alle nur 32KB die gerade für eine Displays füllung reichen. [(640x400)- (32x89= 0 KB ]

Also eignen sich für den Speicher am besten die alten DRAM Simm Module mit bis zu 16MB! 16Mb Riegel hab ich zwar keine rumfahren, dafür aber welche mit ca. 512 KB oder 1MB. :)

Mit einem klienen selbsteglötetem Adapter hab ich das ganze auch gleich mit dem MyAvr Board getstet. zum testen, und weil der Atmega nicht so viele Ports hat, kann ich im Speicher nur einen kleinen Adressbereich auswählen, die restlichen Adresspins sind einfach auf Vcc gelegt.
Das ganze funktioniert wunderbar!

Jetzt kommt die eigentliche Frage:
DRAM's muss man ja normalerweise auffrischen, zuerst hab ich das auch gemacht, doch nach ein paar Experimenten behält der Simm seinen Inhalt über 8 sec! In dieser Zeit wird wirklich in keiner Weise auf dem Ram zugegriffen was diese auffrischen könnte.

Wie ist das möglich das dieser seinen Inhalt so lange ohne auffrischen behält? Ist das einfach nur Glück und für eine ernste verwendung zu unsicher oder hab ich da einen Spezialriegel mit Sram?

Der Riegel ist, so weit ich weiß ein normales SIMM Modul.
Zugriffszeit beträgt laut aufdruck 70ns von smti.


Ich wert das ganze Projekt noch erweitern und dann wie immer eine kleine Beschreibung auf meiner Page veröffentlichen.

Sollte es wirklich Interesse geben dann meldet euch bitte, dann werd ich vieleicht eine größere Anleitung dazu schreiben.

Das ganze ist später dann auch für die Grafik Display ansteuerung gedacht, wobei man bis zu 16MB Ram auch für andere zwecke benutzen kann. ;)


Gruß,
Mehto


P.s.: Ich hoffe das ganze funktioniert morgen noch, immerhin ist das ganze erst heute Abend entstanden ;) . Ich hoff auch das ich nicht noch irgend etwas wichtiges vergessen habe, ich dachte immer das die Rammspeicher aus dem PC nicht oder schwehr für den µC verwendbar wären.

Mehto
08.08.2005, 11:50
Wunder was, das Teil funktiniert heute noch, also war es kein Traum :)

Ich ha jetzt noch ein paar Fotos gemacht.
Da der Atmega8 ja nicht so viele Ausgänge hat hab ich ersteinmal nur die untersten drei Adressleitungen des Ram's angschlossen, die anderen 9 wurden auf Masse gelegt.
Damit brauch ich für den Ram den Kommpleten PortD und die 6 Pins von PortB.

An PortC hab ich einen Taster mit Pullup Widerstand und Led's zur Signal ausgabe.

Die Testschaltung funktioniert folgender maßen:

Zuerst werden zwei Bytes an das Ram geschickt.

Dann wird ein Taster überprüft, und je nach zustand lieste der µC das erste oder das zweite Byte aus dem Ram und zeigt es an PortC an den Led's an.

Dann wartet der µC kurz und überprüft wieder den Taster und gibt wieder das entsprechende byte aus.
Es werden also keine Daten mehr an das Ram geschickt. Das erstaunlich ist jetzt das in den µC nicht auffrische muss.
Ich werd mir mal einen Adapter mit einem Sockel basteln und dann mal verschiedene Simms ausprobieren.

Der Code ist ganz simple programmiert, da kann noch einiges gekürtzt werden, aber für den Anfang reicht es.

Mit den drei Adressleitungen komm ich übrigens bis 64 Byte externen Ram, das für Testzwecke voll ausreichend ist.
Für die vollen 16Mb würde ich 12 Leitungen brauchen, das müsste ich dann aber mit einem Atmega32 oder mit einem ähnlichen µC machen.

Gruß,
Mehto


Bildchen:

http://home.arcor.de/svenlissel/elektronik/dram/dram1.jpg
http://home.arcor.de/svenlissel/elektronik/dram/dram2.jpg
http://home.arcor.de/svenlissel/elektronik/dram/dram3.jpg

Quellcode gibt es hier:
http://home.arcor.de/svenlissel/elektronik/dram/DRAM1.ASM

Andun
08.08.2005, 18:28
FETT!!!

Die Idee find ich klasse. Ich hab im Keller auch noch so ne Dinger rum liegen.

Also wenn ich mir mein 1. Robo baue, dann kommt da auch so ein Ram rein. Ob ihc ihn brauche oder nicht. :D hehe

Ne, aber mal im Ernst. Ich hab im Netz schon gesucht, aber nicht wirklich was gefunden, wie man das Ding jetzt eigentlich anspricht oder anschließt. Hast du da mal Links für mich???

Ihc hab nur eine Seite gefunden, wo die Eigenschaften meines Ram Riegels drauf stehen. (GM791000S-80)

Allerdings wüsste ich nicht, wie ich es jetzt anshcließen sollte. Auch wenn ich es noch nicht kann, würde ich mir die Theorie doch gerne mal durchlesen.

Andun

Mehto
08.08.2005, 18:45
Hi!

Ich hätt dir hier mal ein paar Links:
http://mitglied.lycos.de/bk4/8051.htm
und hier die Anschlussbelegung:
http://www.ulrichradig.de/site/infos/pdf/SIMM.pdf
Den Rest hab ich aus Büchern nachgeschlagen.

Der Speicher braucht leider viele Pins und ist wenn er nicht wirklich gebraucht wird nicht zu empfehlen. es sei den du nimmst den Atmega 128, der hat 60 I/O's :-)

Je nach dem wie viel Speicher du benutzen möchtest brauchst du mehr oder weniger Pins. Der ram hat 12 Adresspins für 16.777.216 Byte, wenn du aber z.b. nur 65.536 Byte brauchst benötigst du nur 8Pins und legst die anderen auf Masse.

Ausrechnen kanst du dir das so:

2 hoch (Pinzahl) *2 (Adresse ist gemultiplext)= verfügbare Bytes

Aber wie gesagt müssen Drams normalerweise Aufgefrischt werden, bei klappts aber auch ohne.
Ich nehm an das die Spannung der kleinen Kondensatoren doch länger als 10ms sich hält und beim lesen nach ca. 5 sec immernoch hoch genug um als High erkannt zu werden. Beim lesen erfolgt übrigens so weit ich weis automatisch eine Auffrischung.

Gruß,
Mehto

Andun
08.08.2005, 19:26
Ah. OK. Danke.

Ich sehs mir mal an.

Mehto
08.08.2005, 21:42
So, ich hab jetzt nochmal einen Adapter mit Sockel gemacht, dadurch kann ich die Rams auch austauschen.

Von 6 Ram's gine einer nicht und ein anderer nicht zuverlässig. Die anderen gingen beim kurztest aber einwandfrei, trotz des beim Test sehr langsammen Auffrischen von ca. 200ms, wobei da einfach nur gelesen wurde und nicht speziell aufgefrischt wurde.
Ich werd morgen mal schauen wo denn die absulute Grenze liegt bei der die Rams ihren Inhalt "vergessen".

Wäre schön wenn mir jemand noch sagen könnt warum die Riegel auch mit kaum Auffrischen so gut funktionieren.

Hier noch zwei Bilder vom Adapter. Das Auslöten des Sockels war eine ganz schöhne Arbeit, ist vieleicht besser wenn man den irgendwo kauft anstatt aus alten Mainboards auszulöten ;) .

http://home.arcor.de/svenlissel/elektronik/dram/dram10.jpg
http://home.arcor.de/svenlissel/elektronik/dram/dram11.jpg


Gruß,
Mehto

KnutKnutsen
09.08.2005, 00:17
@Metho: Du hast Recht, die Information ist sehr fluechtig und muss aufgefrischt werden. Allerdings haben meiner Information nach die Speicherriegel intern einen Mechanismus, der das uebernimmt.

Gute Idee uebrigens!

nestandart
09.08.2005, 07:12
die SIM sockel gabs mal beim Conrad ...

linux_80
18.08.2005, 23:39
Hallo.
will mich auch mal einmischen,
wegen dem Refresh,
ich hab auch gleich meinen 386er ausgegraben

Welche Beschriftung haben deine SIMMs ?
Wenn ein Refresh nötig ist, gibts da auch verschiedene Tricks, um nicht immer alle Bytes komplett anzusprechen und trotzdem zu refreshen, geht dann auch schneller. Es gibt auch ICs die sich selbst refreshen, wenn man dieses anstösst.
Wenn man nach der Pinbelegung der Speicher-ICs sucht, findet man auch die unterstützten Refreshmethoden, gibt ja so allerhand davon.

PS:
Ich hab zu 286er Zeiten da schon mal mit rumprobiert, und den refreshtimer soweit hochgestellt, das im Prinzip fast nicht mehr refresht wurde, und es klappte immer noch alles, da wird dann die CPU schneller (bei 25MHz merkte mans noch, weil die CPU selbst refreshte), allerdings war der Transfer zur HD langsamer.

Grusim
19.08.2005, 08:25
War das nicht irgendwie so, das bei jedem Zugriff auf die Speicherriegel, die Riegel sich selbst refreshten? Und damit bei dem Refresh - Vorgang nichts durcheinander kommt gibt es ja die Waitstates. Und ich kann mir gut vorstellen das eine interne Logik immer wieder auch ohne Zugriff einfach refresht um den Inhalt zu halten. Weil es kann ja sein das in einem Bereich Datenliegen, die man wirklich mal mehrere Sek nicht ansprechen muss von seinem Prog. Die dürfen ja auch nicht verfallen.

Bei Fehlern nicht schlagen! ;)

eFFex
19.08.2005, 09:23
Und ich kann mir gut vorstellen das eine interne Logik immer wieder auch ohne Zugriff einfach refresht um den Inhalt zu halten. Weil es kann ja sein das in einem Bereich Datenliegen, die man wirklich mal mehrere Sek nicht ansprechen muss von seinem Prog. Die dürfen ja auch nicht verfallen.

hab zwar keine Ahnung (das klingt nicht gut...sagen wir ich hab ne Vermutung ;) ), aber ich könnte mir auch vorstellen, dass das der MemoryController mitübernehmen könnte.....

Mehto
19.08.2005, 10:00
Hi!

Also, auf meinen Simm's steht eigentlich nichts besonderes drauf.

Auf einem steht das:

TI -70
TMS44100DJ
OBI 4184 AB

Ich kann da nur herauslesen das er eine kapazität von 1000K x 9 hat. (1MB mit Parity.)
Sowie eine zugriffszeit von 70ns.
Was die Bauhauskette da zu suchen hat weis ich nicht ;)

Die meisten Simm's refreshen sich wie gesagt auch, wenn man nur lesen tut.
Die Simm's werde glaube ich aber auch nur Zeileweise refresht.
Bisher hab ich den Test nur mit zwei Speicheradressen gemacht. (beide in der gleichen Zeile), jedoch war der Abstand zwischen dem lesen mehrere Sekunden. extra refresht hab ich nicht.

Ich bin ja gerade dabei mir einen kleinen Displaycontroller für Grafikdisplays (640x400dot) zu programmieren. Wenn ich damit halbwegs fertig bin werd ich mich mal wieder den Simm's zuwenden. Vielicht versuch ich dann einfach mal ein kleines Testprogramm zu entwickel was den Simm auf alle Speicherstellen testet.

Ich muss mir jetzt aber erstmal einen Atmega 16 oder Atmega32 holen um überhaupt bei dem Grafik Display weitermachen zu können. ;)
Das ganze kann also noch ein wenig dauern. :-(


Gruß,
Mehto




*/ EDIT: Kann es sein das der oben genannte Simm doch 4MB hat? Da steht ja 4100 nicht 1000 am Ende?

pebisoft
19.08.2005, 10:01
kannst du mal einen schaltplan posten vom speicheranschluss von 64kbyte bis 16mb. danke.
mfg pebisoft

Mehto
19.08.2005, 10:19
Einen Schaltplan hab ich noch nicht erstellt.
Ist auch nicht weiter schwierig den Anzuschließen.

Die acht I/O's an PortD, /CAS und /WE an PORTB
Und da ich nur einen Atmega8 da hatte hab ich auch nur zwei Adressleitungen noch an PortB gehängt.
Den Rest auf Masse und Vcc natürlich an +5V.

Den Link zur Anschlussbelegung findest du oben.

Für 65.536byte brauchst du nur 8 Datenleitungen anzuschlließen, für 16Mb alle 12.

Gruß,
Mehto

linux_80
20.08.2005, 01:56
Auf einem steht das:

TI -70
TMS44100DJ
OBI 4184 AB

*/ EDIT: Kann es sein das der oben genannte Simm doch 4MB hat? Da steht ja 4100 nicht 1000 am Ende?

wenn ich bei alldatasheets suche:
http://pdf.alldatasheet.com/datasheet-pdf/view/97569/TI/TMS44100.html
meinen die:
Organization . . . 4194304 × 1

Wieviele ICs sind da drauf, 8 + 1, dann sollten es in diesem Fall 4MB sein !?

Im PDF steht auch wie man auf die schnelle einen self-refresh auslösen kann, und es nicht selber machen muss.

Normalerweise kümmert sich auf einem Motherboard der Memory-Controller um die Refresh-sachen.

Die WaitStates sind dafür da, das der Memory-Controller die CPU hinhalten kann bis die Daten gültig sind (hier im Thread gibts den aber nicht).

Mehto
20.08.2005, 10:01
Hallo linux_80,

vielen Dank für das Datenblatt.
Ja, es sind neun IC's drauf. Vieleicht find ich ja den Memory-Controller auf dem Mainboard, es sei denn er ist irgendwo intigriert.

Vielen Dank für deine Hilfe!
Ich werd mir mal gleich das Datenblatt ausdrucken und mal näher anschauen.

Gruß,
Mehto

Mehto
20.08.2005, 10:13
Hallo linux_80,

vielen Dank für das Datenblatt.
Ja, es sind neun IC's drauf. Vieleicht find ich ja den Memory-Controller auf dem Mainboard, es sei denn er ist irgendwo intigriert.

Vielen Dank für deine Hilfe!
Ich werd mir mal gleich das Datenblatt ausdrucken und mal näher anschauen.

Gruß,
Mehto


*/Edit: Verdammt noch mal, wiso hab ich das denn jetzt zweimal gesendet? :Haue

linux_80
20.08.2005, 15:08
Bevor Du dir zuviel Arbeit machst, und dann irgendwann doch ein PC-XT/AT oder ähnliches rauskommt, wärs evtl. interessant gleich einen PC zu programmieren,
ein altes DOS drauf ... ein paar LPT-Ports reingesteckt ...

aber da ja der Weg das Ziel ist :-)

bei einem Memory-Controller musst evtl. auch noch Einstellungen vornehmen, damit der auch was richtiges macht (zB. Waitstates)
diesen Spricht man über die IO-Ports an,
um dies zu beschalten, gehen dann bald wieder die IO-Pins des AVR aus.
Bei einem 286er kann der Mem-Ctrl 84 Pins aufweisen. (24 Adr-Pins usw.)

Welches Board verwendest Du zum ausschlachten ?

Ich hatte da doch noch irgendwo ein 286er Board rumliegen, :-k
das finde ich jetzt nicht, dann hätte man da auch mal gucken können.
Hab allerdings 2 alte Siemens 286er gefunden, und da sind keine SIMMs drauf sondern nur die Speicher-ICs direkt, und lauter 74er ICs, keine Integrierten Controller, ausser was Intel so erfunden hat.

Dann wollte ich noch anmerken, das der Mega128 externen Speicher ansprechen kann, dann könnte man diese Adress- und DatenPins für solche sachen verwenden.

Mehto
20.08.2005, 15:34
Bevor Du dir zuviel Arbeit machst, und dann irgendwann doch ein PC-XT/AT oder ähnliches rauskommt, wärs evtl. interessant gleich einen PC zu programmieren,
Es geht mir nicht darum einen kleinen PC zu bauen, sondern einfach Spaß an der Sache zu haben ;)
Ist irgendwie geil so einen Speicherriegel anzusteuern... :D

Das mit dem Memory-Controller lass ich mal lieber, das war nur so eine Idee...

Ich hab hier ein 486er Board.


Den Atmega128 würd mich echt mal reizen. Leider ist der mir zu klein, und da ich keine gelegenheit zum Ätzen hab schreck ich vor dem immer noch zurück. Es gibt zwar auch Adapter, die sind mir aber irgendwie für 30,- Euro noch zu teuer. :-(
Vieleicht irgendwann einmal...

Gruß,
Mehto

linux_80
20.08.2005, 16:26
Auf einem 486er Board wird sonst nix mehr drauf sein was man brauchen kann, evtl. gibs auf deinem Board noch das CMOS (146818), mit RTC und paar Byte RAM, und den Tastaturbaustein (i8042), den man verwenden könnte, die sind evtl. nicht ganz so kompliziert anzusteuern.

Starchild
14.05.2006, 21:53
Hat jemand schon mal probiert die RAM über einen Binärzählerbaustein anzusteuern?
Ich brauche für mein aktuelles Projekt auch viel RAM (>8MBit) , habe aber leider nur einen Mega168 mit 20 freien Pins zur Verfügung.