datum und zeit auf sd karte

ich habe mal wieder ein problem,
vor einiger zeit habe ich mir einen datenlogger gebaut, der 8 spannungen und 2 ströme mißt und auf sd speichert.
das gerät funktioniert einwandfrei.
bei den dateieigenschaften der datei auf sd habe ich festgestellt, das datum und zeit immer 01.01.2000 01:00 sind.
daraufhin habe ich mir ein neues sd shield mit rtc zugelegt.
die rtc habe ich in mein sketch mit eingebaut und läuft auch.
leider komme ich nicht weiter datum und zeit der rtc in die sd dateieigenschaften zu bringen.
ich hoffe ihr könnt mir helfen
gruß
ardubu

ardubu:
leider komme ich nicht weiter datum und zeit der rtc in die sd dateieigenschaften zu bringen.
ich hoffe ihr könnt mir helfen

Hast Du denn überhaupt eine SD-Library, die mit entsprechenden Library-Funktionen das Setzen von Dateidatum und -uhrzeit unterstützt?

Die FAT-Libraries für Mikrocontroller sind üblicherweise stark abgespeckte Libraries, die nur einen ganz minimalen Funktionsumfang haben, damit diese Libraries überhaupt mit so wenig RAM-Speicher laufen, wie sie z.B. ein Arduino UNO hat.

nein, ich nutze die standard sd library, ich habe nur die utylity/sd2card.h geändert, damit ich den software spi nutzen kann, da das sd shield für den uno gebaut ist und ich es auf einem mega betreibe.
man müßte doch in dem sketch datum und uhrzeit für die sd karte übergeben können, ich übergebe ja auch den dateinamen.

Ich habe ein ähnliches Problem.
Adlerdings nutze ich die Internetzeit und liegt nur daran das ich
mit der Programmiersprache noch Probleme habe.

Serial bekommst du die Zeit angezeigt?
Wie gibst du sie serial aus?

Bei mir wird die Zeit so zusammen gestellt:

void clockDisplay(){
  Serial.print(year());
  Serial.print("-");
  Serial.print(month());
  Serial.print("-");
  Serial.print(day());
  Serial.print(" ");
  printDigits(hour());
  Serial.print(":");
  printDigits(minute());
  Serial.print(":");
  printDigits(second());
}
// prints leading 0
void printDigits(int digits){
  if(digits < 10)
  Serial.print('0');
  Serial.print(digits);
}

Und serial so auch richtig ausgegeben:

void loop() {
  clockDisplay();
}

Nur wie ich das auf die SD bekomme weiß ich noch nicht.
Meine Sensor Daten schreibe ich mit sdfat so:

void loop() {
  int furnaceState = digitalRead(furnaceInPin);
 
  // open the file.
  if (!dataFile.open("HOM_1.CSV", O_RDWR | O_CREAT | O_AT_END)) {
    sd.errorHalt("opening HOM_1.CSV for write failed");
  }

  // if the file is available, write to it:
  dataFile.print(";16;");dataFile.println(furnaceState);

  // print to the serial port too:
  clockDisplay(); Serial.print(";16;");Serial.println(furnaceState);

  // close the file:
  dataFile.close();

delay(5000);
}

Nur

dataFile.clockDisplay();

Geht halt nicht.
Die Zeit per string schreiben sollte gehen, aber das möchte ich eigentlich nicht.

beim durchstöbern der SdFat.h habe herausgefunden, das datum und zeit mit einer callbackfunktion übergeben werden können. ich weiß nur noch nicht wie

ardubu:
beim durchstöbern der SdFat.h habe herausgefunden, das datum und zeit mit einer callbackfunktion übergeben werden können. ich weiß nur noch nicht wie

Siehe:

geht es nun um timestamps oder das Datum in die Datei zu schreiben?

Ich glaube es geht wohl darum welches Erstellungsdatum und -zeit die Datei im Filesystem der SD-Karte hat, nicht darum eine Zeit in eine Datei zu schreiben.

es geht um den timestamp, der link von jurs geht schon in die richtige richtung

nachdem ich die rtclib.h eingebunden habe, funktioniert der link von jurs einwandfrei. :slight_smile:

nachdem ich den sketch aus dem link von jurs (läuft einwandfrei) und meinen (läuft einwandfrei) zusammen gestellt habe, läd der mega das ganze hoch, und es scheint auch zu funktionieren, aber ich bekomme einige fehlermeldungen, mit denen ich nichts anfangen kann.

avrdude: stk500v2_recv(): checksum error
avrdude: stk500v2_recv(): checksum error
avrdude: verification error, first mismatch at byte 0x043f
0x97 != 0x01
avrdude: verification error; content mismatch

kann mir jemand weiterhelfen?