ds3231 resta in ritardo

Ciao,
sto usando un modulo ds3231 per un progetto più grande. Il modulo è quello classico che si trova già su PCB con anche una memoria.
L'ho modificato rimuovendo la resistenza per rimuovere il circuito carica batteria ed inoltre rimuovendo il led di accensione per risparmiare il consumo elettrico. Ho montato una batteria CR2032 classica.
Ho misurato la tensione al Vbat e mi da 3,2V, quindi direi che il problema non risiede li.
Di fatto se aggiorno la data/ora, e mantengo l'alimentazione via USB, tutto funziona bene, se invece rimuovo l'alimentazione USB e dopo qualche minuto vado a vedere che ora ha, mi torna con l'ora vecchia e non aggiornata.
Dove potrebbe risiedere il problema? chip difettoso?

// Date and time functions using a DS3231 RTC connected via I2C and Wire lib
#include <Wire.h>
#include <RTClibExtended.h>

RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup () {

#ifndef ESP8266
  while (!Serial); // for Leonardo/Micro/Zero
#endif

  Serial.begin(9600);

  delay(3000); // wait for console opening

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }
}

void loop () {
  DateTime now = rtc.now();

  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();

  Serial.print(" since midnight 1/1/1970 = ");
  Serial.print(now.unixtime());
  Serial.print("s = ");
  Serial.print(now.unixtime() / 86400L);
  Serial.println("d");

  // calculate a date which is 7 days and 30 seconds into the future
  DateTime future (now + TimeSpan(7, 12, 30, 6));

  Serial.print(" now + 7d + 30s: ");
  Serial.print(future.year(), DEC);
  Serial.print('/');
  Serial.print(future.month(), DEC);
  Serial.print('/');
  Serial.print(future.day(), DEC);
  Serial.print(' ');
  Serial.print(future.hour(), DEC);
  Serial.print(':');
  Serial.print(future.minute(), DEC);
  Serial.print(':');
  Serial.print(future.second(), DEC);
  Serial.println();

  Serial.println();
  delay(8000);
}

un appunto se non era abbastanza chiaro con il messaggio di prima.
Dopo aver impostato il tempo con rtc.adjust(DateTime(F(DATE), F(TIME))); tutto funziona bene.
Se rimuovo l'alimentazione principale, e mantenenendo la batteria, una volta che ricollego il tutto e senza impostare nuovamente l'orario, mi ritorna al momento in cui ho disconnesso l'alimentazione principale.
Ho provato diverse librerie, due moduli diversi ma sempre uguale. Ho cambiato pure la batteria.
Uso ovviamente solo i pin VCC,GND,SDA e SCL

ma se rimuovi l'alimentazione da arduino, appena lo ricolleghi questa
rtc.adjust(DateTime(F(DATE), F(TIME)))
non resetta l'orario?

rtc.adjust(DateTime(F(DATE), F(TIME)))

L'ora e data viene presa dal PC al momento della compilazione. Quando viene eseguito lo sketch imposta l' ora e data a quei valori.
Devi compilare lo sketch con rtc.adjust(DateTime(F(DATE), F(TIME))) e eseguirlo una volta (subito dopo la compilazione e poi sovrascriverlo con una funzione che non ha piú rtc.adjust(DateTime(F(DATE), F(TIME))). Cosí non ti ricarica la data e ora vecchia.

Ciao Uwe

secondo me la makro F() é usata in modo errato in questo caso.