Browse Source

Убрал оверсэмплинг и фильтрацию

Vladimir N. Shilov 9 years ago
parent
commit
7b138a5beb
1 changed files with 14 additions and 2 deletions
  1. 14 2
      lib/adc.c

+ 14 - 2
lib/adc.c

@@ -194,7 +194,7 @@ INTERRUPT_HANDLER(DMA1_CHANNEL0_1_IRQHandler,2)
 uint16_t * ADC_GetValues(void) {
   static uint16_t avgVal[ADC_BUFFER_SIZE];
   uint32_t volt=0, curr=0;
-  uint16_t middle, shunt_volt;
+  uint16_t shunt_volt;
   uint8_t i;
 
   /* Summarize buffers values */
@@ -206,14 +206,24 @@ uint16_t * ADC_GetValues(void) {
   /* Попытка оверсемплинга, чтобы сделать шаг ~1мВ
      делим на 8, умножаем на опорное напряжение, умножаем на входной делитель
      и делим на (12 бит АЦП * 8). */
-
+#ifdef ADC_USE_V_OVERS
   volt >>= 3;
   volt *= ADC_REF;
   volt *= ADC_VOLT_K;
   volt /= ADC_ODIV;
+#else
+  volt += 32;
+  volt >>= 6;
+  volt *= ADC_REF;
+  volt *= ADC_VOLT_K;
+  volt /= ADC_DIV;
+#endif // ADC_USE_V_OVERS
 
   /* получаем среднее по току, затем фильтруем */
+  curr += 32;
   curr >>= 6;
+#ifdef ADC_USE_C_FILTR
+  uint16_t middle;
   middle = curr + 8;
   middle &= 0xFFF0;
   curr = 0;
@@ -236,6 +246,8 @@ uint16_t * ADC_GetValues(void) {
   } else {
     curr = middle;
   }
+#endif // ADC_USE_C_FILTR
+
   curr *= ADC_REF;
   curr /= ADC_DIV;