搜索
打印

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

[复制链接]
87592|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hu9jj|  楼主 | 2021-6-13 14:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
#申请原创#     

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


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


    生成代码后,在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转换的结果:


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


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

使用特权

评论回复
沙发
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是不是很好玩

使用特权

评论回复
5
passdomo| | 2021-6-24 11:11 | 只看该作者
强 后续会有多通道实验展示嘛?

使用特权

评论回复
6
hu9jj|  楼主 | 2021-6-24 12:14 | 只看该作者
passdomo 发表于 2021-6-24 11:11
强 后续会有多通道实验展示嘛?

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

使用特权

评论回复
7
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);)),实现数据的读取。所以多通道实质与单通道是一样的流程。

使用特权

评论回复
8
kkzz| | 2021-7-1 20:00 | 只看该作者
如何实现单片机中多路AD转换  

使用特权

评论回复
9
hudi008| | 2021-7-1 20:00 | 只看该作者
怎样实现ADC连续转换

使用特权

评论回复
10
lzmm| | 2021-7-1 20:00 | 只看该作者
adc的连续转换与单次转换有什么区别  

使用特权

评论回复
11
minzisc| | 2021-7-1 20:01 | 只看该作者
如何同时实现两个传感器的模拟量adc转换

使用特权

评论回复
12
selongli| | 2021-7-1 20:01 | 只看该作者
ADC转换如何计算   

使用特权

评论回复
13
fentianyou| | 2021-7-1 20:01 | 只看该作者
ADC单通道转换模式  

使用特权

评论回复
14
xiaoyaodz| | 2021-7-1 20:02 | 只看该作者
如何启动ADC转换?  

使用特权

评论回复
15
febgxu| | 2021-7-1 20:02 | 只看该作者
adc中断怎么使用   

使用特权

评论回复
16
sdlls| | 2021-7-1 20:02 | 只看该作者
               

使用特权

评论回复
17
pixhw| | 2021-7-1 20:02 | 只看该作者
可以外加AD转换芯片?  

使用特权

评论回复
18
fentianyou| | 2021-7-1 20:03 | 只看该作者
adc怎么10位逐次比较得到转换结果的  

使用特权

评论回复
19
selongli| | 2021-7-1 20:03 | 只看该作者
ADC转换得到的值怎么换算成电压值?  

使用特权

评论回复
20
minzisc| | 2021-7-1 20:03 | 只看该作者
可以同时转换两路模拟量输入吗?

使用特权

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

本版积分规则

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

快速回复

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

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 kk的回忆 得到打赏 ¥561.01
  • 2 火星国务卿 得到打赏 ¥518.00
  • 3 呐咯密密 得到打赏 ¥295.00
  • 4 小叶三千 得到打赏 ¥210.00
  • 5 jinglixixi 得到打赏 ¥190.00
  • 6 Gavin3389 得到打赏 ¥180.00
  • 7 神圣雅诗人 得到打赏 ¥170.00
  • 8 xyz549040622 得到打赏 ¥150.00
  • 9 linghz 得到打赏 ¥120.00
  • 10 137017878 得到打赏 ¥115.00
在线客服 快速回复 返回顶部 返回列表