Browse Source

Something like the truth.

Vladimir N. Shilov 10 months ago
parent
commit
95275ad0eb
2 changed files with 13 additions and 11 deletions
  1. 4 2
      inc/board.h
  2. 9 9
      src/main.c

+ 4 - 2
inc/board.h

@@ -15,13 +15,14 @@
 #define ADC_CHNLI ADC1_CHANNEL_4
 #define ADC_SCHTI ADC1_SCHMITTTRIG_CHANNEL4
 #define ADC_SMPLS 64
-#define ADC_RES   1023UL
-// Supply voltage in mili volts
+#define ADC_RES   (1023UL << 3)
+// Supply voltage in mili volts * fixed coeeficient
 #define ADC_VREF  3030UL
 // Voltage channel
 #define VOLTAGE_MULT_TOP  15UL
 #define VOLTAGE_MULT_BOT  100UL
 #define VOLT_MUL_K        100UL
+#define VOLT_MUL_KD       110UL
 #define VOLT_MUL_DIV      (VOLTAGE_MULT_TOP * ADC_RES)
 #define VOLTAGE_MUL       (uint16_t)((VOLT_MUL_K * (VOLTAGE_MULT_BOT * ADC_VREF) + (VOLT_MUL_DIV/2)) / VOLT_MUL_DIV)
 // Current channel
@@ -29,6 +30,7 @@
 #define CURRENT_MULT_TOP  15UL
 #define CURRENT_MULT_BOT  1UL
 #define CUR_MUL_K         100UL
+#define CUR_MUL_KD        136UL
 #define CUR_MUL_DIV       (CURRENT_MULT_TOP * ADC_RES)
 #define CURRENT_MUL       (uint16_t)((CUR_MUL_K * (CURRENT_MULT_BOT * ADC_VREF * CURREN_SHUNT) + (CUR_MUL_DIV/2)) / CUR_MUL_DIV)
 

+ 9 - 9
src/main.c

@@ -50,14 +50,14 @@ void main(void)
 {
   /* Board Configuration */
   boardInit();
-  Delay(1000);
+  //Delay(1000);
 
   int8_t i;
   uint32_t tbuf;
   /* Infinite loop */
   while (1) {
-    //wfi();
-    Delay(100);
+    wfi();
+    //Delay(100);
     if (BufferIndex >= ADC_SMPLS) {
       BufferIndex = 0;
       tbuf = 0;
@@ -70,20 +70,20 @@ void main(void)
         ADC1->CSR &= (uint8_t)(~ADC1_CSR_CH);
         ADC1->CSR |= (uint8_t)(ADC_CHNLI);
 
-        tbuf /= ADC_SMPLS;
+        tbuf /= (ADC_SMPLS >> 3);
         tbuf *= VOLTAGE_MUL;
-        tbuf += VOLT_MUL_K/2;
-        tbuf /= VOLT_MUL_K;
+        tbuf += VOLT_MUL_KD/2;
+        tbuf /= VOLT_MUL_KD;
         Voltage = tbuf;
       } else {
         MeasureMode = voltage_mode;
         ADC1->CSR &= (uint8_t)(~ADC1_CSR_CH);
         ADC1->CSR |= (uint8_t)(ADC_CHNLU);
 
-        tbuf /= ADC_SMPLS;
+        tbuf /= (ADC_SMPLS >> 3);
         tbuf *= CURRENT_MUL;
-        tbuf += CUR_MUL_K/2;
-        tbuf /= CUR_MUL_K;
+        tbuf += CUR_MUL_KD/2;
+        tbuf /= CUR_MUL_KD;
         Current = tbuf;
       }