SRAM Bestimmen MEGA

Hallo Zusammen, Gibt es eine einfache Möglichekeit die Auslastung des SRAM automatisch zu bestimmen. Ich schötze, ich bin da an die grenzen gekommen, seit ich die NewSoftSerial eingebunden habe. (Davon gibt es jetzt eine überarbeitete Version, die auch auf dem MEGA arebitet). Jedenfalls, werden meine Variablen, bzw. Arrays überschrieben, seit ich die eingebunden habe.

Soweit ich durchblicke, ist die Vorausberechung der SRAM Puffers wohl sehr schwierig. Und bei mehreren seriellen Schnittstellen könnte es wirklich mal knapp werden. Wenn Deine Anwendungen nicht zu zeitkritisch sind, würde ich einen externen Speicher z.B. über I2C einbinden.

Hm, das klingt interessant, auch wenn es mein eigentliches Problem vermutlich nicht lösen wird. Ich habe jetzt mal ausprobiert alle anderen Funktionen rauszuschmeißenm, und lese noch ein GPS Gerät aus (Über native UART). Sobald ich aber die NewSoftSerial einbinde, zerhauts mir die Daten.... :-( Und das auch, wenn ich gar nicht auf die NewSoftSerial zugreife, sondern sie nur einbinde. Gibts irgendwo ein Tutorial über die Anbindung externen Speichers? Kann man den auch nehmen, um den Rx-Buffer der UARTs zu vergrößern?

Man müsste doch einen externen RAM-Speicherbeistein vom Arduino aus ansprechen und Programmdaten darin ablegen und wieder auslesen können.

Halt im Prinzip von zeitweise ausgelagerten Daten.

Ist nicht vorgesehen externes RAM zu haben. Es gibt meines wissens kein RAM mit I2E Schnittstelle, das größer als ein paar hunder Byte ist. Man kann ein EEPROM nehmen um Konstanten oder Strings auszulagern, aber dann muß ma das interface programmieren um an die Daten ranzukommen. Grüße Uwe

Es ist nicht vorgesehen externes RAM zu haben, das mag sein. Ich glaube jedoch das man dafür kein I2C braucht.

Beispiel: UT61256 - 32K * 8 Bit High Speed CMOS SRAM

Man steuert über 2 74HC595 (Shift Register) die 15 Adressleitungen des IC. Wobei die Zieladresse durch 2^0, 2^1, 2^2 ... 2^14 definiert wird. Dadurch kann man 32768 verschiedene Adressen definieren. Adresse 0 - 32767. Macht also 262144 Bits. Durch die Eingänge O1 - O8 definiere ich dann die 8 Bits des Bytes das ich übertragen will. Oder lese dort die entsprechenden 8 Bits aus. Hier sind 256 verschiedene Werte möglich. 0 - 255.

Wenn ich die Leitungen CE# = L, OE# = L, WE# = H setze kann ich ein Byte an der durch die Adressleitungen definierte Adresse auslesen.

Wenn ich die Leitungen CE# = L, OE# = X, WE# = L setze kann ich ein Byte in die durch die Adressleitungen definierte Adresse hineinschreiben.

Ansonsten hat der IC nur noch Vcc und Vss.

Halt Daten swapping, das macht Windows auch nicht anderes !

Gleiches dürfte wohl auch für ein nicht SRAM RAM Baustein gelten !

Hallo Megaionstorm

8 Bit sind definitiv 256 Werte ( 0 bis 255) nicht 128 und 15bits sind 32768.

Natürlich kann man mit Schieberegistern bzw programmierbare Zähler (3pins) und 10 Ein/Ausgängen ( 8 Daten und 1 R/W 1 Enable) ein Paralellinterface für einen SRAMbaustein typ 6164 oder 61256 machen ( mit einer kleinen Batterie kann man den Speicherinhalt auch behalten) aber ist es das den Aufwand Wert? Da hat man schon die meisten Pins des Arduinos verbraten. Da benutze ich lieber einen Arduino Mega oder Seeeduino Mega. Der hat mehr RAM. und ich muß nicht die ganze Programm programmieren das mir den RAM-speicher Inhalt verwaltet, unnützes Kopiert und gebrauchtes zurückschreibt. Wenn ich das wirklich machen muß, dann nehme ich statt eines Microcontrolers ein normales Mikroprozessorsystem. Da habe ich keine Notwendigkeit die Dater auszulagern.

Nachtrag: Hatte übersehen, daß juergenp ja bereits einen Mega benutzt.

Grüße Uwe

Hast Recht Uwefed 8 Bit sind 256 (0 - 255). War mein Fehler, ein mal ^2 zuwenig !

Vielleicht gibt es für das beschreiben und auslesen der Leitungen O1 - O8 eine ähnlich pinsparende Lösung wie für die Adressleitungen A0 - A14 !

uwefed: Schau mal hier rein: http://www.ramtron.com/products/nonvolatile-memory/serial.aspx

Hier gibts I2C RAM bis 1 Mb

Hallo alle zusammen @ wennjo

Kannte ich nicht; wußte auch nicht, daß es schon ferromagnetische ferroelektrische ( englisch: ferroelectric) RAMs auf dem Markt gibt.

FRAMs sind im Endefekt RAM, die den Inhalt auch ohne Versorgungspannung behalten aber im Gegensatz zu EEprom schneller beim schreiben sind und keine Schreibzyklenbeschrenkung haben.

Das Problem mit dem Auslagern und der Logik des Auslagerns der Daten des Rams des ATmega bleibt hingegen.

@Megaionstorm Natürlich kannst Du die Datenleitungen auch mit einem Schieberegister seriell übertragen. Aber bald mal bist du langsamer als ein EEPROM.

Aber zurück zur ersten Frage zu kommen (wieviel RAM ist frei) http://www.arduino.cc/playground/Code/AvailableMemory http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1213583720;start=all

Grüße Uwe

Ja, ich könnte die Datenleitungen O1 - O8 mit einem Schieberegister beschreiben und die Daten seriell ins Schieberegister schreiben.

Nur wie funktioniert die Geschichte dann umgekehrt, beim auslesen der 8 Datenleitungen ?

Du nimmst kein Schieberegister, sondern einen Port expander PCF8475. Grüße Uwe

I2C Bus expander IC,Supply Voltage Rang Typ: PCF8574N: http://www.mercateo.com/p/139N-7527718/I2C_Bus_expander_IC_Supply_Voltage_Rang_Typ_PCF8574N.html

Die eigentliche Frage ist was Du eigentlich machst damit der Speicher nicht reicht. Bentutzt Du viele Strings? Oder hast Du einen 168 statt einem 328? In beiden Fällen liese sich das Problem auch ohne externen Speicher leicht lösen.

Gruß, Udo

Für mich war es erst einmal eine Überlegung für den Fall der Fälle !

Währe es möglich die Datenleitungen des UT61256 mit einem 74HC164 zu beschreiben und mit einem 74HC165 auszulesen ?

74HC164 8-Bit ser.EIN/ par.AUS Schieberegister 74HC165 8-Bit par.EIN/ ser.AUS Schieberegister

Theoretisch ja; praktisch nein.

Du brauchst Tristate Ausgänge am 74HC164 da ansonsten beim Lesen des SRams du 2 Ausgänge zusammenschaltest. Entweder suchst Du Dir ein Schieberegister mit tristate Ausgänge oder Du brauchst zusätzlich noch einen Tristate nicht invertierenden Bustreiber zb 74HC244

Du brauchst zu den Steuerleitungen des 164/165 aber noch zusätzliche Steuerleitungen die direkt vom Arduino kommen sollten: CE, OE und WE des SRAMS und EN des 244.

Wie bereits gesagt einen Port Expander zb den PCF8574N statt 164, 165 und 244 ginge auch gut.

Da kommt es aber billier und ist vom Elektronikaufwand einfacher einen FM24C512 bzw ein serielles EEprom zu nehmen.

Grüße Uwe