[Atmel] 跑一下XMEGA-B1程序(11)ADC查询

[复制链接]
 楼主| ddllxxrr 发表于 2016-1-4 21:52 | 显示全部楼层 |阅读模式
这个程序是用查询方式进行单一的AD转换有以下特点:


采样在单一通道0上
无符号转换
12比特结果
内部1V参考电压
手动转换触发
查询方式


首先,新建ASF工程然后加入ADC模块,在没加入模块或加入后的ASF EXPLORER中打开快速指导。

根据提示形成程序,如下:
  1. #include <asf.h>
  2. #define MY_ADC    ADCA
  3. #define MY_ADC_CH ADC_CH0
  4. static void adc_init(void)
  5. {
  6.         struct adc_config adc_conf;
  7.         struct adc_channel_config adcch_conf;
  8.         adc_read_configuration(&MY_ADC, &adc_conf);
  9.         adcch_read_configuration(&MY_ADC, MY_ADC_CH, &adcch_conf);
  10.         adc_set_conversion_parameters(&adc_conf, ADC_SIGN_OFF, ADC_RES_12,
  11.         ADC_REF_BANDGAP);
  12.         adc_set_conversion_trigger(&adc_conf, ADC_TRIG_MANUAL, 1, 0);
  13.         adc_set_clock_rate(&adc_conf, 200000UL);
  14.         adcch_set_input(&adcch_conf, ADCCH_POS_PIN0, ADCCH_NEG_NONE, 1);
  15.         adc_write_configuration(&MY_ADC, &adc_conf);
  16.         adcch_write_configuration(&MY_ADC, MY_ADC_CH, &adcch_conf);
  17. }

  18. int main (void)
  19. {
  20.         /* Insert system clock initialization code here (sysclk_init()). */
  21.    
  22.     sysclk_init();
  23.     adc_init();
  24.     uint16_t result;
  25.         while(1)
  26.         {
  27.        
  28.         adc_enable(&MY_ADC);
  29.         adc_start_conversion(&MY_ADC, MY_ADC_CH);
  30.         adc_wait_for_interrupt_flag(&MY_ADC, MY_ADC_CH);
  31.         result = adc_get_result(&MY_ADC, MY_ADC_CH);
  32.         }
  33.         /* Insert application code here, after the board has been initialized. */
  34. }
通过打断点可观察到结果:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
a364956116 发表于 2018-9-9 19:34 | 显示全部楼层
你好,请问我现在用xmega8,ADC采用单端,8位分辨率,采集到的ADC数据总会有零点偏差和增益偏差,这个是需要自己手动矫正吗?还有我在切换ADC采集通道时,数据也会错误,我通过次改ADMUX寄存器。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2403

主题

6994

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部