五,ADC的配置

ADC是单片机经常用到的功能,主要是数模转换,我们来配置ADC的使用。

一;ADC初始化,主要配置ADC的时钟和速度;

因为ADC的结果是一个10位的值,所以需要用2个寄存器存放,分别是ADC_RESADC_RESL,加起来有16位,但是我们就用10位,所以转换结果我们需要设置左对齐还是右对齐;

但是通常选择右对齐,即把B5位写1


二;ADC的工作频率,通过B0-B34个位控制,一共有16种,

ADC频率 = 系统频率 / 2 /SPEED42进制转10进制并加1

通常设置最低速,速度越慢值越精确;

程序:

ADCCFG = 0X2F; // 设置ADC时钟 = sysclk/2/16 = 1M 转换结果右对齐


三; ADC的通道,因为不是每一个IO都能使能ADC,在使用前需要先配置通道。

打开电源,启动,然后ADC引脚位P1^7

程序:

ADC_CONTR = 0X87; // 打开电源,配置引脚

ADC_CONTR |= 0X40; // 启动AD转换,ADC_CONTR寄存器B6位置1


四;获得ADC转换结果,延时2个空操作再判断ADC转换有没有完成

while(!(ADC_CONTR&0X20)); // 查询ADC完成,ADC_CONTRB5位与0010 0000

ADC_CONTR &= ~0X20; // 清除完成标志


五;转换结束以后,ADC的值被保存在两个寄存器里ADC_RESADC_RESL,

定义一个16位的变量res,因为右对齐把ADC_RES左移8位并和ADC_RESL相与并保存到16位的变量中

程序:

res = (ADC_RES<<8)|ADC_RESL; //读取ADC结果


六,当电源不稳的时候,通过ADC内部参考电压反推出准确的电源电压,

用来更准确的计算被选通道io的电压值,内部1.19V参考是出厂校准的值,存放在BGV_Voltag寄存器里面,直接指针获取;

程序;

Int *BGV;//定义指针变量BGV

BGV = (int idata *)0xEF; // 读出芯片内部BGV电压值,毫伏

然后再读第15通道的ADC值,就是参考电压的ADC值,因为BGV的值不变,电源电压会变,第15通道读出的ADC也就会变,这样就可以反推出准确的供电电压。

这个作用可以是电池供电的时候电量不断下降的时候监控电池电压。

可以通过参考电压并读出ADC的值来计算其他通道的电压值。

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值