nrf51822 一共有8个adc
管脚如下
nRF51822 ADC引脚分布:
image
管脚和通道
- ADC_INPUT_AIN0_P26 = 0,
- ADC_INPUT_AIN1_P27 = 1,
- ADC_INPUT_AIN2_P01 = 2,
- ADC_INPUT_AIN3_P02 = 3,
- ADC_INPUT_AIN4_P03 = 4,
- ADC_INPUT_AIN5_P04 = 5,
- ADC_INPUT_AIN6_P05 = 6,
- ADC_INPUT_AIN7_P06 = 7
adc转换函数
//pin range :26,27,1,2,3,4,5,6
uint16_t GetAdc(uint32_t pin)
{
uint16_t adc_value;
uint32_t channel;
if(pin== 26)
{
channel=ADC_CONFIG_PSEL_AnalogInput0;
}else if(pin== 27)
{
channel=ADC_CONFIG_PSEL_AnalogInput1;
}
else if((pin>=1)&&(pin<=6))
{
channel=2<<pin;
}
nrf_gpio_cfg_input(pin,NRF_GPIO_PIN_NOPULL);
NRF_ADC->CONFIG = (ADC_CONFIG_EXTREFSEL_None << ADC_CONFIG_EXTREFSEL_Pos)
/*Bits 17..16 : ADC external reference pin selection. */
| (channel << ADC_CONFIG_PSEL_Pos)
/*!<Use analog input 2 as analog input. */
| (ADC_CONFIG_REFSEL_VBG << ADC_CONFIG_REFSEL_Pos)
/*!< Use internal 1.2V bandgap voltage as reference for conversion. */
| (ADC_CONFIG_INPSEL_AnalogInputOneThirdPrescaling << ADC_CONFIG_INPSEL_Pos)
/*!< Analog input specified by PSEL with no prescaling used as inputfor the conversion. */
| (ADC_CONFIG_RES_10bit << ADC_CONFIG_RES_Pos);
/*!< 8bit ADC resolution. */
NRF_ADC->ENABLE = 1;
adc_value = Adc_Read();
NRF_ADC->ENABLE = 0;
nrf_gpio_close(pin);
return adc_value;
}