Skip to content

Commit 0f853a9

Browse files
authored
Merge pull request #130 from michpro/FIX-107
Improved support for ADC internal channels - VSENSE and VREFINT (#107)
2 parents 8294e35 + 696d33e commit 0f853a9

1 file changed

Lines changed: 10 additions & 2 deletions

File tree

cores/arduino/wiring_analog.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,8 @@ static inline uint32_t mapResolution(uint32_t value, uint32_t from, uint32_t to)
5555
int analogRead(pin_size_t ulPin)
5656
{
5757
uint32_t value = 0;
58+
bool internalChannel = true;
5859
PinName p = DIGITAL_TO_PINNAME(ulPin);
59-
//set pin mode to analog in before read
60-
pinMode(ulPin, INPUT_ANALOG);
6160
switch (ulPin) {
6261
case ADC_TEMP:
6362
p = ADC_TEMP;
@@ -66,11 +65,20 @@ int analogRead(pin_size_t ulPin)
6665
p = ADC_VREF;
6766
break;
6867
default:
68+
//set pin mode to analog in before read
69+
pinMode(ulPin, INPUT_ANALOG);
70+
internalChannel = false;
6971
break;
7072
}
7173
if (p != NC) {
74+
if (internalChannel) {
75+
adc_tempsensor_vrefint_enable();
76+
}
7277
value = get_adc_value(p);
7378
value = mapResolution(value, 12, analogIn_resolution);
79+
if (internalChannel) {
80+
adc_tempsensor_vrefint_disable();
81+
}
7482
}
7583
return value;
7684
}

0 commit comments

Comments
 (0)