Gleichzeitiger Zugriff auf RAM

Gast #234953
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.
Gast #234954
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.
Persönliche Seite #234959
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.
Gast #234961
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.
#234962
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
Persönliche Seite #234963
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.
Gast #234964
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.
Gast #234965
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.
Gast #234966
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.
Gast #234968
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren