Arduino MEGA + RTC ds3231 + TIme Alarm : Las alarmas se adelantan..

Estimados, primero que nada feliz año para todos!!
Les comento me está ocurriendo algo realmente muy raro:
Tengo un mega con un reloj ds3231, lo pongo en hora, y funciona correctamente, no adelanta ni atrasa.
Ahorar bien usando la librería time alarm, al cabo de unas 24 horas las alarmas se empiezan a correr, por ejemplo se debe ejecutar a las 12:00 y se ejecuta 12:17. Consulto la hora y la misma está correcta.
La pregunta es : time alarm que hora tiene en cuenta la del rtc???

Le paso el código como seteo la hora en el setup:

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));
  }

 // Ponemos en hora, solo la primera vez, luego comentar y volver a cargar.
 // Ponemos en hora con los valores de la fecha y la hora en que el sketch ha sido compilado.
 // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  DateTime now = rtc.now();
  setTime(now.hour(), now.minute(), now.second(), now.month(), now.day(), now.year());

Alguna sugerencia??? gracias!!!!!

Yo he tenido comportamientos muy raros con un DS3231. Algo como lo que comentas de 17 minutos no y menos en undía pero si en 1 o 2 meses.

La pregunta sería???, time alarms de donde saca el tiempo transcurrido?? del rtc???
o lo calcula el usando a arduino????

Si tu RTC falla es un tema que debes determinar vos!!
A mi me costó mucho porque tenes que dejar que transcurra un dia o mas para que se manifieste la falla.

TimeAlarms saca la hora de la hora del sistema.

Ahi pusiste la rutina de perdida de energía que arranca con los valores de compilación al comenzar OJO con eso pero luego solo restaura los valores del RTC.

Asi que esos datos se los pasa al reloj del sistema.
Es como que usaras dos relojes.. uno con millis() que se ajusta al ritmo que vos le das con las instrucción de sincronización y otro con el RTC que es consultado a ese ritmo.