[PIC®/AVR®/dsPIC®产品]

使用MCC学习PIC单片机 – ADCC 模数转换

[复制链接]
6390|27
手机看帖
扫描二维码
随时随地手机跟帖
oxygenzz|  楼主 | 2019-3-22 16:40 | 显示全部楼层 |阅读模式
本帖最后由 oxygenzz 于 2019-3-25 18:42 编辑

ADCMCU的基本外设,用于采集模拟信号进行模数转换。ADCC是一种高级的ADC外设。下面以PIC16F18446为例,使用MCC来学习这款外设。

我们先把ADCCMCC配置界面和数据手册中的模块框图做一对比。ADC时钟配置,电压参考,通道是需要配置的主要参数。
578875c949eb65407a.png

256315c949ecb4a434.png


1.     ADC时钟设设置,TAD需要满足数据手册的规定。转换时间基本上为11.5倍的TAD,而且时间太长太短都不建议采用。见图。

278005c949edd7705a.png

21315c949ee406610.png

2.     参考电压文档里也有详细介绍,需要注意的是,如果使用FVR 1.024/2.048/4.096V 作为正参考电压,需要使能FVR外设。
123165c949eefea3ae.png

3.     ADC转换通道分为内部通道和由管脚引入的外部通道。内部通道涉及到其他外设的,相关外设需要使能。
737515c949f0b3cde0.png

外部通道需要通过MCC 的管脚管理器配置。选择的管脚(如RB6, RC2)会设置为模拟通道。
248595c949f2754c4d.png

346305c949f2fb3693.png

由框图可知,通道由PCH<5:0>来选择。

4.     转换结果保存在ADRESH和ADRESL中。可选择左对齐或右对齐方式。


以上设置都是基于ADC工作在基本模式下的。从MCC下拉框可知,共有5种操作模式。下面简单看下其他的工作模式。
483055c949f404c7db.png

数据手册里找到对应解释。
462085c949f4a72361.png

基本模式就是普通的ADC转换器。其他模式是在ADC转换结果的基础上,加入了各种计算操作。以前需要软件做的平均和滤波操作现在都集成到ADCC硬件里了。模块的名字也从ADC升级到了ADCC,原来多出来的字母C是计算的意思。


MCC生成代码后。
初始化函数ADCC_Initialize(),通过寄存器操作,已经将操作模式,ADC时钟,参考电压,结果对齐方式等设置好。
void ADCC_Initialize(void)
{

   // ADDSEN disabled; ADGPOL digital_low; ADIPEN disabled; ADPPOL Vss;
   ADCON1 = 0x00;
   // ADCRS 0; ADMD Basic_mode; ADACLR disabled; ADPSIS RES;
   ADCON2 = 0x00;
   // ADCALC First derivative of Single measurement; ADTMD disabled; ADSOIADGO not cleared;
   ADCON3 = 0x00;
   // ADMATH registers not updated;
   ADSTAT = 0x00;
   // ADNREF VSS; ADPREF VDD;
   ADREF = 0x00;
   // ADACT disabled;
   ADACT = 0x00;
   // ADCS FOSC/6;
   ADCLK = 0x02;
   // ADGO stop; ADFM right; ADON enabled; ADCS FOSC/ADCLK; ADCONTdisabled;
   ADCON0 = 0x84;
   }

因为在MCC界面上没有选择使用中断,生产的代码是以Polling 方式工作的。
开始转换  -> 查询是否转换完成 -> 如完成, 读取结果

开始转换,需要给定通道号。ADPCH寄存器设定通道。ADCON0ADON开启ADC功能,ADGO设为1启动转换。需要注意的是,在选择通道之后,开启转换之前,有时候需要人为插入一下延迟,以避免外部通道输入电阻电容过大带来的影响。
void ADCC_StartConversion(adcc_channel_tchannel)
{
   // select the A/D channel
   ADPCH = channel;      

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

   // Start the conversion
   ADCON0bits.ADGO = 1;
}

检查转换是否完成。ADGO变低意味着转换完成。
bool ADCC_IsConversionDone()
{
   // Start the conversion
   return ((unsigned char)(!ADCON0bits.ADGO));
}

读取结果,16位全部读出。然后用户程序需要根据结果对齐选择,来处理转换输出。
adc_result_t ADCC_GetConversionResult(void)
{
   // Return the result
   return ((adc_result_t)((ADRESH << 8) + ADRESL));
}


除了以上分步处理外,还提供了一下单一函数完成一次转换。
adc_result_tADCC_GetSingleConversion(adcc_channel_t channel)
{
   // select the A/D channel
   ADPCH = channel;  

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

   //Disable the continuous mode.
   ADCON0bits.ADCONT = 0;   

   // 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));
}

评论
du12311 2019-8-30 14:10 回复TA
那个小锁头打开和关闭到底是什么意思啊。 
zyaoping| | 2019-3-23 09:32 | 显示全部楼层
谢谢分享啊,学习中。。。。。。

使用特权

评论回复
xinxianshi| | 2019-3-23 21:28 | 显示全部楼层
PIC的结构非常好理解。

使用特权

评论回复
wds-zou| | 2019-3-24 17:38 | 显示全部楼层
谢谢分享!好好。。。。。。

使用特权

评论回复
mnmjmkml| | 2019-3-26 15:20 | 显示全部楼层
感谢分享!很好的学习资料。

使用特权

评论回复
wanduzi| | 2019-3-28 11:18 | 显示全部楼层
有教程就好学

使用特权

评论回复
触觉的爱| | 2019-3-28 21:19 | 显示全部楼层
辅助软件、工具越来越齐全了。话说不是应该出一份国文版的说明文档吗

使用特权

评论回复
CoolSilicon| | 2019-3-29 08:33 | 显示全部楼层
加油加油!!还有19个模块的MCC!!

使用特权

评论回复
奔波儿熊| | 2019-3-29 11:34 | 显示全部楼层
顶起来!

使用特权

评论回复
skyfans000| | 2019-4-26 22:52 | 显示全部楼层
太好了 ,感觉比ST的好用得多啊

使用特权

评论回复
monitoring| | 2019-4-28 16:12 | 显示全部楼层
感谢楼主分享!好好学习下

使用特权

评论回复
hesmile| | 2021-10-9 10:00 | 显示全部楼层
请问新建工程中无法打开MCC怎么回事?

使用特权

评论回复
usysm| | 2021-11-12 18:02 | 显示全部楼层
我用的是mplab,用MCC18  

使用特权

评论回复
jkl21| | 2021-11-12 18:03 | 显示全部楼层
使用MCC学习PIC单片机方便多了。   

使用特权

评论回复
wwppd| | 2021-11-12 18:03 | 显示全部楼层
MCC配置详细指南         

使用特权

评论回复
maqianqu| | 2021-11-12 18:03 | 显示全部楼层
PIC/MCC 高级了。            

使用特权

评论回复
dspmana| | 2021-11-12 18:04 | 显示全部楼层
MCC时钟配置界面。   

使用特权

评论回复
eefas| | 2021-11-12 18:04 | 显示全部楼层
使用MPLAB X IDE新建项目和通过MCC配置引脚

使用特权

评论回复
pl202| | 2021-11-12 18:04 | 显示全部楼层
ADCC第一次听说了。   

使用特权

评论回复
htmlme| | 2021-11-12 18:04 | 显示全部楼层
用MCC配置pic单片机好用。   

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

190

帖子

11

粉丝