RV3028 losing time, worse than specificaitons

I’m using a RV3028 module as a realtime clock in an Arduino Nano project.
The RTC code is using the RV-3028-C7 Arduino Library by Constantin Koch.
Initialised as:

if (rtc.begin() etc

Time setting works fine.

A loop reads Unix time using:

    utcTime = rtc.getUNIX();

I’m using Unix time exclusively and converting to user date/time formats, local timezone etc. All this works fine.

Problem is RV3028 is losing time, last night about 3 minutes in 16 hours. Powered by external 12V to Arduino and 5V to RV3028. No loss of power so not battery backup related.

It’s cold (outside at 1C) so worst case from spec would be -20ppm, about 1 second.

I’ve checked with a spare RV3028 module, results the same.

I have the utcTime = rtc.getUNIX(); in a tight loop, could this be causing clock to lose time? I can’t see how :-(.

Just wondering whether EVI pin is tied? Datasheet says pin should not be left floating.

Any suggestions gratefully appreciated!



Having taken another look at the RV-3028 app manual there’s some mention of the UNIX Time counter increment being inhibited during I2C write access, and during read access there’s mention of “memorized” clock ticks during long reads. I guess this might imply a possibility of lost ticks.

As a next step I’m going to insert a 1 sec delay between reads (simple Arduino delay(1000) should be fine to see if it helps).

A better way would be to trigger an interrupt every second and complete the read as part of the interrupt handler (as suggested in the app manual). That will have to wait until I can wire in the INT signal.