This is the quick start guide for the Analog to Digital Converter (ADC), with step-by-step instructions on how to configure and use the driver in a selection of use cases.

The use cases are described with "setup" and "usage" sections, which each have "example code" and "workflow" subsections. This documentation first presents code fragments and function definitions along with instructions on where they can be placed, e.g., into the application C-file or the main() function, then follows up with explanations for all the lines of code.

Use cases

In addition to the basic use case below, refer to the following use cases for demonstrations of the ADC's features:

We recommend reading all the use cases for the sake of all the notes on considerations, limitations and other helpful details.

Basic use case

In this basic use case, ADCA is configured for:

  • sampling on a single channel (0)

    • I/O pin as single-ended input (PA0)
  • unsigned conversions
  • 12-bit resolution
  • internal 1V reference
  • manual conversion triggering
  • polled operation (no interrupts)

Completed conversions are detected by waiting for the relevant interrupt flag to get set. The ADC result is then stored in a local variable.

Setup steps

Example code

Add to application C-file:

#define MY_ADC ADCA
#define MY_ADC_CH ADC_CH0
 
static void adc_init(void)
{
struct adc_config adc_conf;
struct adc_channel_config adcch_conf;
 
adc_read_configuration(&MY_ADC, &adc_conf);
adcch_read_configuration(&MY_ADC, MY_ADC_CH, &adcch_conf);
 
adc_set_clock_rate(&adc_conf, 200000UL);
 
 
adc_write_configuration(&MY_ADC, &adc_conf);
adcch_write_configuration(&MY_ADC, MY_ADC_CH, &adcch_conf);
}

Add to main():

adc_init();

Workflow

  1. Add macros for the ADC and its channel to use, so they are easy to change:

    • #define MY_ADC ADCA
      #define MY_ADC_CH ADC_CH0
  2. Create a function adc_init() to intialize the ADC:
    • static void adc_init(void)
      {
      // ...
      }
  3. Allocate configuration structs for the ADC and its channel:
  4. Initialize the structs:
    • adc_read_configuration(&MY_ADC, &adc_conf);
      adcch_read_configuration(&MY_ADC, MY_ADC_CH, &adcch_conf);
      Attention
      This step must not be skipped because uninitialized structs may contain invalid configurations, thus giving unpredictable behavior.
  5. Set conversion parameters to unsigned, 12-bit and internal 1V reference:
  6. Set conversion trigger to manual triggering:
    • Note
      The number of channels to trigger (1) and base event channel (0) don't affect operation in this trigger mode, but sane values should still be supplied.
  7. Set ADC clock rate to 200 KHz or less:
    • adc_set_clock_rate(&adc_conf, 200000UL);
      Note
      The driver attempts to set the ADC clock rate to the fastest possible without exceeding the specified limit. Refer to the applicable device datasheet and manual for details on maximum ADC clock rate.
  8. Set pin 0 on the associated port as the single-ended input:
  9. Write the configurations to ADC and channel:
  10. Initialize the clock system:
    • Note
      The ADC driver requires the system clock driver to be initialized in order to compute the correct ADC clock rate in step 6.
  11. Call our ADC init function:
    • adc_init();

Usage steps

Example code

Add to, e.g., main-loop in application C-file:

uint16_t result;
 
adc_enable(&MY_ADC);
 
adc_start_conversion(&MY_ADC, MY_ADC_CH);
adc_wait_for_interrupt_flag(&MY_ADC, MY_ADC_CH);
 
result = adc_get_result(&MY_ADC, MY_ADC_CH);

Workflow

  1. Allocate a variable to contain the ADC result:

    • uint16_t result;
  2. Enable the configured ADC:
  3. Trigger a single conversion on the ADC channel:
  4. Wait for the channel's interrupt flag to get set, indicating a completed conversion:
    • adc_wait_for_interrupt_flag(&MY_ADC, MY_ADC_CH);
      Note
      The interrupt flags are set even if the interrupts are disabled. Further, this function will clear the interrupt flag after it has been set, so we do not need to clear it manually.
  5. Read out the result of the ADC channel:
  6. To do more conversions, go back to step 3.

quick start guide for XMEGA ADC的更多相关文章

  1. SlickUpload Quick Start Guide

    Quick Start Guide The SlickUpload quick start demonstrates how to install SlickUpload in a new or ex ...

  2. RF《Quick Start Guide》操作总结

    这篇文章之所以会给整理出来,是因为学了一个季度的RF后,再去看官网的这个文档,感触破多,最大的感触还是觉得自己走了不少弯路,还有些是学习方法上的弯路.在未查看这类官网文档之前,更多的是看其他各种人的博 ...

  3. QUICK START GUIDE

    QUICK START GUIDE This page is a guide aimed at helping anyone set up a cheap radio scanner based on ...

  4. Akka Stream文档翻译:Quick Start Guide: Reactive Tweets

    Quick Start Guide: Reactive Tweets 快速入门指南: Reactive Tweets (reactive tweets 大概可以理解为“响应式推文”,在此可以测试下GF ...

  5. RobotFramework 官方demo Quick Start Guide rst配置文件分析

    RobotFramework官方demo Quick Start Guide rst配置文件分析   by:授客 QQ:1033553122     博客:http://blog.sina.com.c ...

  6. RobotFramework RobotFramework官方demo Quick Start Guide浅析

    RobotFramework官方demo Quick Start Guide浅析   by:授客 QQ:1033553122     博客:http://blog.sina.com.cn/ishouk ...

  7. pax3 quick start guide

    pax3 quick start guide 外观图: 配置:1 * pax3 主机:2 * 吸嘴(一个平的,一个凸的):2 * 底盖(一个烟草的,一个烟膏的):3 * 过滤片:1 * USB充:1 ...

  8. [摘录]quarts:Quartz Quick Start Guide

    (Primarily authored by Dafydd James) Welcome to the QuickStart guide for Quartz. As you read this gu ...

  9. Quartz Quick Start Guide

    Welcome to the QuickStart guide for Quartz. As you read this guide, expect to see details of: Downlo ...

随机推荐

  1. Android ConstraintLayout

    对官方例子加上自己的容器即可调整ConstraintLayout实时运行中观察这种布局的变化

  2. centos7清理矿机木马qw3xT,kpgrbcc

    腾讯云报告了root口令被暴力破解,并种了木马kpgrbcc 昨晚找到/usr/bin/ rm -rf kpgrbcc 删除 rm -rf kpgrbcb 删除 并ps -ef | grep kpg ...

  3. 使用图数据库 Nebula Graph 数据导入快速体验知识图谱 OwnThink

    前言 本文由 Nebula Graph 实习生@王杰贡献. 最近 @Yener 开源了史上最大规模的中文知识图谱--OwnThink(链接:https://github.com/ownthink/Kn ...

  4. 如何利用快照( snapshot )功能快速定位性能问题

    我们常常会遇到这样的困惑,收到用户或者客服的反馈,平台使用有问题,但是测试人员搭建环境后又没办法复现故障,最后导致问题没法解决,眼睁睁地看着用户流失. 这是因为线上生产环境非常复杂.很多时候是偶发性  ...

  5. 发送html邮件a标签中的url不显示的问题

    最近做的一个项目中,需要用到邮箱激活功能,但是遇到一个问题! 问题描述:发送邮箱之后,邮箱的激活链接的href属性不见了!!! 因为我采用的是本地的地址做测试,后来用百度的链接替换我的href地址又可 ...

  6. C#音频截取与原文匹配

    1.需求 上传一个音频文件(例如英语听力的音频)与音频对应的原文word文档.大概估算音频中一段对话到另一端对话的时间间隔,将音频截取为不同对话的小音频文件,通过百度语音识别转换成英文,然后与原文对比 ...

  7. jquery对类的操作,添加,删除,点击添加,再点击删除

    jquery对类的操作,添加(addClass),删除l类(remoceClass),点击添加,再点击删除(toggleClass)

  8. linux磁盘分区三步走

    为了便于理解硬盘的物理结构 ,可将硬盘看作一个圆,它是坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等.每个盘有两面,都可记录信息.要了解硬盘的物理结构,需要弄懂磁道.扇区.柱面.簇等几 ...

  9. String s = "a";与String s = new String("a")的区别

    String s1 = "a" 时,首先会在字符串常量池中查找有无 “a” 这个对象. 若没找到,就创建一个 "a" 对象, 然后,以 s1 为它的引用.若在字 ...

  10. win10 objectarx向导在 vs2015中不起作用的解决办法

    我用autocad2018+vs2015+win10 安装好了objectarx向导模板之后,新建一个c++插件项目就这样: 但是打开之后会创建失败,这个时候就需要更改.props文件里的sdk路径. ...