从数据手册中,我们可以看到SAM R21的ADC具有如下特性:
- 8路外部输入
- 350Kbps采样率
- 8/10/12位分辨率
- 支持过采样
- 可以设置采样平均次数(数字滤波)
- 内部1V、AVCC/2、AVCC/1.48、两路外部基准输入
- 支持单端和差分输入
- 可以设置增益,带有自动补偿功能
- 支持窗口模式
- 可以采集内部温度传感器和基准
功能很强啊,因此ADC的使用比AC(比较器)要复杂一点。在Quick start ADC 中,ADC的初始化部分如下:
- //! [setup_modify_conf]
- config_adc.gain_factor = ADC_GAIN_FACTOR_DIV2;
- config_adc.clock_prescaler = ADC_CLOCK_PRESCALER_DIV8;
- config_adc.reference = ADC_REFERENCE_INTVCC1;
- config_adc.positive_input = ADC_POSITIVE_INPUT_PIN6;
- config_adc.resolution = ADC_RESOLUTION_12BIT;
- //! [setup_modify_conf]
- //! [setup_set_config]
- adc_init(&adc_instance, ADC, &config_adc);
- //! [setup_set_config]
复制代码
它使用内部1V基准,因此外部输入电压不要超过1V。使用单端模式,PA06作为输入,12位分辨率。
ASF中的Qucik Start ADC的例程太简洁了,只读取了一次ADC后就进行入while(1)死循环,不方便我们做测试,因此我又通过ASF增加了delay和usart模块,周期读取ADC并通过串口将数据发到PC,这样就可以通过调节电位器方便的测试ADC了。