RTC1307 speichert Zeit nicht

Hallo,

sobald ich mein RTC1307 Zeitmodul vom Strom trenne ist meine vorher gespeicherte Zeit weg. Ich habe schon 2 verschiedene Knopfzellen probiert, daran kann es nicht liegen.
Solang das Zeitmodul am Strom hängt funktioniert alles prima.

Ich nutze eine DS1307RTC Library und zum setzen folgenden Sketch:

#include <DS1307RTC.h>
#include <Time.h>
#include <Wire.h>

const char *monthName[12] = {
  "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};

tmElements_t tm;

void setup() {
  bool parse=false;
  bool config=false;

  // get the date and time the compiler was run
  if (getDate(__DATE__) && getTime(__TIME__)) {
    parse = true;
    // and configure the RTC with this info
    if (RTC.write(tm)) {
      config = true;
    }
  }

  Serial.begin(9600);
  while (!Serial) ; // wait for Arduino Serial Monitor
  delay(200);
  if (parse && config) {
    Serial.print("DS1307 configured Time=");
    Serial.print(__TIME__);
    Serial.print(", Date=");
    Serial.println(__DATE__);
  } else if (parse) {
    Serial.println("DS1307 Communication Error :-{");
    Serial.println("Please check your circuitry");
  } else {
    Serial.print("Could not parse info from the compiler, Time=\"");
    Serial.print(__TIME__);
    Serial.print("\", Date=\"");
    Serial.print(__DATE__);
    Serial.println("\"");
  }
}

void loop() {
}

bool getTime(const char *str)
{
  int Hour, Min, Sec;

  if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false;
  tm.Hour = Hour;
  tm.Minute = Min;
  tm.Second = Sec;
  return true;
}

bool getDate(const char *str)
{
  char Month[12];
  int Day, Year;
  uint8_t monthIndex;

  if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false;
  for (monthIndex = 0; monthIndex < 12; monthIndex++) {
    if (strcmp(Month, monthName[monthIndex]) == 0) break;
  }
  if (monthIndex >= 12) return false;
  tm.Day = Day;
  tm.Month = monthIndex + 1;
  tm.Year = CalendarYrToTm(Year);
  return true;
}

Zum Testen der Uhrzeit benutze ich folgenden Sketch:

#include <DS1307RTC.h>
#include <Time.h>
#include <Wire.h>

void setup() {
  Serial.begin(9600);
  while (!Serial) ; // wait for serial
  delay(200);
  Serial.println("DS1307RTC Read Test");
  Serial.println("-------------------");
}

void loop() {
  tmElements_t tm;

  if (RTC.read(tm)) {
    Serial.print("Ok, Time = ");
    print2digits(tm.Hour);
    Serial.write(':');
    print2digits(tm.Minute);
    Serial.write(':');
    print2digits(tm.Second);
    Serial.print(", Date (D/M/Y) = ");
    Serial.print(tm.Day);
    Serial.write('/');
    Serial.print(tm.Month);
    Serial.write('/');
    Serial.print(tmYearToCalendar(tm.Year));
    Serial.println();
  } else {
    if (RTC.chipPresent()) {
      Serial.println("The DS1307 is stopped.  Please run the SetTime");
      Serial.println("example to initialize the time and begin running.");
      Serial.println();
    } else {
      Serial.println("DS1307 read error!  Please check the circuitry.");
      Serial.println();
    }
    delay(9000);
  }
  delay(1000);
}

void print2digits(int number) {
  if (number >= 0 && number < 10) {
    Serial.write('0');
  }
  Serial.print(number);
}

Beide Sketches sind Bestandteil der DS1307RTC Library und funktionieren, solang der Strom nicht getrennt wird einwandfrei.
Wenn ich das Netzteil ziehe, zeigt mir der 2. Sketch 01.01.1970 an. Die komplette Uhrzeit und Datum ist weg.

Meine Pinbelegung ist folgende:

GND- Minus
VCC- 5V
SDA- AnalogPin4
SCL- AnalogPin5

angeschlossen an einen ArduinoUno

Ich hab mal ein bissl recherchiert:

Ohne das Modul angeschlossen zu haben müsste ich ja am BAT Pin gegen Masse ca. 3V haben.

Ich habe 0,0000V :cold_sweat:

Vielleicht hilft das weiter:

Danke schon mal im Voraus.

Wenn am BAT-Pin wirklich 0V zu messen sind, solltest du vielleicht die Schutzfolie von der Batterie abziehen. :wink:

Ansonsten ist der Befehl    RTC.write(tm) in setup natürlich Käse, wenn die Uhr schon läuft.

Wanderfalke: Ohne das Modul angeschlossen zu haben müsste ich ja am BAT Pin gegen Masse ca. 3V haben.

Ich habe 0,0000V :cold_sweat:

Vielleicht hilft das weiter:

Wieviel Spannung Du am BAT Pin haben müßtest, das hängt von der Schaltung und der Stütz-Batterie bzw. Stütz-Akku ab.

Die üblichen RTC-Tiny Module aus China kommen (meistens) mit einem LIR 2032 Akku. Ein LIR2032 hat 3.6V Nennspannung und kann bis zu 4.2V Ladeendspannung aufgeladen werden.

Hast Du ein "RTC Tiny" Modul? Oder was sonst?

Und was hast Du als Stütztbatterie: Eine LIR2032 Lithiumakku-Knopfzelle oder eine CR2032 Lithium-Knopfzelle?

Und wenn Du die Batterie mal aus der Fassung nimmst, welche Spannung mißt Du direkt an der Knopfzelle?

Das hört sich für mich nach einem defekten/schlechten Kontakt an.
Check doch mal das RTC -Modul soweit es geht auf Fehler…

Habe so ca. 15 Stück mittlerweise verbaut, 3 davon waren ähnlich defekt mit losen Kontaktblech und durchgeschmurgelter Widerstand .
Qualitäts-/Funktionskontrolle findet in der Herstellung WENN dann auch mit Netzteil statt

Der mit der Schutzfolie war gut 8)

Es funktioniert jetzt.

Irgendwie war die Knopfzellenhalterung schuld. Die Zelle war garnicht richtig eingerastet.

Ich hab jetzt die LIR2032 drin und die CR2032 funktioniert auch und ich habe am BAT Pol auch wieder Spannung.

Und schon wird auch die Zeit gespeichert.

DANKE.

Na siehste :)

Prima das es jetzt funktioniert !