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
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
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
Noch ne Frage... wie steht es denn sonst mit dem internal SRAM? Kann ich das nicht verwenden?
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.
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
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...
"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.
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
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
@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
@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).
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
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.