Datenlogger bauen, aber wie?

So, habe mir aus einer Lochrasterplatine und ein paar Bauteilen eine Art aufsteckbaren Prototyp gebastelt.
Diesen immer wieder um eine Funktion erweitert, bis jetzt fast alles funktioniert. Eine gute Hilfe war der
Pap-Designer, um mir eine Programmstruktur vorzubereiten.

Leider verzweifle ich an zwei Problemen:

Habe eine RTC mit Batterie verbaut, doch wenn man den Arduino vom Netzteil nimmt und wieder ansteckt,
fängt er wieder von der Uhrzeit und Datum der Programm-Übertragung an zu zählen.

Ich habe gedacht, wenn ich die RTC mit

    RTC.begin(DateTime(__DATE__, __TIME__));

stelle, läuft die Uhr über die Batterie weiter!?, auch wenn ich den Arduino vom Netzteil trenne und später wieder
anstöpsel.

Mein Zweites Problem ist die Log-Schleife. Ich möchte ja im Fehlerfall ein Log auf die SD schreiben. Leider funktioniert
das nur beim ersten Durchlauf.

Ich benutze folgrnden Code in der void loop():

   if (!SD.begin(chipSelect)) 
   {
    Serial.println("Card failed, or not present");
    return;
   }
    Serial.println("card initialized.");

    File dataFile = SD.open("datalog.txt", FILE_WRITE);

    if (dataFile) 
   {
      DateTime now = RTC.now();
      dataFile.println("");
      dataFile.print("*Ein* - ");
      dataFile.print(now.year(), DEC);
      dataFile.print('/');
      dataFile.print(now.month(), DEC);
      dataFile.print('/');
      dataFile.print(now.day(), DEC);
      dataFile.print(' ');
      dataFile.print(now.hour(), DEC);
      dataFile.print(':');
      dataFile.print(now.minute(), DEC);
      dataFile.print(':');
      dataFile.print(now.second(), DEC);
      dataFile.println();
      dataFile.close();
    }  
    else
    {
     Serial.println("error opening datalog.txt");
    }

Nätürlich mit ein paar Funktionen noch dazwischen. Die Schleife läuft ein mal durch logged die simulierten Fehler,
wartet dann 20 Sekunden und läuft erneut an. Bleibt aber immer in "Card failed, or not present" im 2. Anlauf hängen.