搜索

[资源分享] AC7801最简单的ADC例程

[复制链接]
166|6
 楼主 | 2021-1-15 15:00 | 显示全部楼层 |阅读模式
AC, AD, IO, DM, ni
AC7801的ADC太厉害了,12bit精度,1M采样率,支持DMA,多种采样模式……
1610692461(1).png
然而7801内的例程使用了DMA, 对于刚入门的同学们就不是很好理解,简单的应用也不需要用到DMA。因此,实现了一个一次只采样1个通道,轮询采样结果,非常简单的一个小demo。

  1. /**
  2. * ADC0_init
  3. *
  4. * @param[in]   void
  5. * [url=home.php?mod=space&uid=266161]@return[/url]      void
  6. *
  7. * [url=home.php?mod=space&uid=247401]@brief[/url]  ADC初始化
  8. *
  9. */
  10. void ADC0_init(void)
  11. {
  12.     ADC_ConfigType adcConfig = {0};
  13.     GPIO_SetFunc(GPIOA, GPIO_PIN7, GPIO_FUN2);  ///<ADC_IN4 Analog function enable, PA7
  14.     GPIO_SetFunc(GPIOA, GPIO_PIN8, GPIO_FUN2);  ///<ADC_IN3 Analog function enable, PA8
  15.     GPIO_SetFunc(GPIOA, GPIO_PIN2, GPIO_FUN2);  ///<ADC_IN8 Analog function enable, PA2

  16.     adcConfig.regularSequenceLength = 1;
  17.     adcConfig.powerMode = ADC_POWER_ON;
  18.     ADC_Init(ADC0, &adcConfig);

  19. }
复制代码
ADC的初始化,调用了驱动库中的ADC_Init(),adcConfig中多数变量采用默认值0,只是将规则组长度设置为1,并开启ADC电源。配置了采样引脚。采用其他引脚采样,需要自行更改引脚。





  1. /**
  2. * ADC_Convert
  3. *
  4. * @param[in]   adcChl ADC通道,参考ADC_ChannelType
  5. * @return      ad转换结果
  6. *
  7. * @brief  获取AD转换结果
  8. *
  9. */
  10. uint16_t ADC_Convert(ADC_ChannelType adcChl)
  11. {
  12.     uint16_t adcRst = 0;
  13.    
  14.     ADC_SetRegularGroupChannel(ADC0, adcChl, ADC_SPT_CLK_215, 0);  //采样&转换时间= (7+12)/24000000 + 5/24000000 = 1us

  15.     ADC_SoftwareStartRegularConvert(ADC0);              ///软件触发规则组采样
  16.    
  17.     while (0 == ADC_GetEOCFlag(ADC0)){
  18.     }
  19.    
  20.     adcRst = ADC_GetRegularData(ADC0);
  21.    
  22.     return adcRst;
  23. }
复制代码
通过ADC_Convert() 函数,传入要转换的AD通道号, AD采样结束后返回AD转换结果。



  1. /**
  2. * main
  3. *
  4. * @param[in]   void
  5. * @return      0
  6. *
  7. * @brief  主函数入口
  8. *
  9. */
  10. int main(void)
  11. {
  12.     InitDelay();
  13.     InitDebug();
  14.    
  15.     ADC0_init();
  16.    
  17.     printf("ADC convert sample.\r\n");
  18.    
  19.     while (1) {
  20.         mdelay(500);
  21.         
  22.         printf("ADC convert result:%d\r\n", ADC_Convert(ADC_CH_8));
  23.     }
  24. }   
复制代码
测试代码将7801开发板上电位器电压采集下来并通过串口输出。



测试结果如下:
1610693769(1).png

贡献测试代码给有需要的小伙伴


adc_sample.rar

23.75 KB, 下载次数: 11

使用特权

评论回复
| 2021-1-15 15:15 | 显示全部楼层
感谢楼主的分享,这个不错的。

使用特权

评论回复
| 2021-1-15 16:21 | 显示全部楼层
很棒的分享,涨经验了

使用特权

评论回复
| 2021-1-15 16:28 | 显示全部楼层
楼主的分享很棒,很不错,赞

使用特权

评论回复
| 2021-1-15 17:12 | 显示全部楼层
楼主还是很严谨的,很棒的一次分享。

使用特权

评论回复
| 2021-1-15 17:47 | 显示全部楼层
感谢楼主的分享,不错,不错的分享。

使用特权

评论回复
| 2021-1-18 11:14 | 显示全部楼层
很棒的一次分享,赞一个

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

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