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?