34
34
35
35
#include "shared-bindings/microcontroller/Pin.h"
36
36
37
+ #include <string.h>
38
+
37
39
#define DEFAULT_VREF 1100
38
- #define NO_OF_SAMPLES 64
40
+ #define NO_OF_SAMPLES 2
39
41
#define ATTENUATION ADC_ATTEN_DB_11
40
42
#define DATA_WIDTH ADC_WIDTH_BIT_13
41
43
@@ -66,11 +68,14 @@ uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {
66
68
adc1_config_channel_atten ((adc1_channel_t )self -> pin -> adc_channel , ATTENUATION );
67
69
} else if (self -> pin -> adc_index == ADC_UNIT_2 ) {
68
70
adc2_config_channel_atten ((adc2_channel_t )self -> pin -> adc_channel , ATTENUATION );
71
+ } else {
72
+ mp_raise_ValueError (translate ("Invalid Pin" ));
69
73
}
70
74
71
75
// Automatically select calibration process depending on status of efuse
72
- esp_adc_cal_characteristics_t * adc_chars = calloc (1 , sizeof (esp_adc_cal_characteristics_t ));
73
- esp_adc_cal_characterize (self -> pin -> adc_index , ATTENUATION , DATA_WIDTH , DEFAULT_VREF , adc_chars );
76
+ esp_adc_cal_characteristics_t adc_chars ;
77
+ memset (& adc_chars , 0 , sizeof (adc_chars ));
78
+ esp_adc_cal_characterize (self -> pin -> adc_index , ATTENUATION , DATA_WIDTH , DEFAULT_VREF , & adc_chars );
74
79
75
80
uint32_t adc_reading = 0 ;
76
81
//Multisampling
@@ -89,7 +94,7 @@ uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {
89
94
adc_reading /= NO_OF_SAMPLES ;
90
95
91
96
// This corrects non-linear regions of the ADC range with a LUT, so it's a better reading than raw
92
- uint32_t voltage = esp_adc_cal_raw_to_voltage (adc_reading , adc_chars );
97
+ uint32_t voltage = esp_adc_cal_raw_to_voltage (adc_reading , & adc_chars );
93
98
return voltage * ((1 << 16 ) - 1 )/3300 ;
94
99
}
95
100
0 commit comments