This is an interesting challenge, I have only come up with one solution, which is kinda crude, and will be computationally relatively heavy. After all, we're trying to make an ADC for a non-ADC MCU. So this is more like proof of concept that you CAN estimate voltage without ADC:
How I imagine this little thing should work:
- VBAT_SNS is just your battery voltage. It could be fed directly from the battery or, better, via P-Ch. MOSFET, that you open when you want to measure battery. If MCU is fed directly from the battery, it can be just a GPIO OUTPUT HIGH. It feeds reference 1.25V (as an example). Make sure to find the right zener and and resistor for it to have stable voltage. Or just get a voltage reference as a chip in SOT-23.
- RCEN will be initially GPIO OUTPUT LOW. When you want to measure voltage, you OUTPUT HIGH it (or connect to battery voltage via opening p-channel mosfet), You start charging the cap via resistor. At some point the voltage on cap is greater than reference, comparator goes HIGH. You measure the time it took to exceed 1.25V (between RCEN output HIGH and SNSINT HIGH). Now you can use formula:
Vc = V-(V*exp(-t/(R*C)))
Vc = Reference voltage (Zener's)
V = VBAT
t = time between RCEN HIGH and SNSINT HIGH
R = R3 resistance
C = C1 capacitance
Took formula from HERE
So you know all but one value - V. Honestly, this is so computationally heavy, I wouldn't want to implement in an MCU.
Poor little MCU don't want anything to do with exponents. Can you do it? Well, yeah. At least estimate. Should you do it? No.
Note: there will be some input current in the comparator, you might want to keep the resistor of RCEN relatively low not to care about it, but then get some larger cap. Better ceramic, they have less leakage current, will give cleaner results, if this is applicable in this case.
Anyway, this problem feels more like fun puzzle to invent a neat circuit rather than practical thing. From practical point of view, I seriously doubt it's worth implementing for any reason other than "look what I can do"