Ich habe ein Gerät gebaut, welches beim Laden eines Akkus die mAh zählt,
Funktion ist gegeben. Der µC ist ein AT328 als A*-Nano.
1 | unsigned long mAsek = 0;
|
2 | unsigned long mAh = 0;
|
3 | float Strom = 10.5;
|
4 |
|
5 | mAsek = mAsek + (Strom * 5); // Messung in mA alle 5 Sekunden
|
6 | mAh = mAsek / 3600;
|
Im Test erfolgt bei etwa 125.000 mAh ein Überlauf. Das stört nicht, da
ich diese niemals zu erreichen gedenke. Aber:
unsigned long mAsek müsste bis 2^32 = 4.294.967.296 reichen.
Teile ich die durch 3600, komme ich auf 1.193.046 mAh - wo ist mein
Denkfehler?
Gucke ich auf den Timer millis() und teile 4.294.967.296 durch 3600 und
durch 24, ergeben sich die bekannten 49,7 Tage - von daher sollte 2^32
doch passen.