ASF模数转换器ADC测试

分享到:

G55的内部ADC默认为12位,但是也可以通过软件来设置为13~16位,但是这样就牺牲了采样时间。参考电压为VDDIO,也就是3.3V。ADC启动的方式有很多种,我还是比较喜欢使用软件来定时触发。

    这次的目的是使用系统定时器来产生定时中断,一秒采集一次ADC0的电压,并在OLED上显示采集到的AD值。
     ASF里的这个ADC例程的初始化和中断配置方式和前面别的例程有点区别。这个ADC例程支持 sam4n16c_xplained_pro,samg53n19_xplained_pro,samg55j19_xplained_pro这几块板 卡,所以他的通用性是按照SAM4N系列的编程习惯来的。初始化时使用配置结构体,中断使用的是回调函数。
 
 
ADC的内部框图
 
 
ADC相关引脚,我们使用AD0来测试
 
 
ADC0对应板卡上EXT1接插件上的PIN3也就是PA17。ADC输入有差分方式和单端方式,我们就使用默认的单输入。
 
 
ADC的初始化函数,这里的注释都说明的很清楚,就不多说了
 
 
ADC的中断回调函数,转换完成后,进行在5110上显示处理
 
 
系统定时器的定时中断里,启动ADC转换
 
 
主函数内容,也就主要是初始化函数的调用
 
 
实际的显示效果照片,把AD0引脚短接到GND和VCC时采集到不同的值。
 
 
 
下面介绍下ASF相关的函数,主要在文件adc2.c中
voidadc_get_config_defaults(struct adc_config *const cfg);
获取默认配置
 
 
staticvoid adc_set_config(Adc *const adc, struct adc_config *config)
配置ADC模块
 
 
voidadc_last_channel_get_config_defaults(
       struct adc_last_channel_config *constcfg);
获取最后一个通道的默认配置
 
 
voidadc_last_channel_set_config(Adc *const adc,
       struct adc_last_channel_config *config);
设置最后一个通道的配置
 
 
enumstatus_code adc_init(Adc *const adc, struct adc_config *const config);
ADC初始化
 
 
voidadc_set_resolution(Adc *const adc,
       const enum adc_resolution res)
设置转换的分辨率
 
 
voidadc_set_comparison_mode(Adc *const adc,
       const enum adc_cmp_mode mode,
       const enum adc_channel_num channel,uint8_t cmp_filter)
设置比较模式
 
 
voidadc_set_power_mode(Adc *const adc,
       const enum adc_power_mode mode)
设置电源模式
 
 
voidadc_set_callback(Adc *const adc, enum adc_interrupt_source source,
       adc_callback_t callback, uint8_tirq_level);
设置回调函数
 
 
voidadc_enable_interrupt(Adc *const adc,
       enum adc_interrupt_sourceinterrupt_source)
使能中断
 
 
voidadc_disable_interrupt(Adc *const adc,
       enum adc_interrupt_sourceinterrupt_source)
禁能中断
 
 
staticvoid adc_interrupt(enum adc_interrupt_source source)
设置中断函数
 
 
staticvoid adc_process_callback(Adc *const adc)
设置程序回调函数
 
 
voidadc_enable(void);
ADC使能
 
 
voidadc_disable(void);
ADC禁能
 
 
voidadc_configure_sequence(Adc *const adc,
       const enum adc_channel_num ch_list[],const uint8_t uc_num);
配置通道转换序列
 
 
更多Atmel及科技资讯请关注:  
Atmel中文官网:https://www.atmel.com/zh/cn/
Atmel技术论坛:https://atmel.eefocus.com/
Atmel中文博客:https://blog.sina.com.cn/u/2253031744
Atmel新浪微博:https://www.weibo.com/atmelcn
继续阅读
如何以全模拟控制的降压和升压转换器实现稳压输出

可使用同一款单片机实现纯模拟控制的同步降压型电源和升压型电源。从而实现输出稳压。两种方案拥有一个共同的优点,即不占用任何处理器资源,这样内核就可以全力满足更为复杂的固件的需求。同时,模拟回路能够更快速地响应负载阶跃和输入电压变化,这对于不少应用而言是非常有用的。

Microchip专家技术文章:使用dsPIC33EP‘GS’系列器件提升数字电源的环路增益性能

由于人们不断要求电源具有更高性能和更高功率密度,开关频率也变得越来越高, 这要求数字控制器产品顺应市场趋势的变化。Microchip 专为电源应用而设计的dsPIC33EP ‘GS’ 系列数字信号控制器就是一种典型的示例。该系列器件引入了新的性能,可缩短线性差分方程(LDE)的执行时间并减少系统的总延时。

在ASF中使用GPIO的两种方法

在ASF中,将GPIO的控制封装到函数中,使用API函数来控制GPIO,函数从函数名称就可以看出功能,这样使用GPIO更加直观,简单明了。即使换用不同的芯片,控制函数也是相同的,只要修改GPIO的定义,不用修改程序。在ASF中使用GPIO有两种方式,本文为大家介绍两种方式的使用方法和区别。

可视化的调试助手FreeRTOS+Trace

在AS开发库中,除了直接用于程序嵌入的库和内核以外,还有用来调试的工具。对于FreeRTOS而言,相对的线程和任务调度是比较难于用普通的设置断点,进行参数跟踪来实现的。因此,一种可视化的调试工具就被引入到AS中——FreeRTOS+Trace。

XMEGA PWM模块多通道的用法

本文介绍ASF中PWM模块同时使用多个通道的用法: 1、定义PWM变量,每个通道需要单独定义一个变量 2、使用pwm_init函数初始PWM。如果是同一个PWM模块(定时器),需要使用相同的频率参数。 3、设置每个通道的占空比

©2019 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss