Forum: Compiler & IDEs Datenlog auf SD Karte speichern


von Jürgen H. (jhaerig)


Lesenswert?

Hallo,

ich nutze seit einigen Tagen den von holger klabunde bereitgestellten 
Code zur Nutzung einer SD Karte über SPI, an einem ATmega128.

Ich wende mich an euch, da ich ein Problem habe.

Zur Zeit versuche ich Daten auf der SD Karte in einer Text-Datei zu
speichern... bisher mit gewissen Erfolg.
Dinge wie z.B. Texte sind kein Problem, auch feste Zahlen aus
Variablen sind machbar.

Ich will allerdings double-Werte aus einem Array in dieser Daten
speichern, dafür lass ich die Werte von double in einzelne chars
umwandeln und in einem 47 Zeichen großen char Array speichern.
1
//----------------------------------------------------------
2
// Verzeichnis & SD Karten Variablen
3
//----------------------------------------------------------
4
 char fileid;
5
 uint16_t bytecount=0;
6
7
 char date_temp[2];
8
 char data_temp[5];
9
 uint8_t out_buffer[47];
10
 int a,c=0,d,e,f;
11
12
//----------------------------------------------------------
13
// Array vorbereiten und Daten konvertieren
14
//---------------------------------------------------------- 
15
16
for(a=0;a<=8;a++)
17
{
18
 dtostrf(strom[a],2,2,data_temp);        //stromwert, als char-array umwandeln
19
 for(f=0;f<5;f++)
20
 {
21
  out_buffer[c+f] = data_temp[f]; //einzelne char werte in out_buffer schreiben
22
 }
23
 out_buffer[c+f] = 0x20;                         //leerzeichen
24
 c=c+6;
25
}
Soweit sogut. Auf einer RS232 Schnittstelle kann ich out_buffer ohne
Probleme ausgeben lassen.

RS232 Ausgabe:
1
Array-Test:
2
16.16 14.14 12.12 10.10 8.08 6.06 4.04 2.02

Versuche ich aber die Daten auf die Karte zu schreiben:
1
fileid=Fopen(filename,F_WRITE);  //Date schreibend öffnen
2
if(fileid>=0)                   
3
{
4
   Fwrite(out_buffer,47,fileid); //47 Bytes von out_buffer
5
   Fclose(fileid);
6
7
    for(e=0;e<sizeof(out_buffer)/sizeof(out_buffer[0]);e++)
8
     rs232_putchar(out_buffer[e]);
9
    rs232_print("\n\rSuccessfully written\n\r");
10
}

Nun bekomm ich aber nur eine leere Datei auf die SD Karte geschrieben. 
Ok, nicht ganz leer... ein paar unsichtbare Sonderzeichen könnten es 
sein.

Wo mach ich hierbei einen fehler?

von Jürgen H. (jhaerig)


Lesenswert?

Okay, das Problem hat sich erledigt

Beitrag "Ausgabe mit dtostrf"

nachdem ich die float berechnung wie im obrigen thread gemacht hatte, 
konnte ich die daten auf der karte sauber ablegen.

mir war nicht bekannt, dass char arrays mit einem '\0' abgeschlossen 
werden müssen, um als String zu gelten. Das war wohl mein Fehler.

Dennoch, danke.

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.