Hallo, Ich erfasse jeweils einen Messwert in Abständen von z. B. 1 Sekunde (oder auch 5ms), der auf einer SmartMedia- Karte gespeichert wird. Um Strom zu sparen, soll die Karte zwischen zwei Messungen abgeschaltet werden. Ein Abschalten ist aber erst dann möglich , wenn jeweils 512 Bytes eingelesen wurden. Also müssen die 512Bytes zwischengespeichert werden, um dann in einem Rutsch in die Karte übertragen werden zu können. Bei einem MSP430F149 gibt es 2k RAM. Meine ersten Versuche, irgendwelche Daten auf eine bestimmte RAM- Adresse zu schreiben, gingen schief. Gibt es eine Möglichkeit internen Speicher als Zwischenspeicher zu nutzen? Sollte kein Flashspeicher sein, da, wenn ich das richtig sehe, die Anzahl der Löschzyklen begrenzt ist. Mit freundlichen Grüßen Wolfgang
Wie wär's z.B. mit uint8_t my_data[512]; my_data[xxx]=yyy; wobei xxx das gewünschte byte und yyy die zu speichernden daten angeben. Auf eine bestimmte Ram Adresse schreibst du damit zwar nicht, aber der Compiler weiß eh besser wo er die Daten ablegen soll. R2D2
1) Ich verstehe die Problematik auch nicht ganz ... Wenn du z.B. Daten vom ADC12 einliest, machst du eben einfach ein mybuffer[i++]=ADC12MEM0; Und das ganze in einer for-Schleife bis 255, dann ist dein Buffer voll und du kannst ihn komplett wegschreiben zur Speicherkarte. Wo genau die Daten hingeschrieben werden, sollte doch wurscht sein. Der MSP430 wird schon selber wissen, an welcher Adresse er gerade Platz hat. :-) 2) Falls es geht, wäre ich sehr an deiner Routine zur Ansteuerung der SM-Karte interessiert! Ich wollte nämlich in den nächsten Tagen mal versuchen, auf meiner Homepage www.mathar.com eine Ansteuerung für eine FAT16-formatierte MMC mit dem MSP430F149 zu schreiben. Wenn es da schon Vorarbeit gibt, müsste ich das Rad nicht zwei mal erfinden. :-) Derzeit kämpfe ich aber noch mit dem Temperatursensor ... Grüße, Sebastian
Hallo, Danke Euch für Eure Hilfe und ich werde mal versuchen, ob ich das hinkriege. Richtig, mir ist es wurst, wo die Daten hingeschrieben. Meine Programmierkenntnis sind noch zu unterentwickelt, um darauf zu kommen, was sich bei Euch so leicht anhört. Deshalb meine Anfrage im Forum. Sehe ich das richtig, dass hier ein Array angelegt wird. So was kenne z.Zt. ich nur aus Büchern. Vielleicht hat jemand ein Beispiel mit Kommentar. @Sebastian eine SM- Karte wird bei mir byteweise beschrieben und byteweise wieder ausgelesen. Von FAT habe ich zu wenig Ahnung. Falls Du trotzdem Interesse hast, kann ich das, was ich habe, Dir gern zur Verfügung stellen und Du kannst dann ein richtiges Programm daraus machen. Mit freundlichen Grüßen Wolfgang
Du hast recht. Hier wird ein Array angelegt. Ein Array ist einfach eine Variable, die einen Namen hat aber X werte aufnehmen kann. So als hättest du X variable deklariert. Zum anlegen schreibst du einfach Typ Name[Größe]; Auf ein Element kannst du dann mit abc = Name[X]; lesend bzw. mit Name[x]=abc; schreibend zugreifen. R2D2
Prinzip verstanden und habe es erfolgreich angewendet. MfG Wolfgang
Fat + Speicherkarte geht nicht, denn wegen den 512 Byte-Blöcken brauch man allein für den Karten-Treiber gut 1 kB und für FAT 1,7 kB: http://home.t-online.de/home/holger.klabunde/avr/avrboard.htm#cf Somit verbleiben noch -0,7 kB RAM für alles andere.
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.