Quote:
Originally Posted by Daox
Thanks a lot for taking the time to look through this thingstodo! I appreciate it very much.

I'm on holidays  this is the kind of thing that I enjoy.
Since your CurrentRead can now be somewhere between 511 and 1023, 1023  0 (potentially worst case) = 1023 * 0.78125 *.0000002777 gives 0.000221943046875 so I've changed the 0.4 rollover to 0.0003.
I chose a single digit of precision to maximize the total Ah you are calculating.
After you get your code updated, you may want to rerun one or two tests and see if your AHused is still tracking.
This
Code:
// Convert currentread to amps
CurrentRead = (RawCurrentRead  CurrentSensorCalib) * .78125;
// Convert to AH used and add to total
AHused = AHused + (CurrentRead * 0.0000002777);
would become something like this
Code:
// Convert currentread to amps
CurrentRead = (RawCurrentRead  CurrentSensorCalib) * .78125;
// Convert to AH & add to low portion of total
AHusedLow = AHusedLow + (CurrentRead * 0.0000002777);
// Update AHused
if (AHusedLow > 0.0003) {
AHused = AHused + 0.0003;
AHusedLow = AHusedLow  0.0003;
}
This is the simplest and fastest code change  I hesitate to put too much extra code in the ISR.
With 6 digits of precision, adding .0003 would give you good accuracy up to 99.9999 Ah for sure. Likely a bit higher but I've lost a lot of the details on floating point accuracy ... I'd have to relearn some of that.