|
@@ -202,16 +202,14 @@ static void getADCValues(void) {
|
|
|
|
|
|
avgVal = ADC_GetValues();
|
|
|
|
|
|
- Voltage = *avgVal;
|
|
|
- Current = *(avgVal + 1);
|
|
|
-
|
|
|
- slowBuf.Voltage[slowBuf.idx] = Voltage;
|
|
|
- slowBuf.Current[slowBuf.idx] = Current;
|
|
|
-
|
|
|
slowBuf.idx ++;
|
|
|
if (slowBuf.idx >= VALUES_BUFFER_SIZE) {
|
|
|
slowBuf.idx = 0;
|
|
|
}
|
|
|
+
|
|
|
+ slowBuf.Voltage[slowBuf.idx] = *avgVal;
|
|
|
+ slowBuf.Current[slowBuf.idx] = *(avgVal + 1);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -220,21 +218,20 @@ static void getADCValues(void) {
|
|
|
*/
|
|
|
static void calculateValues(void) {
|
|
|
uint8_t i;
|
|
|
- uint16_t c=0;
|
|
|
- uint32_t v=0;
|
|
|
+ uint32_t v=0, c=0; // for max values 10 * 12 000 mA, and 10 * 36 000 mV
|
|
|
|
|
|
for (i=0; i<VALUES_BUFFER_SIZE; i++) {
|
|
|
v += slowBuf.Voltage[i];
|
|
|
c += slowBuf.Current[i];
|
|
|
}
|
|
|
|
|
|
- v = (v + (VALUES_BUFFER_SIZE/2)) / VALUES_BUFFER_SIZE;
|
|
|
- c = (c + (VALUES_BUFFER_SIZE/2)) / VALUES_BUFFER_SIZE;
|
|
|
+ Voltage = (v + (VALUES_BUFFER_SIZE/2)) / VALUES_BUFFER_SIZE;
|
|
|
+ Current = (c + (VALUES_BUFFER_SIZE/2)) / VALUES_BUFFER_SIZE;
|
|
|
|
|
|
if (Current > 0) {
|
|
|
|
|
|
- // millivolt * milliamper = microwatt, convert to milliwatt
|
|
|
- Power = ((v * c) + 500) / 1000;
|
|
|
+ // millivolt * milliamper = microwatt, convert it to milliwatt
|
|
|
+ Power = ((uint32_t)(v * c) + 500) / 1000;
|
|
|
|
|
|
CapacityAH += Current;
|
|
|
CapacityWH += Power;
|
|
@@ -360,7 +357,7 @@ static void showValue(uint32_t val, uint8_t pos) {
|
|
|
pos ++;
|
|
|
MAX7219_WriteData(dig[pos], num[tmp]);
|
|
|
|
|
|
- } else if(val >= 10000){ // 00.00
|
|
|
+ } else if (val >= 10000) { // 00.00
|
|
|
tmp = (uint8_t)(val / 10000);
|
|
|
val %= 10000;
|
|
|
MAX7219_WriteData(dig[pos], num[tmp]);
|