www.mikrocontroller.net

Forum: Compiler & IDEs Datenlog auf SD Karte speichern


Autor: Jürgen Härig (jhaerig)
Datum:

Bewertung
0 lesenswert
nicht 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.
//----------------------------------------------------------
// Verzeichnis & SD Karten Variablen
//----------------------------------------------------------
 char fileid;
 uint16_t bytecount=0;

 char date_temp[2];
 char data_temp[5];
 uint8_t out_buffer[47];
 int a,c=0,d,e,f;

//----------------------------------------------------------
// Array vorbereiten und Daten konvertieren
//---------------------------------------------------------- 

for(a=0;a<=8;a++)
{
 dtostrf(strom[a],2,2,data_temp);        //stromwert, als char-array umwandeln
 for(f=0;f<5;f++)
 {
  out_buffer[c+f] = data_temp[f]; //einzelne char werte in out_buffer schreiben
 }
 out_buffer[c+f] = 0x20;                         //leerzeichen
 c=c+6;
}
Soweit sogut. Auf einer RS232 Schnittstelle kann ich out_buffer ohne
Probleme ausgeben lassen.

RS232 Ausgabe:
Array-Test:
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:
fileid=Fopen(filename,F_WRITE);  //Date schreibend öffnen
if(fileid>=0)                   
{
   Fwrite(out_buffer,47,fileid); //47 Bytes von out_buffer
   Fclose(fileid);

    for(e=0;e<sizeof(out_buffer)/sizeof(out_buffer[0]);e++)
     rs232_putchar(out_buffer[e]);
    rs232_print("\n\rSuccessfully written\n\r");
}

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?

Autor: Jürgen Härig (jhaerig)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.