Forum: Mikrocontroller und Digitale Elektronik Gleichzeitiger Zugriff auf RAM


von Lukas (Gast)


Lesenswert?

Für ein Projekt benötige ich 512KB RAM an meinem M88.
Ich habe aber leider noch nie mit externem RAM gearbeitet.
Welche verschiedenen Typen kann man in der Praxis einsetzen?
Reicht ein M88 zur Ansteuerung oder brauche ich mehr Pins?
Ich muss darüberhinaus mit 2 Geräten auf den Speicher zugreifen, d.H.
MC1 schreibt seine Messdaten hinein und MC2 liest sei irgendwann aus
und verarbeitet sie weiter.

von Benedikt (Gast)


Lesenswert?

Dualport Speicher und noch nie mit SRAM gearbeitet ist nicht gerade eine
gute Kombination.
512kB SRAM gibts bei Reichelt. Dieser benötigt 8 Daten und 19
Adressleitungen. Da wird es bei einem mega8 knapp. Man kann natürlich
mit Latches, Schieberegister usw. die Adressen zwischenspeichern, aber
das kostet Geschwindigkeit.
Versuch die Software auf jedenfall so hinzubekommen, dass nur ein AVR
auf den Speicher zugreift und die Daten an den zweiten weiterleitet.

von Lukas (Gast)


Lesenswert?

Würde gehen.
Was ich jetzt noch suche ist ein >19Bit Zähler, da der MC1 den Speicher
immer ganz sequientiell vollschreibt und der 2. MC ihn dann erst
ausliest (ebenfalls sequientiell)

von Läubi (Gast)


Lesenswert?

du kanst meistens zwei Adressdecoder zusammenschalten z.B: beim 4515 im
Datenbaltt wart mein ich sowas angegeben.

von Benedikt (Gast)


Lesenswert?

74HC590: Der hat einen Output Enable Ausgang.
Damit könnte man den Adresszähler abschalten, damit der uC auf den
Speicher zugreifen kann.
Ansonsten zwei 4040, das ist das einfachste.

von Lukas (Gast)


Lesenswert?

Wie gesagt:
Ich habe noch nie ein Externes RAM verwendet und das Internet ist voll
von unterschiedlichen Lösungen.
Also welche nehmen?

von J. S. (engineer) Benutzerseite


Lesenswert?

Ein normales asynchrones S-RAM, das ist am einfachsten zu bedienen: Bei
den Taktaten eines AVR brauchts Du nicht mal grossartig wait states zu
programmieren. Einfach Adressen anlegen, WE / RE bedienen und Daten
holen. Die hohen Adressleitungen über ein Latch multiplexen (64k-Bänke
zu 6 oder 32k-Bänke zu 16 bit je nach RAM) Gfs kannst Du auch Daten und
Adressbus multiplexen und bekommst mit ca 20 Leitungen einen
16bit-Datenbus hin. (Adresse = Bank+Hibyte+Lobyte) :

BANK_NO holen, BANK_Latch enable, BANK_NO ausgeben
HI_ADR holen, ADR_HI_Latch enable, HI_ADR ausgeben
LO_ADR holen, ADR_LO_Latch enable, LO_ADR ausgeben
DATEN LESEN

Dann lässt Du Dir vm zweiten AVR noch die gerade asuzulesene Adresse
geben: Z.B. führst Du sie über die Datenleitungen und einen
Tristatebuffer heran, ziehst nach obiger Manier das benötigte Datum aus
dem Peucher und gibt es dem zweiten AVR.

Alternative: Ein Adressnulitplexer, dem vom ersten AVR gesteuert wird
und Adressnaforderungen des zwieten überschreiben kann. Dann kann der
zwite auf das RAM, wenn der erst gerade nichts macht. Der erste erlaubt
ihm das per Controlleitung.

von Peter D. (peda)


Lesenswert?

Die Frage ist doch erstmal, um welche Datenrate es getht.

Für den 2-seitigen Zugriff ist der I2C-Bus ideal, da der
multimasterfähig ist. Der SRAM kriegt dann seinen eigenen MC als
I2C-Slave.


Peter

von Lukas (Gast)


Lesenswert?

Je schneller, desto besser.
Ich bastle nämlich an einen Datenlogger, welcher von verschiedenen
Messgeräten Daten über einen 8Bit breiten parallelen Bus erhält und
diese zwischenspeichern soll.
Ich habe mir überlegt, die Adresslogik durch einen Zähler zu ersetzen.
Der AVR empfängt die Daten, schreibt sie ins RAM und erhöht den Zähler
um 1.
Ist der Speicher voll, wird der Zähler auf 0 gesetzt und alles
ausgelesen.
Dadurch könnte ich mir ev. sogar einen AVR einsparen.
Was ich also noch brauche ist ein recht schneller Zähler.

von Peter D. (peda)


Lesenswert?

"Je schneller, desto besser."

Das ist natürlich eine äußerst konkrete Aussage, mit der man absoluit
nichts anfangen kann.

Ich würde mit so einer wischiwaschi Projektdefinition nicht weit kommen
bei meiner Arbeit bzw. ganz schnell gar keine mehr haben.


Peter

von J. S. (engineer) Benutzerseite


Lesenswert?

Dann kannst du Daten erst auswerten, wenn deine 500k vollgerammelt sind.
Wie wäre es mit einem FIFO ? Alternativ 2 RAMs gemappt.

Das Beste aber wird sein, Du bauste einen schnellen 16fach-Multiplexer
mit 2x8 daten- und time slots, mit denen Du 8 für das Lesen und
Schreiben der ADC-Daten und 8 für das Lesen und Schreiben der
ausgelesenen Daten reservierst. Am Besten 8x 1fach Lesen und dann 1x
8fach schreiben. Der zweite AVR kriegt also immer 8 Datenwerte die er
puffern und verarbeiten muss. Damit ist Dein minimaler Speicher = 16
Byte groß und Du hast nur 8 Kanäle Latenz. Bis zu den angedachten 512k
hast du also alls Optionen auf Puffergröße.

von Lukas (Gast)


Lesenswert?

Die Daten kann ich jederzeit auslesen, wenn ich das schreiben stoppe und
den Zähler auf 0 setze.

Gibt es fertige FIFO Chips zu kaufen?

"Je schneller, desto besser." bedeutet das die Systemgeschwindigkeit
nur von meinem Speicher abhängt und je schneller ich den Hinbekomme,
desto schneller kann erfasst werden.

von Sssssss (Gast)


Lesenswert?

Guck dir mal den Averlogic AL422B Framebuffer an.
Dort hast du 4MBit (?) die du sequentiell gleichzeitig lesen und
schreiben kannst.
Er hat einen Read und einen Write "Port" also bidirektionale
Kommunikation ist darüber nicht möglich.
Musst nur aufpassen dass an einer der clocks (read clk/write clk)
immer
ein ausreichend hoher takt anliegt.

Die Dinger können bis 50Mhz (?) betrieben werden und haben einen 8 Bit
Datenbus (=ideal für 8bit uCs)

Ich glaub die bekommst du bei segor.de, sind aber schweineteuer und
brauchen 80-110mA im Betrieb.

von Robert Teufel (Gast)


Lesenswert?

@Lukas,

muss dir etwas widersprechen, deine Systemgeschwindigkeit haengt nicht
nur vom Speicher ab sondern mindestens genausoviel vom Prozessor. Ich
hab schon ein paar mal gesehen, dass ein Data Logger mit einem micro
gebaut wurde, der 512K Flash auf dem Chip hat. Als Beispiel wie schnell
Daten auf einen solchen Chip gebracht werden koennen, mit optimiertem
Algorithmus hast du ca. 1 Sekunde um 512K voll zu schreiben (Beispiel
ist Philips LPC2138/LPC2148).
Als Zwischenpuffer wuerden die 32k SRAM auf dem Chip dienen. Der zweite
Controller koennte die Daten via SPI (sehr schnell) oder via UART oder
I2C etwas langsamer abrufen.
Wenn natuerlich die Wahl des Prozessors fuer die Geschwindigkeit keine
Option ist, dann bleibe beim M88.

von Lukas (Gast)


Lesenswert?

Ich bin offen für Prozessoränderungen.
Framebuffer wäre auch eine Lösung, aber bei 20€ Stückpreis suche ich
besser nach alternativen...

von Robert Teufel (Gast)


Lesenswert?

Nanu, wo kommen denn die 20 E her?

Weiss nicht wieviele Micros du bestellen willst und bei einem oder zwei
laeuft bestimmt der Versand dicke mit rein ABER bei Digikey Deutschland
gibts den LPC2138 zum Einzelstueckpreis von 8.93 Euro
http://de.digikey.com/
Suche nach LPC2138

Wie gesagt, ich habe gehoert die Versandkosten sind hoch in
Deutschland. In den USA sind sie es nicht.

von Lukas (Gast)


Lesenswert?

Die 20€ sind für den Framebuffer.
Digikey Versandkosten sind ganz schön heftig...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.