Tiny RTC verstellt sich! *Gelöst"

So, da bin ich wieder.

Das RTC Modul ist genau dieses hier: Arduino Projekte
Nur zur Info, ich nutze die Arduino Version 1.0.3!

Ich habe es auch genau wie dort auf der Zeichnung ist angeschlossen. Nur das ich die rechte Anschlussleiste ohne "BAT" und "SQ" nutze.
Warum ist dort DS gestrichelt? Ich habe das so verstanden, dass man das Kabel nicht notwendiger weise braucht, richtig?
So, nun zur Bibliothek und dem Sketch.
Die Bibliothek habe ich von Arduino Playground - Time
Sollte also die richtige sein. Dort habe ich auch nichts verändert.

/* TimeRTC Sketch: Ausgabe auf serieller Konsole & LC-Display
 * Synchronisation mit Echtzeit-Uhr
 * angeregt durch Arduino Cookbook von Michael Margolis
 * http://www.buecher.de/shop/englische-buecher/arduino-cookbook/margolis-michael/products_products/detail/prod_id/28958618/(externer Link)
 *
 * fribbe fuer http://macherzin.net(externer Link)
*/

#include <LiquidCrystal.h>  // binde LCd-Bibliothek ein
#include <Time.h> // binde Bibliothek Time ein

// Bibliothen fuer Echtzeituhr:
#include <Wire.h> // binde Wire-Bibliothek ein
#include <DS1307RTC.h>  // binde Bibliothek fuer DS1307-RTC(Uhr) ein

// abhaengig von Beschaltung des LC-Displays, siehe http://macherzin.net/article38-Arduino-Ausgabe-LC-Display(externer Link)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // initialisieren Bibliothek und Interface-Pins

void setup()
{
  Serial.begin(9600); // initialisieren serielle Kommunikation
  setSyncProvider(RTC.get); // holen Zeit von RTC(Uhr)
  
  // Nur zur Kontrolle:
  if(timeStatus()!= timeSet) // wenn Status geaendert
  {
     Serial.println("Synchronisation fehlgeschlagen"); // bei Fehler
  }
  else // sonst ...
  {
     Serial.println("Synchronisation erfolgreich"); // alles ok
  }
  lcd.begin(16, 2); // Display hat 16 Zeichen x 2 Zeilen,
  // Kontrolle Ende
  
  Serial.println("macherzin.net: "); // nur so
  lcd.print("macherzin.net: "); // nur so
}

void loop()
{
   digitalUhrAnzeige(); // rufen Subroutine auf
   delay(1000); // warten, weil unser Auge nicht so schnell ...
}

void digitalUhrAnzeige() // definieren Subroutine
{
   // digitale Anzeige der Zeit
   lcd.setCursor(0, 1); // positionieren LCD-Cursor, 1. Zeile, 1. Spalte
   printZiffernGenulltOhnePunkt(hour()); // rufen Subroutine auf
   printZiffernGenulltmitPunkt(minute()); // rufen Subroutine auf
   printZiffernGenulltmitPunkt(second()); // rufen Subroutine auf
   Serial.print(" "); // fuegen Freizeichen ein
   lcd.print(" "); // fuegen Freizeichen ein
   printZiffernGenulltOhnePunkt(day()); // rufen Subroutine auf
   Serial.print(" "); // fuegen Freizeichen ein
   lcd.print(" "); // fuegen Freizeichen ein
   printZiffernGenulltOhnePunkt(month()); // rufen Subroutine auf
   Serial.print(" "); // fuegen Freizeichen ein
   Serial.println(year());; // Zeilenvorschub
   // deaktiviert, kein Platz mehr auf 16er-Display:
   // lcd.print(" ");  
   // printZiffernGenulltOhneSemikolon(year());
}

void printZiffernGenulltOhnePunkt(int zahl) // definieren Subroutine
{
  // verschoenern Anzeige, indem wir ...
  if(zahl < 10) // wenn kleiner als 10 ...
   {
     Serial.print(""); // fuehrende 0 einfuegen
     lcd.print("");  // fuehrende 0 einfuegen
   }
   Serial.print(zahl); // Ausgabe auf serieller Konsole
   lcd.print(zahl); // Ausgabe auf LCD     
}

void printZiffernGenulltmitPunkt(int zahl) // definieren Subroutine
{
  // verschoenern Anzeige, indem wir ...
  Serial.print(":"); // trennende ":" einfuegen
  lcd.print(":"); // trennende ":" einfuegen
  if(zahl < 10) // wenn kleiner als 10 ...
  {
     Serial.print('0'); // fuehrende 0 einfuegen
     lcd.print('0');
  }
  Serial.print(zahl); // Ausgabe auf serieller Konsole
  lcd.print(zahl);
}

Dieses Sketch habe ich benutzt um die Uhrzeit ein Mal einzustellen. Dazu habe ich mir von http://www.epochconverter.com/ den Zeitstempel geholt und dann über die Konsole "T(Zeitstempel)" eingegeben.
Man sieht auch sofort das er die neue Zeit übernimmt. Ich habe danach mal das delay auf 10 Sekunden verlängert und es eine weile laufen lassen.
Exact nach 5 Minuten springt er zu einer anderen Zeit und einem anderen Datum (und das alle 5 M.).

Ich habe nun auch mal das von Cetax verwendete Sketch nutzen wollen, doch dann erscheint eine Fehlermeldung.

RTC.setRAM(0, (uint8_t *)&startAddr, sizeof(uint16_t));// Store startAddr in NV-RAM address 0x08 (wird Orange markiert)

Und darunter steht RTC was not declared in this scope

Anfangs dachte ich, es liegt evtl. an der Batterie. Das kann ich aber ausschließen, da ich sie nachgemessen habe.
Für die Übersicht in diesem Thread werde ich einen neuen erstellen, der sich mit der SD-Karte befasst.