Selaa lähdekoodia

ADC don't work as expected.

Vladimir N. Shilov 1 vuosi sitten
vanhempi
commit
ee7c976adc
4 muutettua tiedostoa jossa 27 lisäystä ja 22 poistoa
  1. 4 4
      cfg/mcuconf.h
  2. 3 3
      lib/main.h
  3. 1 1
      lib/onewire/onewire.c
  4. 19 14
      main.c

+ 4 - 4
cfg/mcuconf.h

@@ -87,9 +87,9 @@
 /*
  * GPT driver system settings.
  */
-#define STM32_GPT_USE_TIM1                  TRUE
+#define STM32_GPT_USE_TIM1                  FALSE
 #define STM32_GPT_USE_TIM2                  FALSE
-#define STM32_GPT_USE_TIM3                  FALSE
+#define STM32_GPT_USE_TIM3                  TRUE
 #define STM32_GPT_USE_TIM4                  FALSE
 #define STM32_GPT_USE_TIM5                  FALSE
 #define STM32_GPT_USE_TIM8                  FALSE
@@ -134,8 +134,8 @@
 #define STM32_PWM_USE_ADVANCED              FALSE
 #define STM32_PWM_USE_TIM1                  FALSE
 #define STM32_PWM_USE_TIM2                  FALSE
-#define STM32_PWM_USE_TIM3                  TRUE
-#define STM32_PWM_USE_TIM4                  FALSE
+#define STM32_PWM_USE_TIM3                  FALSE
+#define STM32_PWM_USE_TIM4                  TRUE
 #define STM32_PWM_USE_TIM5                  FALSE
 #define STM32_PWM_USE_TIM8                  FALSE
 #define STM32_PWM_TIM1_IRQ_PRIORITY         7

+ 3 - 3
lib/main.h

@@ -69,8 +69,8 @@ static const ADCConversionGroup adcgrpcfg1 = {
   ADC_cb,
   NULL,
   0,                                  /* CR1 */
-  ADC_CR2_EXTTRIG,                    /* CR2, Timer 1 CC1 event */
-  ADC_SMPR1_SMP_AN10(ADC_SAMPLE_71P5),/* smpr1 */
+  (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 */
   0,                                  /* SQR2 */
@@ -80,7 +80,7 @@ static const ADCConversionGroup adcgrpcfg1 = {
 static const GPTConfig gptcfg1 = {
   .frequency    =  1000000U,
   .callback     =  NULL,
-  .cr2          =  TIM_CR2_MMS_2, /* MMS = 100 = TRGO on OC1REF. */
+  .cr2          =  TIM_CR2_MMS_1, /* MMS = 010 - TRGO on Update Event. */
   .dier         =  0U
 };
 

+ 1 - 1
lib/onewire/onewire.c

@@ -85,7 +85,7 @@ static PWMConfig pwm_cfg = {
  *
  */
 static const onewireConfig ow_cfg = {
-    &PWMD3,
+    &PWMD4,
     &pwm_cfg,
     PWM_OUTPUT_ACTIVE_LOW,
     ONEWIRE_MASTER_CHANNEL,

+ 19 - 14
main.c

@@ -24,7 +24,7 @@
 
 #include "main.h"
 #include "st7735.h"
-#include "onewire.h"
+//#include "onewire.h"
 
 /*===========================================================================*/
 /* Generic code.                                                             */
@@ -70,20 +70,20 @@ int main(void) {
   /*
    * Creates the blinker thread.
    */
-  //chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
+  chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
 
   /* Activates the ADC1 driver and the temperature sensor. */
   adcStart(&ADCD1, NULL);
+  adcStartConversion(&ADCD1, &adcgrpcfg1, ADC_Data, ADC_GRP1_BUF_DEPTH);
 
   /* Starting GPT3 driver, it is used for triggering the ADC. */
-  gptStart(&GPTD1, &gptcfg1);
+  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;
-//  gptStartContinuousI(&GPTD1, 100);
-  adcStartConversion(&ADCD1, &adcgrpcfg1, &ADC_Data, ADC_GRP1_BUF_DEPTH); //?
 
   /*
    * Buttons
@@ -102,6 +102,7 @@ int main(void) {
   /*
    * Normal main() thread activity.
    */
+  /*
   ST7735_WriteString(0, LCD_LINE_1, "OneWire search...", LiberM_7x10, Blue, Black);
   onewireMeasure();
   int32_t t;
@@ -112,9 +113,10 @@ int main(void) {
   if (n == 0) {
     ST7735_WriteString(0, LCD_LINE_1, "DS18B20 not found.", LiberM_7x10, Red, Black);
   }
-
+*/
   int a, b;
   while (true) {
+/*
     if (n != 0) {
       onewireMeasure();
       onewire_error_t err = onewireGetErrorCode();
@@ -130,6 +132,7 @@ int main(void) {
         ST7735_WriteString(0, LCD_LINE_1, buf, LiberM_7x10, Red, Black);
       }
     }
+*/
     chsnprintf(buf, 22, "U = %u mV", Voltage);
     ST7735_WriteString(0, LCD_LINE_3, buf, LiberM_7x10, Orange, Black);
     chThdSleepMilliseconds(1000);
@@ -230,12 +233,13 @@ static uint8_t X_centered(const uint8_t len, const uint8_t pix) {
 static void ADC_cb(ADCDriver *adcp) {
   (void)adcp;
   int i;
-  uint64_t adc_buf = 0;
-  palToggleLine(LINE_LED);
+  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_Data[i];
+    adc_buf += ADC_Data[i];
   }
-
+/*
   // adc_buf - sum of squares. SQRT:
   uint32_t val = 0;
   uint32_t step = 1;
@@ -244,9 +248,10 @@ static void ADC_cb(ADCDriver *adcp) {
     step += 2;
     val ++;
   }
+*/
   // transform ADC values to real voltage
-  val /= ADC_GRP1_BUF_DEPTH;
-  val *= ADC_REF_VOLTAGE;
-  val /= 4096;
-  Voltage = val;
+  adc_buf /= ADC_GRP1_BUF_DEPTH;
+  adc_buf *= ADC_REF_VOLTAGE;
+  adc_buf /= 4096;
+  Voltage = adc_buf;
 }