Archiv verlassen und diese Seite im Standarddesign anzeigen : wieviel ram maximal an avr?
hallo zusammen!
ich denke über ein projekt nach, dass ziemlich viel ram brauchen wird. wieviel kann ich maximal an einen avr dranhängen? ich habe auf www.kreatives-chaos.com gelsen das der ATmega128 128 kb ram haben soll. kann ich da zusätzlich noch externes ram dranhängen?
vielen dank!
gruss,
malte
Also wieviel internes Ram die haben erfährst du immer im Datenblatt. Bei Atmel gibts glaub ich sogar eine Aufstellung mit den verschiedenen Typen und ihren Features.
Mit einem AT90S8515 und seiner Megavariante lassen sich auch hardwaremäßig externes RAM addressieren (wird vom Befehlssatz unterstützt). Das Maximum hier liegt bei 64 kB.
Der Mega128 hat laut Datenblatt 'nur' 4 kB RAM. Die 128 kB sind Flash Speicher dienen als Programmspeicher. Auch beim Mega128 lassen sich 64kB externes SRAM addressieren.
Wenn du mehr PORTS opferst kannst du softwaremäßig auch mehr addressieren - allerdings musst du dann die Ansteuerung selbst schreiben. Dafür gibt es keine Befehle mehr im Befehlssatz.
Wozu brauchst du denn soviel SRAM?
Grüße
Flite
EDIT:
128 Byte bis 4 KByte RAM (bei manchen bis 64 KB RAM extern möglich)
2 - 128 KByte Programmspeicher
Das steht bei "Kreatives Chaos". Also 128 Byte - 4 kB RAM und 2-128 kB Flash
danke für die schnelle antwort!
ich denke über einen roboter nach (erstmal noch ganz unkonkret) der seine aussenwelt (raum) möglichst präzise intern repräsentieren soll. deshalb wollte ich von vorn herein wissen wo in sachen ram die obergrenze beim avr ist.
gruss,
malte
kein problem. du kannst daten aber auch im eeprom absichern. das dauert zwar etwas länger und lässt sich nicht unbegrenzt oft beschreiben, aber evtl. wäre das auch eine Möglichkeit.
Wenn du was genaueres weißt, kannst du dich ja nochmal melden. Dann schauen wir, was man da machen kann ...
Grüße
Flite
nochmal ne nachfrage:
ich habe mich gedanklich jetzt erstmal auf den mega8515 eingeschossen, den kann ich ja mit 16 MHz betreiben (und tempo is ja immer gut...) die frage ist nun natürlich: wie schnell muss das ram sein? vielleicht kann ja jemand sogar einen konkreten typ nennen, dann könnte ich mich schneller orientieren.
danke schonmal, gruss,
malte
Hallo malthy,
wie schnell muss das ram sein?
Vielleicht hilft es dir, wenn du weisst, das 1 Takt bei 16 MHz genau 62,5 Nanosekunden lang ist? ;)
Gruss, Michael
Also eine ATmega8 / 16 / 32 etc kann man auch bis 16 MHz takten, wenn man nicht die Stromsparvariante (L am Ende) nimmt, die auch beim 8516 nur bis 8MHz betrieben werden sollte.
zum Thema Speicher: Holger Klabunde hat da auch noch ne Variante auf seine Webseite CF-Cards:
http://home.t-online.de/home/holger.klabunde/avr/avrboard.htm
ATMega32 liest und schreibt CompactFlash und sendet die Daten über die serielle Schnittstelle zum PC. Man kann einzelne Sektoren auslesen und beschreiben oder auch schon einfache Befehle für FAT12/FAT16/FAT32 Dateisysteme ausführen. Näheres siehe readme.txt im ZIP-Archiv. Der ATMega32 braucht dazu KEIN externes RAM. Ist natürlich alles in C (AVR-GCC) geschrieben. In Assembler würde ich mir das nie antun.
Wenn der die Daten über ne Serielle Schnittstelle bekommt, bekommt man die auch (ausschnittsweise) in den internen RAM. Wenn Du an der Stelle mal mehr ins Detail gehst, hab ich an einem Projekt "Speicherung und Wiedererkennung der Robotter Umwelt" großes Interesse. Vielleicht lohnt sich zu dem Thema auch eine Art "Forumsstandard".
hallo!
zunächst: meine ideen sind noch ziemlich unausgegoren, deshalb kann ich vorerst noch nichts konkretes sagen. wenn ich mir ein bisschen klarer bin, werde ich die sache hier aber auf jeden fall zur diskussion stellen.
nochmal zum ram:
ich hab in der bascom hilfe einen kleinen schhaltplan gefunden der auf einem 62256 sram basiert. sehe ich es richtig, dass es sich dabei um einen 32K basutein handelt? wie würde denn eine 64K variante heissen? hat jemand vielleicht sogar ein link für einen schaltplan mit 64K? wäre super, bei meinen mittelmäßigen elektronikkenntnissen brauche ich immer ewig bis ich die dinge selbst geregelt kriege.
herzlichen dank für eure unterstützung schonmal! gruss,
malte
Hallo malthi,
nimm 2x 62256 und schalte sie parallel. Dann legst du einfach A15 an den ersten Chip Select und über einen Inverter an den zweiten Chip Select. Schon hast du 64k.
Gruss, Michael
super!
das ist mal 'ne klare ansage! danke dafür!
vielleicht darf ich darüber hinaus doch noch mal das thema "zugriffszeit" aufwärmen. wenn 1 takt bei 16 MHz ca. 62 ns dauert, reicht es dann wenn mein ram auch so um die 60 ns schnell ist, oder muss noch deutlich schneller sein? und das praktische problem: woher bekomme ich so schnelle 62256? die bei reichelt in dip version haben 80 ns, wenn ich mich recht errinere.
dank und gruss,
malte
Hallo Gast (malthy?),
woher bekomme ich so schnelle 62256?
hmm, reichelt hab ich gar nicht in Erwägung gezogen. Schau doch mal auf einem alten Mainboard. Ich hab unten den W24257AK (@20nsec) von einem alten 486er verbaut. Als Speichererweiterung für einen AT90S8515 ;)
Gruss, Michael
transistor
13.07.2004, 12:45
Hallo,
bin neu bei euch im Forum, obwohl ich schon sehr lange mitlese und mitbaue. Mit dem ram das verstehe ich noch nicht so ganz. Wie hängt man den ram zum Beispiel an den M128. Kann jemand dazu hier ein Schaltplan ablegen?
transistor
sorry, hab vergessen mich einzuloggen, also: gast <=> malthy ;-).
der tip mit dem alten mainboard ist natürlich prima. ich werde mal gucken was ich da so finde. allerdings blicke ich durch die bezeichnungsweise nicht so ganz durch. kann man dazu was allgemeines sagen, so nach dem motto "immer wenn vorne XYZ steht und hinten 256 ist das 32K ram"?
vielen dank, viele grüsse,
malte
Hab davon jetzt nur begrenz Ahnung, hätte aber vermutet, das der RAM Zugriff auf externes RAM sich auf mehrere Taktzyklen erstreckt...
Ja, dauert 2 Tackte beim internen SRAM mit der Fußnote:
Cycle times for Data memory accesses assume internal memory accesses, and are not valid for accesses via the external
RAM interface. For LD, ST, LDS, STS, PUSH, POP, add one cycle plus one cycle for each wait state.
Aber denkste, falsch gedacht:
Im AVR-Datenblatt findet man dann noch einen anderen Wert unter:
Electrical Characteristics - External Data Memory Timing
Read Low to Data Valid - 1.0tCLCL-50 in ns mit in diesem Fall tCLCL= 1/16MHz macht 62,5-50 = 12,5ns
Dieser Wert representiert aber meines wissens nicht die oben genannten 20, 60 oder 80ns. Diese Zeiten beziehen sich nach meinem bisherigen Verständnis auf zwei aufeinanderfolgende Abfragen (kompletter Cyklus) und der ist ja durch mindestens 2Takte a 62,5ns mit 125ns gegeben (wenn man sich immer nur für das selbe Byte interessiert).
Man kann aber augenscheinlich auch Wait-States deklarieren, damit ggf zu lansames RAM angesprochen werden kann. Wenn Du also Bausteine hast, setze die wait-states, Programmiere, Teste und wenns Funktioniert fesuch es mit weniger oder ohne waitstates.
danke noch mal für alle hinweise! :-)
gruss,
malte
BlueNature
17.04.2005, 16:00
Hallo!
Bin auch auf der Suche nach Erweiterungen am AVR. Habe es mit einem ATMEGA64 vor. Laut Datenblatt gibt es eine Möglichkeit auf 64kB zu kommen mit externem SRAM der einfach direkt angesprochen wird. Aber aus der einen Seite (SRAM Data Memory S. 17) kann ich bei bestem Willen keine Informationen herausholen die in einer Weise sinnvoll wären. Wo ist die Beschaltung angegeben die dafür notwendig wäre? Mit einer Harvard-Architektur ist es zwar möglich, aber dann würde diese Funktion wohl ziemlich sinnlos sein und müßte man wieder selbst per Software emulieren was alles relativ lahm machen würde. Zudem müßte man ein externes 8-Bit D-FF verwenden um Data und Adress zu Multiplexen. Hat das schon mal jemand real aufgebaut oder Infos dazu?
Grüße Wolfgang
pebisoft
17.04.2005, 16:39
hallo, ich habe 4x 24c512 (4x 64kbyte) am avr16 und steuere die über i2c an, klappt wunderbar. die ganzen daten kommen vom srf04-ultra. der robby speichert die dann in alle 4-eeprom und wenn er bei mir ankommt, übertrage ich die daten auf dem pc mit einer infra-diode und tsop1736.
256kbyte-gaten reichen mir.
mfg pebisoft
BlueNature
17.04.2005, 16:49
Hallo pebisoft!
Das mit den EEPROMS ist ganz nett über I2C, aber ich brauche das als sehr schnellen und großen SRAM der sehr oft umgeschrieben udn in einer Art Matrix analysiert wird. EEPROMS würden da sehr schnell schlapp machen. Zum Aufzeichnen mögen die wohl gut sein, aber nicht für Algorythen. EEPROMS will ich auch verwenden, aber nur als Speicher wenn der µC ausschaltet um die Daten wieder in den SRAM zu bekommen und keine GoldCaps zu verwenden.
Grüße Wolfgang
Hallo BlueNature,
im Prinzip läuft es immer wie im Datenblatt des Atmega64 auf Seite 27/393.
Einen Schaltplan findest du auch in der Bascom-Hilfe unter Xram/Adding Xram.
Gruß, Michael
BlueNature
17.04.2005, 17:59
Danke Michael!
Das war genau was ich gesucht hatte. Mappen kann ich so auch gut. Ist genau Harvard wie es auch üblich ist bei anderen CPU's.
Grüße Wolfgang
Hallo malthi,
nimm 2x 62256 und schalte sie parallel. Dann legst du einfach A15 an den ersten Chip Select und über einen Inverter an den zweiten Chip Select. Schon hast du 64k.
Gruss, Michael
Kannst du das nochmal genauer erklären ich blick das nicht...
BlueNature
28.06.2005, 15:34
Mit der höchstwertigen Adressleitung ChipSelect wird einfach RAM 1 oder RAM 2 angewählt. Entspricht somit einem unteren Speicherbereich und einem oberen. Problem ist nur das der ATMEGA real nur 64kB (eigentlich sogar nur ca. 61kB) verwalten kann. Der Rest ist deiner Kreativität überlassen. Mußt Variablen overlayen um das nutzen zu können und das Management selbst machen.
Wenn du RAM-Bausteine mit doppeltem CS nimmst ist es auch ohen diesen Inverter möglich. Dann wird RAM 1 mit CS udn RAM 2 mit /CS verbunden an den ATMEL und die freie CS bzw. /CS an High bzw. Low gelegt. Dann schalten sich die Bausteine auch um.
Grüße Wolfgang
jagdfalke
28.06.2005, 15:36
Kann man eigenlich auch so n' USB Compact Flash R/W so ansprechen, dass man aufs Flash schrieben kann? Wäre das einfacher?
Mit der höchstweretigen Adressleitung ChipSelect wird einfach RAM 1 oder RAM 2 angewählt. Entspricht somit einem unteren Speicherbereich und einem oberen.
Wenn ich das richtig sehe gehen dir dann vom einen Speicher aber die Adressen die durch das Bit adressiert würden (32768Byte) verloren, oder?! Noch dazu das MSB!
Muss man das verstehen?
Warum nicht einfach direkt das CS auf einen Inverter und alle Adressen ausnutzen? (siehe Bild)
Gruss
Michael
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.