Grüß euch! hab ein großes Anliegen an euch! habe diverse seiten schon durchsucht, vorallem dieses forum, aber ich finde nichts was mich weiterbringen könnte. Ich bin totaler Anfänger beim µC programmieren. Ich arbeite mit dem MSP430F149 mit einem 12bit ADC. Ich will Daten (2 Kanäle)permanent digitalisieren und diese dann in einem Buffer, am besten RAM (2kbyte), speichern. Wenn 512 byte gespeichert worden sind, sollte dieser Buffer entleert werden bzw. diese Daten auf die miniSD Karte von SanDisk gespeichert werden. Das Problem besteht darin, dass es kein Modul (Direct Memory Access) zur Verfügung steht, das mir die Speicherung vom Memory Register des ADC in den RAM erleichtert. Also müßte ich das händisch erledigen, nur die Frage ist wie? Hat jmd einen bestehenden Code, der mir helfen könnte oder irgendwelche Tipps, die mir das Leben erleichtern können ;). Vielen Dank im voraus lg sylvia
Hallo Sylvia, Code habe ich keinen, aber ein paar Tipps: ich würde, wenn es sich nicht auf 12 bit ankommt, sondern 8 - 10 bit Genauigkeit reichen, den ADC im Interrupt Modus betreiben und speichere währendessen des Samplings über das SPI-Interface die Daten auf ein CF Karte. Warum die CF Karte? Die CF-Karten lassen sich seriell über einen drei Draht Bus (aka SPI) direkt beschreiben. In der Zeit in der der ADC läuft den Datenzeiger der CF-Karte umstellen und das Ergebniss anschließend direkt dort reinschreiben. Der dabei entstehende Nachteil ist die Störung der ADU durch die CPU. Somit verlierst Du Genauigkeit. Sollte es sich aber auf die 12 bit ankommen - von denen max. 10 Bit eh nur verwertbar sind, die anderen beiden sind idR. aufgrund von nicht linearität und Ungenauigkeit mit relativ großen Fehlern behaftet. +- 1 - 2 bit ist nichts ungewöhnliches. Dieses Problem kannst Du aber umgehen, indem Du Dir einen zugegeben etwas teuereren AD-Wandler kaufst, der min. 14bit Auflösung hat. Diesen weit von allen störenden Komponenten (Quarze, Taktgeben, Schnittstellen) entfernt montiert und auf eine große GND-Plane gesetzt löst auch dieses Problem. Viele Grüße Marcus PS: Stell den Thread mal in das Forum http://www.mikrocontroller.net/forum/list-1-1.html
Hallo Marcus, Vielen Dank für deine Tipps. ich werd mit 12 bit wandeln müssen u die platine wie sie sein muss, ist auch schon fertig...das problem ist ja das ich erst 512byte haben muss um diese dann in die miniSD Card schreiben zu können, daher muss ich die Daten erst in einem buffer sammeln u kann diese dann erst in die Card speicher, oder, hab ich da was falsches verstanden? noch eine FRAGE: versuch grad die Daten von ADC12MEM0 auf die Flash Memory zu schreiben. Kann ich einen Zeiger eigentlich auf die Adresse des ADC12MEM0 initialisieren? Dann einen Zeiger auf das Segement auf das ich Schreiben will und dann die Daten mit dem Befehl *Flash_ptr1++ = *ADC12MEM_ptr0++; von ADC12MEM in das Segment1 kopieren. Ist das alles überhaupt möglich? Danke lg sylvia
Warum speicherst Du die Daten denn nicht im RAM? 2kB sollten doch erst mal reichen, um ein bißchen Stack, ein paar Variablen und Deinen Buffer zu halten...
...das war meine Idee auch am anfang, aber dann dachte ich mir das der Flash speicher geeigneter ist...aber das problem an der ganzen sache ist, dass ich nicht genau weiß wie ich das angehen soll. bräuchte einen ähnlichen code, der mir auf die sprünge helfen kann... lg sylvia
Der Flash-Speicher ist dafür denkbar schlecht geeignet. Zugriffe auf diesen sind im Vergleich zum RAM sehr langsam. Ausserdem kannst Du so ohne weiteres nur das Info-Memory (256bytes, Segment A und B) schreiben. Wenn Du auf das Programm-Memory zugreifen willst, muss die CPU angehalten werden usw usf. Auf das RAM kannst Du dagegen ganz einfach und schnell zugreifen. Du legst einfach ein Array an, welches Deine Daten Speichern kann. Am besten eine Sektorgröße (512bytes) und so viel Reserve, daß Du die Daten, die während dem Speichern auf der SanDisk anfallen, auch speichern kannst. Oder Du legst das ganze als Ringbuffer an. Alles in allem wäre die RAM-Lösung wohl die nächstgelegene...
werde jetzt alles in den RAM speichern, zumindestens versuchen und dann weiterschauen... vielen dank für den tipp lg
Hallo Marcus, falls Du mit der CF- Karte die Compact Flash- Karte meinst, würde ich mich für ein Programmbeispiel zum Datenaustausch über SPI interessieren. Gibt es dazu evtl. etwas im Internet zum Nachlesen? Für einen Hinweis wäre ich Dir dankbar. MfG Wolfgang
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.