Forum: Mikrocontroller und Digitale Elektronik MSP430F149: digitalisierte Daten in den RAM speichern


von Sylvia (Gast)


Lesenswert?

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

von Marcus M. (Gast)


Lesenswert?

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

von Sylvia (Gast)


Lesenswert?

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

von OldBug (Gast)


Lesenswert?

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...

von Sylvia (Gast)


Lesenswert?

...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

von OldBug (Gast)


Lesenswert?

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...

von Sylvia (Gast)


Lesenswert?

werde jetzt alles in den RAM speichern, zumindestens versuchen und
dann weiterschauen...

vielen dank für den tipp

lg

von Wolfgang (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.