PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variablen in SRAM speichern?



BASTIUniversal
26.01.2006, 16:52
Hallo!
Ich möchte ein kleines "Nachmittags Experiment" starten. Ich will den ADC meines Mega8 im Free-Run-Mode laufen lassen und möglichst viele Messungen im internen SRAM des Mega speichern. Ist der Speicher voll soll das ganze per RS232 an den PC übertragen werden.

Mein Problem besteht darin, das ich keinen Befehl in Bascom gefunden hab welcher es mir ermöglicht meine Daten fortlaufend im SRAM zu speichern!
Was ich brauche ist so eine Art "writeeeprom" Befehl, nur für's SRAM!

Wenn ich den ADC auf 10 Bit stelle könnte ich eine max. Samperate von ~14kS/s erreichen, wie hoch kann ich bei nur 8 Bit gehen? Das Datenblatt sagt ja nur, dass die Frequenz zw. 50kHz und 200kHz für die höchste Auflösung sein muss...für kleinere kann eine größere Frequenz gewählt werden. Wenn ich nun eine Taktfrequenz von 3,68MHz habe und den kleinsten Teiler nehme, würde ich auf ~127kS/s kommen (vorrausgesetzt ich hab richtig gerechnet :-# )
Stimmt das so?

MfG
Basti

Pascal
26.01.2006, 17:09
Du könntest ja ein großes array anlegen, das den gesamten SRAM umfasst(bis auf ein paar bytes, die für andere Dinge benötigt werden, wie stack, andere variablen usw.). Dann nimmst du noch eine Zählvariable, die du nach jedem Schreiben um eins erhöhst und schreibst nach jeder Wandlung den Wert in das array an der Stelle der Zählvariable.

Meinst du mit "Nachmittags Experiment", dass das den gesamten Nachmittag dauern soll?
Denn nach 1024(ein paar weniger, siehe oben) mal Lesen wäre spätestens Schluss, da dann der SRAM voll ist.
Oder meinst du, dass der SRAM vollgeschrieben, dann an den PC gesendet und dann wieder weiter in den SRAM geschrieben wird?

BASTIUniversal
26.01.2006, 17:17
Hallo!
Das mit dem Array muss ich gleich mal ausprobieren! Das Array werd ich wohl für den Anfang auf 512Bytes beschränken...die müssten dann nach ungefähr 4ms voll sein :-)
Danach soll das ganze an den PC zur "Auswertung".

Mit Nachmittags Experiment meinte ich viel mehr, dass ich das mal Testen wollte und kein größeres Projekt dran hängt...quasi Just for Fun.

BASTIUniversal
26.01.2006, 19:17
So, Experiment scheint geglückt zu sein! Ich speichere 800 Messwerte (bei 8Bit Auflösung sind das 800 Byte) und gebe die auf einen Schlag an meinen PC weiter.
Getestet hab ich mit Timer1 im CTC-Mode, jetzt muss ich nur noch irgendwie auf die Frequenz schließen...und da hab ich meine Probleme!

Des weiteren kommt eine Übertragung der Messwerte erst ab einem Prescaler von 16 (ADC) zustande. Vorher liefert der Mega wohl keinen Interrupt -> ADC wahrscheinlich zu schnell!
Somit komme ich auf eine Samplerate von ca 17kS/s...d.h. nach 47ms wird Übertragen (3686400Hz/Prescaler 16 = 230400s/13,5 cycles = 17066 Samples/s)!
Für einen Messwert benötige ich damit ca. 59µS (1/17066Hz=0,000059s). Wenn meine Frequenz nun nach z.B. 31 Messungen (0,000059*31=0,0018s) einmal von Low nach High nach Low geht, welche Frequenz hab ich dann?
Das müssten doch dann 1/0,00182 = 550Hz sein...das kommt mir aber sehr wenig vor!

MfG