Skip to content

Commit e92634a

Browse files
committed
Add analogSetAttenuation and analogSetPinAttenuation
1 parent 7defc6e commit e92634a

File tree

2 files changed

+46
-7
lines changed

2 files changed

+46
-7
lines changed

‎cores/esp32/esp32-hal-adc.c‎

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
#include"soc/rtc_cntl_reg.h"
2323
#include"soc/sens_reg.h"
2424

25-
staticuint8_t__analogAttenuation=0;//0db
25+
staticuint8_t__analogAttenuation=3;//11db
2626
staticuint8_t__analogWidth=3;//12 bits
2727
staticuint8_t__analogCycles=8;
2828
staticuint8_t__analogSamples=0;//1 sample
@@ -66,22 +66,24 @@ void __analogSetClockDiv(uint8_t clockDiv){
6666
SET_PERI_REG_BITS(SENS_SAR_READ_CTRL2_REG, SENS_SAR2_CLK_DIV, __analogClockDiv, SENS_SAR2_CLK_DIV_S);
6767
}
6868

69-
void__analogSetAttenuation(uint8_tattenuation){
69+
void__analogSetAttenuation(adc_attenuation_tattenuation)
70+
{
7071
__analogAttenuation=attenuation&3;
7172
uint32_tatt_data=0;
72-
inti=8;
73+
inti=10;
7374
while(i--){
7475
att_data |= __analogAttenuation << (i*2);
7576
}
76-
SET_PERI_REG_BITS(SENS_SAR_MEAS_START1_REG, SENS_MEAS1_DATA_SAR, att_data, SENS_MEAS1_DATA_SAR_S);
77-
SET_PERI_REG_BITS(SENS_SAR_MEAS_START2_REG, SENS_MEAS2_DATA_SAR, att_data, SENS_MEAS2_DATA_SAR_S);
77+
WRITE_PERI_REG(SENS_SAR_ATTEN1_REG, att_data&0xFFFF);//ADC1 has 8 channels
78+
WRITE_PERI_REG(SENS_SAR_ATTEN2_REG, att_data);
7879
}
7980

8081
voidIRAM_ATTR__analogInit(){
8182
staticboolinitialized= false;
8283
if(initialized){
8384
return;
8485
}
86+
8587
__analogSetAttenuation(__analogAttenuation);
8688
__analogSetCycles(__analogCycles);
8789
__analogSetSamples(__analogSamples+1);//in samples
@@ -108,6 +110,20 @@ void IRAM_ATTR __analogInit(){
108110
initialized= true;
109111
}
110112

113+
void__analogSetPinAttenuation(uint8_tpin, adc_attenuation_tattenuation)
114+
{
115+
int8_tchannel=digitalPinToAnalogChannel(pin);
116+
if(channel<0||attenuation>3){
117+
return ;
118+
}
119+
__analogInit();
120+
if(channel>7){
121+
SET_PERI_REG_BITS(SENS_SAR_ATTEN2_REG, 3, attenuation, ((channel-10) *2));
122+
} else{
123+
SET_PERI_REG_BITS(SENS_SAR_ATTEN1_REG, 3, attenuation, (channel*2));
124+
}
125+
}
126+
111127
uint16_tIRAM_ATTR__analogRead(uint8_tpin)
112128
{
113129
int8_tchannel=digitalPinToAnalogChannel(pin);
@@ -150,6 +166,7 @@ uint16_t IRAM_ATTR __analogRead(uint8_t pin)
150166
while (GET_PERI_REG_MASK(SENS_SAR_MEAS_START1_REG, SENS_MEAS1_DONE_SAR) ==0){}; //read done
151167
returnGET_PERI_REG_BITS2(SENS_SAR_MEAS_START1_REG, SENS_MEAS1_DATA_SAR, SENS_MEAS1_DATA_SAR_S);
152168
}
169+
153170
int__hallRead() //hall sensor without LNA
154171
{
155172
intSens_Vp0;
@@ -179,5 +196,6 @@ extern void analogSetWidth(uint8_t bits) __attribute__ ((weak, alias("__analogSe
179196
externvoidanalogSetCycles(uint8_tcycles) __attribute__ ((weak, alias("__analogSetCycles")));
180197
externvoidanalogSetSamples(uint8_tsamples) __attribute__ ((weak, alias("__analogSetSamples")));
181198
externvoidanalogSetClockDiv(uint8_tclockDiv) __attribute__ ((weak, alias("__analogSetClockDiv")));
182-
//extern void analogSetAttenuation(uint8_t attenuation) __attribute__ ((weak, alias("__analogSetAttenuation")));
199+
externvoidanalogSetAttenuation(adc_attenuation_tattenuation) __attribute__ ((weak, alias("__analogSetAttenuation")));
200+
externvoidanalogSetPinAttenuation(uint8_tpin, adc_attenuation_tattenuation) __attribute__ ((weak, alias("__analogSetPinAttenuation")));
183201
externinthallRead() __attribute__ ((weak, alias("__hallRead")));

‎cores/esp32/esp32-hal-adc.h‎

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,22 @@ extern "C"{
2626

2727
#include"esp32-hal.h"
2828

29+
typedefenum{
30+
ADC_0db,
31+
ADC_2_5db,
32+
ADC_6db,
33+
ADC_11db
34+
} adc_attenuation_t;
35+
2936
/*
3037
* Get ADC value for pin
3138
* */
3239
uint16_tanalogRead(uint8_tpin);
3340

3441
/*
35-
* Sets the sample bits (9 - 12)
42+
* Sets the sample bits
43+
* Default is 12bit (0 - 4095)
44+
* Range is 9 - 12
3645
* */
3746
voidanalogSetWidth(uint8_tbits);
3847

@@ -61,6 +70,18 @@ void analogSetSamples(uint8_t samples);
6170
* */
6271
voidanalogSetClockDiv(uint8_tclockDiv);
6372

73+
/*
74+
* Set the attenuation for all channels
75+
* Default is 11db
76+
* */
77+
voidanalogSetAttenuation(adc_attenuation_tattenuation);
78+
79+
/*
80+
* Set the attenuation for particular pin
81+
* Default is 11db
82+
* */
83+
voidanalogSetPinAttenuation(uint8_tpin, adc_attenuation_tattenuation);
84+
6485
/*
6586
* Get value for HALL sensor (without LNA)
6687
* connected to pins 36(SVP) and 39(SVN)

0 commit comments

Comments
(0)