Forum: Mikrocontroller und Digitale Elektronik Externes RAM an 8515???


von Andi (Gast)


Lesenswert?

Hallo,

ich empfange mit meinem Atmel 8515 Infrarotsignale. Da der 8515 nur
über sehr wenig Speicher verfügt möchte ich die Zeiten, die ich
gemessen habe schnell an den Rechner übertragen. Die UART ist dafür
leider zu langsam (muss ca alle 260us einen Wert abspeichern!).
Ich möchte daher die Daten zwischenspeichern. Am besten wäre sicherlich
ein externes FlashMemory. Benötige dafür aber 2 freie Ports (Port A und
D)! Diese Ports sind natürlich schon belegt!
Ein externes EEPROM wäre viel zu langsam! Benötige also irgendein
statisches RAM?!?
Hat jmd. Erfahrungen mit einem RAM Bautstein und kann mir eins
empfehlen?

Vielleicht hat ja jmd. auch eine andere Idee!?!?

Gruß,
Andi

von Flite (Gast)


Lesenswert?

Hallo Andi,

ich hab schon mal ein SRAM an den 8515 angeschlossen. Verwenden kannst
du jedes beliebige SRAM (ich glaub bis max. 64kB adressierbar).

Allerdings kannst du dann eben nur diese 64kB abspeichern und danach
musst du sie über das UART an den PC übertragen. Während dieser Zeit
kannst du natürlich keine IR Daten empfangen.

Der Anschluss eine SRAM an den 8515 ist im Datenblatt gut erklärt.

Kommt eben auf die Anwendung an, ob es was bringt oder nicht ...

Grüße
Flite

von Andi (Gast)


Lesenswert?

Hallo Flite,

habe mir das gerade mal im datasheet angesehen. Ist es denn da nicht
auch so, dass ich die kompletten Ports A und C benötige???
Die hab ich nämlich nicht mehr frei!
64kB reicht vollkommen. Muss ca. 600 Byte speichern!

Andi

von Andi (Gast)


Lesenswert?

Noch ne Frage...

wie steht es denn sonst mit dem internal SRAM? Kann ich das nicht
verwenden?

von Fritz Ganter (Gast)


Lesenswert?

Na klar kannst das interne RAM verwenden, wenn es gross genug ist. Wenn
du in C programmierst, einfach ein Array machen:

char werte[600];

und mit

int i;
i=0;
werte[i++]=deinmesswert;

speichern.

von Andi (Gast)


Lesenswert?

Hallo Fritz,

ich suche mich jetzt schon seit Stunden eine Erklärung wie ich einen
Wert in mein internes SRAM speicher!
Kannst Du mir viell in C kurz schreiben wie ich ins SRAM schreibe und
wie ich lese? Das wäre echt super... verzweifel hier nämlich schon
langsam.

Irgendwie muss ich ja die Adresse vom SRAM (z.B. 0x0060) und meinen
Wert angeben!?!

Gruß,
Andi

von Benedikt (Gast)


Lesenswert?

Dumme Frage:
Alle 260us einen Wert ? Wiso ist der UART zu langsam ???
115200Baud ergibt 11520Byte/s sind 86,8us/Byte
Und das ist wohl schneller als die 260us...

von Fritz Ganter (Gast)


Lesenswert?

"Kannst Du mir viell in C kurz schreiben wie ich ins SRAM schreibe und
wie ich lese?"

Wie du schreibst steht ja oben.

Und lesen:

x=werte[i];

Wo das ganze im RAM steht braucht dich nicht zu kümmern, dass weiss der
Compiler.

Aber mach das Array nicht grösser als nötig, weil du sonst mit dem
Stack kollidierst.
Ich weiss nicht wieviel RAM der 8515 hat, aber du brauchst zumindest
1kB RAM wenn du 600Werte als Byte speicherst. Wenn es 16-bit Integer
sind, dann brauchst alleine 1200Byte fürs Array.

von Andi (Gast)


Lesenswert?

Hi Benedikt,

laut datenblatt hat die UART bei 115200 Baud einen fehler von 7,8% (bei
8MHz). Ich arbeite daher mit höchstens 38400Baud.
Dazu kommt noch, dass ein Wert bei mir 16Bit groß ist.

Andi

von Andi (Gast)


Lesenswert?

Ach, scheiße... Sorry

ich habe die ganze Zeit gedacht, dass das interne SRAm mir noch
zusätzlich zur verfügung steht. Aber es ist dann so das alle Variablen
im SRAM gespeichert werden, ne?! Also wenn ich 512k SARAM habe, dann
kann ich auch nur so große Variablen anlegen!?
Und da das nicht reicht benötige ich noch ein externes oder wie steht
es mit dem internen EEPROM? Das ist dach zusätzlicher Speicher, oder?
Wie schnell ist denn da der Zugriff?!? Wrd mal wieder ins datatsheet
schaun...

Vielen Dank,
Andi

von Andi (Gast)


Lesenswert?

Okay... hab schon gesehen.

EEPROM ist viel zu langsam (2.5 - 4ms)!

von Markus (Gast)


Lesenswert?

@Andi:
Wäre es nicht einfacher, einen passenden Quarz für den 8515 zu benutzen
anstatt ein externes RAM anzuschließen? Und kannst Du die Daten nicht
platzsparender übertragen? Brauchst Du wirklich 16Bit pro Wert?

Markus

von Andi (Gast)


Lesenswert?

@Markus:
Die Idee mit dem Quarz ist mir auch schon gekommen.
Der 7.3728 wäre da nicht schlecht!
Bei den Werten handelt es sich um die Werte des Timer1 (16Bit).

von Markus (Gast)


Lesenswert?

Welche Meßwerte bekommst Du denn? Wenn Du z.B. nur Werte bis 4000
erwartest, dann reicht es ja, wenn Du 12 Bit überträgst. Als ich mal
ein IR-Signal analysiert habe, da hab' ich einen Timer-Interrupt mit
10kHz benutzt und dann die Signaldauer gemessen. Die Ergebnisse sind
dann automatisch mit 0,1ms Auflösung und in ein Byte passen bis zu
25,5ms. Das ganze hab' ich dann im RAM eines 2313 abgelegt, der ja
sogar nur 128Byte RAM hat.

Markus

von Benedikt (Gast)


Lesenswert?

Ich mache das immer anderst:
Timer auf 10kHz, den logischen Zustand am Portpin lesen und 8 Werte zu
einem Byte zusammenpacken, so muss ich 1250Bytes/s übertragen, was auch
mit 38400Baud möglich ist...

von Andi (Gast)


Lesenswert?

Hi,

wollte mich nur noch mal kurz melden. Habe jetzt einen 7,3728 MHz Quarz
genommen, damit funktioniert es einwandtfrei! Habe es mit 180us
ausprobiert!

Gruß,
Andi

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.