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.
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.
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)
du kanst meistens zwei Adressdecoder zusammenschalten z.B: beim 4515 im Datenbaltt wart mein ich sowas angegeben.
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.
Wie gesagt: Ich habe noch nie ein Externes RAM verwendet und das Internet ist voll von unterschiedlichen Lösungen. Also welche nehmen?
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.
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
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.
"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
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.
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.
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.
@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.
Ich bin offen für Prozessoränderungen. Framebuffer wäre auch eine Lösung, aber bei 20 Stückpreis suche ich besser nach alternativen...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.