浏览代码

ADC work.

Vladimir N. Shilov 1 年之前
父节点
当前提交
80f46916d1
共有 2 个文件被更改,包括 14 次插入18 次删除
  1. 2 2
      lib/main.h
  2. 12 16
      main.c

+ 2 - 2
lib/main.h

@@ -21,7 +21,7 @@
 #define LCD_LINE_9  103
 
 #define ADC_GRP1_NUM_CHANNELS   1
-#define ADC_GRP1_BUF_DEPTH      10
+#define ADC_GRP1_BUF_DEPTH      100
 #define ADC_CHANNEL_NUM         ADC_CHANNEL_IN9
 #define ADC_REF_VOLTAGE         3300
 
@@ -69,7 +69,7 @@ static const ADCConversionGroup adcgrpcfg1 = {
   ADC_cb,
   NULL,
   0,                                  /* CR1 */
-  0, //(ADC_CR2_EXTTRIG|ADC_CR2_EXTSEL_2), /* CR2, Timer 1 CC1 event, Timer 3 TRGO event */
+  (ADC_CR2_EXTTRIG|ADC_CR2_EXTSEL_2), /* CR2, Timer 1 CC1 event, Timer 3 TRGO event */
   ADC_SMPR2_SMP_AN9(ADC_SAMPLE_71P5), /* smpr1 */
   0,                                  /* SMPR2 */
   ADC_SQR1_NUM_CH(ADC_GRP1_NUM_CHANNELS),/* sqr1 */

+ 12 - 16
main.c

@@ -74,16 +74,11 @@ int main(void) {
 
   /* Activates the ADC1 driver and the temperature sensor. */
   adcStart(&ADCD1, NULL);
-  adcStartConversion(&ADCD1, &adcgrpcfg1, ADC_Data, ADC_GRP1_BUF_DEPTH);
+  adcStartConversionI(&ADCD1, &adcgrpcfg1, ADC_Data, ADC_GRP1_BUF_DEPTH);
 
   /* Starting GPT3 driver, it is used for triggering the ADC. */
   gptStart(&GPTD3, &gptcfg1);
   gptStartContinuousI(&GPTD3, 100);
-//  GPTD1.tim->CCMR1 = 100; // 1Mhz/100=10kHz=100 us
-//  GPTD1.tim->EGR = STM32_TIM_EGR_CC1G; //  Capture/Compare 1 generation
-//  GPTD1.tim->CCMR1= (STM32_TIM_CCMR1_OC1CE | STM32_TIM_CCMR1_OC1M(3));
-//  GPTD1.tim->CCER = STM32_TIM_CCER_CC1E;
-  //?GPTD1.tim->BDTR = STM32_TIM_BDTR_MOE;
 
   /*
    * Buttons
@@ -133,9 +128,9 @@ int main(void) {
       }
     }
 */
-    chsnprintf(buf, 22, "U = %u mV", Voltage);
+    chsnprintf(buf, 22, "U = %4u mV", Voltage);
     ST7735_WriteString(0, LCD_LINE_3, buf, LiberM_7x10, Orange, Black);
-    adcStartConversion(&ADCD1, &adcgrpcfg1, ADC_Data, ADC_GRP1_BUF_DEPTH);
+    //adcStartConversion(&ADCD1, &adcgrpcfg1, ADC_Data, ADC_GRP1_BUF_DEPTH);
     chThdSleepMilliseconds(500);
   }
 }
@@ -237,11 +232,10 @@ static void ADC_cb(ADCDriver *adcp) {
   uint32_t adc_buf = 0;
 
   for (i=0; i<ADC_GRP1_BUF_DEPTH; i++) {
-//    adc_buf += ADC_Data[i] * ADC_Data[i];
-    adc_buf += ADC_Data[i];
+    adc_buf += ADC_Data[i] * ADC_Data[i];
   }
-/*
   // adc_buf - sum of squares. SQRT:
+  adc_buf /= ADC_GRP1_BUF_DEPTH;
   uint32_t val = 0;
   uint32_t step = 1;
   while (step < adc_buf) {
@@ -249,10 +243,12 @@ static void ADC_cb(ADCDriver *adcp) {
     step += 2;
     val ++;
   }
-*/
+
   // transform ADC values to real voltage
-  adc_buf /= ADC_GRP1_BUF_DEPTH;
-  adc_buf *= ADC_REF_VOLTAGE;
-  adc_buf /= 4096;
-  Voltage = adc_buf;
+  val *= ADC_REF_VOLTAGE;
+  val += 2048;
+  val /= 4096;
+  Voltage = val;
+
+  //adcStartConversionI(&ADCD1, &adcgrpcfg1, ADC_Data, ADC_GRP1_BUF_DEPTH);
 }