ソースを参照

Мелкий фикс.

Vladimir N. Shilov 8 年 前
コミット
557df622f9
2 ファイル変更21 行追加14 行削除
  1. 11 1
      ReadMe.txt
  2. 10 13
      src/main.c

+ 11 - 1
ReadMe.txt

@@ -373,7 +373,7 @@ Factory_VREFINT у меня == 0x7E, т.е. полное значение 0x067E
 И нужно будет увешать всё фильтрующими дроселями.
 
 ---
-22.06.2017
+2017.06.22
 
 Вместо 10 кОм поставил пару резисторов по 5.624 кОм.
 
@@ -387,3 +387,13 @@ Factory_VREFINT у меня == 0x7E, т.е. полное значение 0x067E
 корпусировать.
 
 Так и не понял почему тормозили показания. Нужно попытаться разобраться.
+
+---
+2017.06.26
+
+Понял -- я брал индекс следующего элемента в массиве, т.е. того, который 
+был секунду назад. Переделал.
+
+Думал сделать гашение незначащих нулей, но забил.
+
+Плату развёл дебильно -- теперь думай как её присобачить к корпусу...

+ 10 - 13
src/main.c

@@ -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]);