打印

【九齐单片机专题】源程序讲解[3] ADC及电压测量

[复制链接]
2084|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xys9190|  楼主 | 2020-11-1 17:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xys9190 于 2020-11-1 21:31 编辑

62D 是一个对电压有精准控制能力的MCU ,LVD(低电压检测)、LVR(低电压复位)、ADC(电压检测)。
LVD结构图   

LVD:可通过寄存器设定目标电压,超过目标电压LVDOUT置位,否则LVDOUT复位。
LVR:可通过配置页设定低电压复位电压,当电源电压低于目标电压时就会发生复位。
ADC结构图

ADC参考电压可选VDD,4V,3V,2V
ADC输入通道可选择AIN0~AIN10
ADCCLK可选Fcpu/1,Fcpu/2,Fcpu/4,Fcpu/8,Fcpu/16
采样时间可选:1ADCCLK,2ADCCLK,4ADCCLK,8ADCCLK
ADC可选8-12位有效值


***********************************************************************
ADC配置
ADMD = C_ADC_En | C_ADC_CH_En | C_ADC_PB3 ;
ADVREFH = C_Vrefh_2V;        
ADR          = C_Ckl_Div8;        
ADCR  = C_Sample_4clk | C_12BIT | C_PB3_AIN8 ;        
//ADCR = C_Sample_1clk | C_12BIT;
//PACON = C_PA0_AIN0;         
        
ADMDbits.GCHS = 1;
delay(50);                                                     // Delay 0.56ms(Instruction clock=4MHz/2T) for waiting ADC stable


//ADC采样 ,使用查询方式或者ADC的值,在使用之前有必要使用1/4进行ADC数值矫正
if(adcStp == 0)
{
       ADMD  = 0x90 | C_ADC_PB3;                                // Select AIN0(PA0) pad as ADC input
        //ADMD  = 0x90 | C_ADC_PA0;        
        ADMDbits.START = 1;                                        // Start a ADC conversion session
        while(ADMDbits.EOC);
        adcStp = 1;
}
else if(adcStp == 1)
{
        if(ADMDbits.EOC == 1)
        {
                adcStp = 0;
                adcCnt++;
                R_AIN0_DATA_LB += ( 0x0F & ADR);
                  R_AIN0_DATA    += ADD;
                 if(adcCnt == 8)
                  {
                          adcCnt = 0;
                          R_AIN0_DATA <<= 4;                                        // R_AIN0_DATA shift left 4 bit
                        //R_AIN0_DATA_LB &= 0xF0;                                // Only get Bit7~4
                        R_AIN0_DATA += R_AIN0_DATA_LB;                // R_AIN0_DATA + R_AIN0_DATA_LB
                        R_AIN0_DATA >>=5;                                        // R_AIN0_DATA divided 8  
                        adcVal = R_AIN0_DATA;                                // output val 0~1024
                        R_AIN0_DATA = 0;
                        R_AIN0_DATA_LB = 0;
                  }
        }
}

更多使用上的问题,可以加群讨论,直接加群主QQ提问。

使用特权

评论回复

相关帖子

沙发
zeshoufx| | 2020-11-2 08:46 | 只看该作者
谢谢分享【 ADC及电压测量 】

使用特权

评论回复
板凳
xys9190|  楼主 | 2021-4-12 10:47 | 只看该作者
zeshoufx 发表于 2020-11-2 08:46
谢谢分享【 ADC及电压测量 】

交个朋友,来群里交流

使用特权

评论回复
地板
yizhi1988| | 2021-5-24 09:32 | 只看该作者

谢谢分享【 ADC及电压测量 】,刚刚开始学习九齐单片机,刚好手上有个案子,想拿来练练手,这两天弄了好久,没有弄出来,楼主真是及时雨呀!万分感谢!!!

使用特权

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

本版积分规则

18

主题

140

帖子

5

粉丝