N76E003 ADC使用方法

N76E003 ADC使用方法主要特点 1 12 位 ADC 2 8 通道单端输入模式 一次只能测一个通道电压 值都存在 ACCRH ACCRL 3 内部带隙电压 band gapvoltage 为 1 22V 可作为内部参考电压 4 启动方式 软件启动 硬件触发方式启动 ADC 模块结构图实例不多说了 直接贴代码 实现的功能为使用内部参考电压测 VCC 电压值 voidmain void

主要特点:

1、12位ADC。

2、8通道单端输入模式。(一次只能测一个通道电压,值都存在ACCRH、ACCRL)

3、内部带隙电压(band-gap voltage)为1.22V,可作为内部参考电压

4、启动方式:软件启动、硬件触发方式启动

ADC模块结构图

N76E003 ADC使用方法

实例

不多说了,直接贴代码,实现的功能为使用内部参考电压测VCC电压值。

void main(void) { uint16_t BandGap_H, BandGap_L, AIN3_H, AIN3_L; uint16_t BandGap_v; uint32_t AIN3_v = 0; uint16_t voltage = 0; while(1) { Enable_ADC_BandGap; clr_ADCF; set_ADCS; // Each time ADC start trig signal while(ADCF == 0); clr_ADCF; set_ADCS; // Each time ADC start trig signal while(ADCF == 0); clr_ADCF; set_ADCS; // Each time ADC start trig signal while(ADCF == 0); BandGap_H = ADCRH; BandGap_L = ADCRL; BandGap_v = BandGap_H << 4 | BandGap_L; //printf ("\n Value = 0x%bx",ADCRH); //printf ("\n Value = 0x%bx",ADCRL); Enable_ADC_AIN3; clr_ADCF; set_ADCS; // Each time ADC start trig signal while(ADCF == 0); AIN3_H = ADCRH; AIN3_L = ADCRL; AIN3_v = AIN3_H << 4 | AIN3_L; //printf ("\n AIN3 Value = 0x%bx",ADCRH); //printf ("\n AIN3 Value = 0x%bx",ADCRL); voltage = (uint16_t)((uint32_t)AIN3_v * 1220 / BandGap_v ); Timer0_Delay1ms(1000); } }

注意事项:

这里多次测内部产考电压的原因是:

连续(不延时)多次读取band-gap voltage的值 与 单次读取然后延时再次读取到的值不同,而且延时时间不同,读取到的值也不同(相当无语)

例如下面两段代码:

Enable_ADC_BandGap; //Find in "Function_define.h" - "ADC INIT" while(1) { clr_ADCF; set_ADCS; // Each time ADC start trig signal while(ADCF == 0); BandGap_H = ADCRH; BandGap_L = ADCRL; Timer0_Delay1ms(1000); }
Enable_ADC_BandGap; //Find in "Function_define.h" - "ADC INIT" while(1) { clr_ADCF; set_ADCS; // Each time ADC start trig signal while(ADCF == 0); BandGap_H = ADCRH; BandGap_L = ADCRL; //Timer0_Delay1ms(1000); }

加延时和不加延时读出来的值是不一样的,实测不加延时读出来的比较准确。所以实例中使用的小技巧是连续读3次内部参考电压后再测vcc,当然具体多少次自己定义。

实验结果

vcc万用表测得的电压为3.3v,adc测得的电压为3.27v左右,误差30mv左右。

最后说一句,假如vcc不固定的,想用内部参考电压,但要求精度高的方案,慎用这款mcu

 

也许有错误,望大家指正,不胜感激!

 

版权声明:本文为博主原创文章,转载请注明出处。 

链接:https://blog.csdn.net/Huangxuesi/article/details/

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231969.html原文链接:https://javaforall.net

(0)
上一篇 2025年11月10日 上午11:01
下一篇 2025年11月10日 上午11:22


相关推荐

  • Mac安装yarn

    Mac安装yarn1.全局安装yarnnpmi-gyran#查看安装是否成功yarn–version2.设置淘宝镜像,下载速度更快yarnconfigsetregistryhttps://registry.npm.taobao.com3.配置环境变量echo”PATH=$PATH:~/.yarn/bin”>>~/.bash_profile&&source.bash_profile…

    2022年5月26日
    356
  • 微信小程序即时聊天对话窗口静态源码[通俗易懂]

    微信小程序即时聊天对话窗口静态源码[通俗易懂]实例描述:静态的源码,需要自己二次开发适用范围:所有版本微信小程序库日期:2019/9/2前端:<scroll-viewstyle=”height:{{height}}vh;width:100vw;display:flex;position:relative;flex-direction:column;top:{{top?top:0}}px;”…

    2022年5月14日
    52
  • 3.3v与5v电平转换_5v电压经过10位A/D转换

    3.3v与5v电平转换_5v电压经过10位A/D转换问题背景在设计一个带MCU或者ARM系统电路时候,经常遇见MCU的VCC是3.3V,但是外围电路需要5V,有时候是反过来。虽然现在MCU的IO都声称支持TTL电平,但是我们谁也不想将MCU的IO口直接接上5V,即使IO口先串联一个电阻,然后再接上5V,这样总是不放心,担心烧掉MCU。再说了,MCU声称IO口支持TTL电平,但是并不是所有的IO都是这样,反正有隐患。解决方法就是电平转换。具体的我只说我在实际项目中运用到的方法,而且在项目中运用比较方便的,其他的都不再说了。法一:基于门电路第一种:利用O

    2022年8月10日
    12
  • JAVA MD5加密「建议收藏」

    JAVA MD5加密「建议收藏」一、什么是MD5加密MD5,全称为“MessageDigestAlgorithm5”,中文名“消息摘要算法第五版”,它是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。严格来说,它是一种摘要算法,是确保信息完整性的。不过,在某种意义上来说,也可以算作一种加密算法。MD5算法具有很多特点:压缩性:任意长度的数据,算出的MD5值长度都是固

    2022年7月8日
    43
  • JS几种数组遍历方式总结

    JS几种数组遍历方式总结JS数组遍历的几种方式JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比第一种:普通for循环代码如下:for(j=0;j&lt;arr.length;j++){}简要说明:最简单的一种,也是使用频率最高的一种,虽然性能不弱,但仍有优化空间第二种:优化版for循环代码如下…

    2022年7月12日
    21
  • getattr getattribute_getparameter返回值

    getattr getattribute_getparameter返回值问题描述今天开发验证码验证功能,需要将手机号和对应的验证码设置到session中以便后面的验证,具体代码如下:1.发送验证码并把验证码保存到session中protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresponse)throwsServletException,IOException{ try{mresponse=response;St

    2025年6月19日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号