Skip to content

Commit c98a190

Browse files
bojhsandeepmistry
authored andcommitted
analogRead() fix for nRF52 by setting related gain. (sandeepmistry#66)
* analogRead() fix for nRF52 by setting related gain. Signed-off-by: Joerg Hubschneider <[email protected]>
1 parent 4159fe4 commit c98a190

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

cores/nRF5/wiring_analog_nRF52.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
extern "C" {
2929
#endif
3030

31+
static uint32_t saadcReference = SAADC_CH_CONFIG_REFSEL_Internal;
32+
static uint32_t saadcGain = SAADC_CH_CONFIG_GAIN_Gain1_5;
33+
3134
#define PWM_COUNT 3
3235

3336
static NRF_PWM_Type* pwms[PWM_COUNT] = {
@@ -41,8 +44,6 @@ static uint32_t pwmChannelPins[PWM_COUNT] = {
4144
0xFFFFFFFF,
4245
0xFFFFFFFF
4346
};
44-
45-
static uint32_t saadcReference = SAADC_CH_CONFIG_REFSEL_Internal;
4647
static uint16_t pwmChannelSequence[PWM_COUNT];
4748

4849
static int readResolution = 10;
@@ -76,7 +77,7 @@ static inline uint32_t mapResolution( uint32_t value, uint32_t from, uint32_t to
7677
}
7778

7879
/*
79-
* Internal Reference is at 1.0v
80+
* Internal Reference is at 0.6v!
8081
* External Reference should be between 1v and VDDANA-0.6v=2.7v
8182
*
8283
* Warning : On Arduino Zero board the input/output voltage for SAMD21G18 is 3.3 volts maximum
@@ -88,10 +89,12 @@ void analogReference( eAnalogReference ulMode )
8889
case AR_INTERNAL:
8990
default:
9091
saadcReference = SAADC_CH_CONFIG_REFSEL_Internal;
92+
saadcGain = SAADC_CH_CONFIG_GAIN_Gain1_5;
9193
break;
9294

9395
case AR_VDD4:
9496
saadcReference = SAADC_CH_CONFIG_REFSEL_VDD1_4;
97+
saadcGain = SAADC_CH_CONFIG_GAIN_Gain1_4;
9598
break;
9699
}
97100
}
@@ -167,9 +170,9 @@ uint32_t analogRead( uint32_t ulPin )
167170
NRF_SAADC->CH[i].PSELN = SAADC_CH_PSELP_PSELP_NC;
168171
NRF_SAADC->CH[i].PSELP = SAADC_CH_PSELP_PSELP_NC;
169172
}
170-
NRF_SAADC->CH[0].CONFIG = ((SAADC_CH_CONFIG_RESP_Bypass << SAADC_CH_CONFIG_RESP_Pos) & SAADC_CH_CONFIG_RESP_Msk)
173+
NRF_SAADC->CH[0].CONFIG = ((SAADC_CH_CONFIG_RESP_Bypass << SAADC_CH_CONFIG_RESP_Pos) & SAADC_CH_CONFIG_RESP_Msk)
171174
| ((SAADC_CH_CONFIG_RESP_Bypass << SAADC_CH_CONFIG_RESN_Pos) & SAADC_CH_CONFIG_RESN_Msk)
172-
| ((SAADC_CH_CONFIG_GAIN_Gain1 << SAADC_CH_CONFIG_GAIN_Pos) & SAADC_CH_CONFIG_GAIN_Msk)
175+
| ((saadcGain << SAADC_CH_CONFIG_GAIN_Pos) & SAADC_CH_CONFIG_GAIN_Msk)
173176
| ((saadcReference << SAADC_CH_CONFIG_REFSEL_Pos) & SAADC_CH_CONFIG_REFSEL_Msk)
174177
| ((SAADC_CH_CONFIG_TACQ_3us << SAADC_CH_CONFIG_TACQ_Pos) & SAADC_CH_CONFIG_TACQ_Msk)
175178
| ((SAADC_CH_CONFIG_MODE_SE << SAADC_CH_CONFIG_MODE_Pos) & SAADC_CH_CONFIG_MODE_Msk);

0 commit comments

Comments
 (0)