How to permanently check lithium battery health without battery discharge

My Chronodot has battery backup connected to VBAT pin. I think, the battery should be monitored whether need to be replaced. My question is, how to securely connect the battery to Arduino and measure voltage/health without draining it.

I know it’s probably totally unnecessary, but I’m concerned about the functional principle and try to program it.


The tolerance for a small current drain is a variable tolerance. I expect you can tolerate 1 micro amp of current drain during the test. If that is too much, then please specify your tolerance for nano amps or pico amps of current drain into the Arduino during the test. Zero current is not realistic during a test using Arduino.

Is that RTC chip capable to measure the voltage ?

Do you know the leak current of the battery ? Suppose 200mAh and it lasts for 10 years, and the Arduino may lower that to 9 years. 0.2Ah / (10 * 365 * 24 hours) = 2 uA (truncated). Ten percent of that = 0.2uA At 3V, a resistor of between 10M and 15M has a current of 0.2uA.

Measuring a voltage via a resistor of 10M is not accurate. I think it can't be done.

When the Arduino is running, there is no issue because the 3V battery can be connected to an Arduino analog input pin and will draw negligible current. The issue is when the Ardino is powered down, because then the battery would discharge into the input pin via the pin protection diode, which connects to the Vcc pin. You have a couple of options:

  1. Use a high value series resistor to limit the discharge, along with a 10nF or greater capacitor between the pin and ground. The limiting factor here is the input resistance of the ADC, which is quoted on the datasheet as 100Mohms typical. So for example, if you use a 2.7Mohm resistor between the battery and the pin, this limits the discharge current to about 1uA, which by itself will discharge the battery (120mAh according to the Chronodot page) in 13.7 years of Arduino-powered-down time; and the series resistor will introduce an error of typically 2.7% (more in the worst case). You may be happy to accept this error.

  2. Have the Arduino drive an NPN transistor or N-channel small signal mosfet, which in turn drives a low-threshold-voltage P-channel mosfet that connects the battery to the Arduino pin. The Arduino can turn on the mosfet only when it wants to take a battery voltage reading.

See here:

Modern Lithium Ion cells have a very flat discharge curve and other methods must be used to determine the State of Charge

It might be do-able but you will probably need a quite precise reading.

Thank you for your advice!