[PIC®/AVR® MCU] 【CuriosityNano测评报告】08.ADC转换的实验

[复制链接]
104623|28
手机看帖
扫描二维码
随时随地手机跟帖
hu9jj|  楼主 | 2021-6-13 14:29 | 显示全部楼层 |阅读模式
#申请原创#     

    本次实验的是ADC的基本模式的单次转换,启用的是RA0引脚为ADC信号输入,MCC配置如下:
adc_01.jpg

    其他设置按照默认,未作修改:
adc_00.jpg

    生成代码后,在adcc.c文件中查找相应的函数,并在主循环里每秒转换一次,每次转换读取5组数据,然后取平均值,代码如下:
    ADC_Val = 0;
    ADCC_StartConversion(channel_ANA0);                                 //开启ADC转换
    for(i=0; i<5; i++){
        while(!ADCC_IsConversionDone());                                   //等待转换完成
//       ADC_Buff[i] = ADCC_GetConversionResult();                      //获得转换结果
        ADC_Buff[i] = ADCC_GetSingleConversion(channel_ANA0); //获得指定通道的转换结果
        ADC_Val += ADC_Buff[i];
    }
            
    ADC_Val = ADC_Val/5;
    LCD_write_value(0,2,5,0,0,ADC_Val);
    printf("ADC= %d \r\n",ADC_Val);


    由于我只启用了RA0一个通道,所以使用ADCC_GetConversionResult()函数和使用ADCC_GetSingleConversion(channel_ANA0)函数的结果是一样的。
    这是测试过程的照片:
adc_02.jpg

    通过调节电位器,在屏幕上可以显示出ADC转换的结果:
adc_03.jpg

    同时在串口调试助手上也可以看到相应的内容:
adc_04.jpg

    本次并未进行多通道的实验。

使用特权

评论回复
mxkw0514| | 2021-6-15 15:41 | 显示全部楼层
请问多通道实验是怎样的实现思路呢?

使用特权

评论回复
hu9jj|  楼主 | 2021-6-15 15:55 | 显示全部楼层
mxkw0514 发表于 2021-6-15 15:41
请问多通道实验是怎样的实现思路呢?

    我想多通道应该与单通道大同小异,通过指定通道号来获得指定通道的转换结果,也就是逐个通道来获得转换结果,您测试一下看能否行么。

使用特权

评论回复
yangjiaxu| | 2021-6-16 15:07 | 显示全部楼层
很强啊,Mplab是不是很好玩

使用特权

评论回复
passdomo| | 2021-6-24 11:11 | 显示全部楼层
强 后续会有多通道实验展示嘛?

使用特权

评论回复
hu9jj|  楼主 | 2021-6-24 12:14 | 显示全部楼层
passdomo 发表于 2021-6-24 11:11
强 后续会有多通道实验展示嘛?

抱歉,暂时没有这个计划。

使用特权

评论回复
hjl2832| | 2021-7-1 13:03 | 显示全部楼层
多通道扫描跟单通道一样,每次只能测试一个通道,需要用户进行循环处理来进行多通道测量。MCC生成的代码里,在对数据进行读取的函数是带参数的(函数原型 adc_result_t ADC_GetConversion(adc_channel_t channel)),那个参数就是通道号,而通道号可以自己在MCC里配置好,MCC会将所有已配置输入通道进行申明。
typedef enum
{
    AN2 =  0x2,
    channel_AVSS =  0x3C,
    channel_Temp =  0x3D,
    channel_DAC1 =  0x3E,
    channel_FVR =  0x3F
} adc_channel_t;


adc_result_t ADC_GetConversion(adc_channel_t channel)
{     
    // select the A/D channel
    ADCON0bits.CHS = channel;      //更换通道

    // Turn on the ADC module
    ADCON0bits.ADON = 1;     //打开ADC

    // Acquisition time delay
    __delay_us(ACQ_US_DELAY);   //延迟一定时间等通道切换成功并稳定

    // Start the conversion
    ADCON0bits.ADGO = 1;    //开始数据转换

    // Wait for the conversion to finish
    while (ADCON0bits.ADGO)
    {
    }

    // Conversion finished, return the result
    return ((adc_result_t)((ADRESH << 8) + ADRESL));
}

从函数原代码可以看出来,PIC单片机的ADC在每次更换采集通道后,都要进行内部初始化并延迟一段时间等稳定后才能进行转换((__delay_us(ACQ_US_DELAY);)),实现数据的读取。所以多通道实质与单通道是一样的流程。

使用特权

评论回复
kkzz| | 2021-7-1 20:00 | 显示全部楼层
如何实现单片机中多路AD转换  

使用特权

评论回复
hudi008| | 2021-7-1 20:00 | 显示全部楼层
怎样实现ADC连续转换

使用特权

评论回复
lzmm| | 2021-7-1 20:00 | 显示全部楼层
adc的连续转换与单次转换有什么区别  

使用特权

评论回复
minzisc| | 2021-7-1 20:01 | 显示全部楼层
如何同时实现两个传感器的模拟量adc转换

使用特权

评论回复
selongli| | 2021-7-1 20:01 | 显示全部楼层
ADC转换如何计算   

使用特权

评论回复
fentianyou| | 2021-7-1 20:01 | 显示全部楼层
ADC单通道转换模式  

使用特权

评论回复
xiaoyaodz| | 2021-7-1 20:02 | 显示全部楼层
如何启动ADC转换?  

使用特权

评论回复
febgxu| | 2021-7-1 20:02 | 显示全部楼层
adc中断怎么使用   

使用特权

评论回复
sdlls| | 2021-7-1 20:02 | 显示全部楼层
               

使用特权

评论回复
pixhw| | 2021-7-1 20:02 | 显示全部楼层
可以外加AD转换芯片?  

使用特权

评论回复
fentianyou| | 2021-7-1 20:03 | 显示全部楼层
adc怎么10位逐次比较得到转换结果的  

使用特权

评论回复
selongli| | 2021-7-1 20:03 | 显示全部楼层
ADC转换得到的值怎么换算成电压值?  

使用特权

评论回复
minzisc| | 2021-7-1 20:03 | 显示全部楼层
可以同时转换两路模拟量输入吗?

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 呐咯密密 得到打赏 ¥310.00
  • 2 qbwww 得到打赏 ¥265.00
  • 3 yanzhengxin1 得到打赏 ¥200.00
  • 4 full_stack 得到打赏 ¥100.00
  • 5 laocuo1142 得到打赏 ¥55.00
  • 6 二哲科技 得到打赏 ¥50.00
  • 7 zhangjiantao 得到打赏 ¥50.00
  • 8 改名了 得到打赏 ¥50.00
  • 9 小叶三千 得到打赏 ¥50.00
  • 10 cjseng 得到打赏 ¥50.00
在线客服 快速回复 返回顶部 返回列表