Browse Source

[SAMD51] Activate ADCs oversampled 12bits (#15874)

Giuliano Zaro 5 years ago
parent
commit
bb93ea1be4
2 changed files with 5 additions and 2 deletions
  1. 3
    1
      Marlin/src/HAL/HAL_SAMD51/HAL.cpp
  2. 2
    1
      Marlin/src/HAL/HAL_SAMD51/HAL.h

+ 3
- 1
Marlin/src/HAL/HAL_SAMD51/HAL.cpp View File

@@ -442,9 +442,11 @@ void HAL_adc_init() {
442 442
       // Preloaded data (fixed for all ADC instances hence not loaded by DMA)
443 443
       adc->REFCTRL.bit.REFSEL = ADC_REFCTRL_REFSEL_AREFA_Val;               // VRefA pin
444 444
       SYNC(adc->SYNCBUSY.bit.REFCTRL);
445
-      adc->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_10BIT_Val;
445
+      adc->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_12BIT_Val;
446 446
       SYNC(adc->SYNCBUSY.bit.CTRLB);
447 447
       adc->SAMPCTRL.bit.SAMPLEN = (6 - 1);                                  // Sampling clocks
448
+      adc->AVGCTRL.reg = ADC_AVGCTRL_SAMPLENUM_16 | ADC_AVGCTRL_ADJRES(4);  // 16 Accumulated conversions and shift 4 to get oversampled 12 bits result
449
+      SYNC(adc->SYNCBUSY.bit.AVGCTRL);
448 450
       // Registers loaded by DMA
449 451
       adc->DSEQCTRL.bit.INPUTCTRL = true;
450 452
 

+ 2
- 1
Marlin/src/HAL/HAL_SAMD51/HAL.h View File

@@ -109,8 +109,9 @@ extern uint16_t HAL_adc_result;     // result of last ADC conversion
109 109
 
110 110
 void HAL_adc_init();
111 111
 
112
+#define HAL_ADC_FILTERED            // Disable oversampling done in Marlin as ADC values already filtered in HAL
113
+#define HAL_ADC_RESOLUTION  12
112 114
 #define HAL_START_ADC(pin)  HAL_adc_start_conversion(pin)
113
-#define HAL_ADC_RESOLUTION  10
114 115
 #define HAL_READ_ADC()      HAL_adc_result
115 116
 #define HAL_ADC_READY()     true
116 117
 

Loading…
Cancel
Save