LPC1114 - AD采集

news2024/11/23 11:37:33

一、基础知识

1.1位操作

  • 对寄存器的bit5写0:

寄存器&=~(1<<5);

现在运用你的C语言知识分析一下,把十进制的1写成二进制32位数就是:

00000000000000000000000000000001

(1<<5)就是把1右移5下,左面补零,执行完这句话以后数就变成:

00000000000000000000000000100000

~(1<<5)就是再把这个数反相:

11111111111111111111111111011111

最后呢!再把这个数&给寄存器,所以执行完以后,除了bit5被改成了0,其它的位都没有变。

  • 对寄存器的bit5写1:

寄存器|=(1<<5);

现在运用你的C语言知识分析一下,把十进制的1写成二进制32位数就是:

00000000000000000000000000000001

(1<<5)就是把1右移5下,左面补零,执行完这句话以后数就变成:

00000000000000000000000000100000

最后呢!再把这个数| 给寄存器,所以执行完,除了bit5被改成了1,其它的位为0。

二、代码分析

/*****************************************/
/* 函数名称:初始化ADC口(AD7)          */
/*****************************************/
void ADC_Init(void)
{
    SYSCON->PDRUNCFG &= ~(0x1<<4);        // ADC模块上电
    SYSCON->SYSAHBCLKCTRL |= (1<<13);     // 使能ADC时钟

    SYSCON->SYSAHBCLKCTRL |= (1<<16);     // 使能IOCON时钟
    IOCON->PIO1_11 &= ~0x9F;              // 把P1.11引脚选择模拟输入方式    
    IOCON->PIO1_11 |= 0x01;               // 把P1.11引脚设置为AD7功能
    SYSCON->SYSAHBCLKCTRL &= ~(1<<16);    // 关闭IOCON时钟
    ADC->CR = (1<<7)|                     /* bit7:bit0   选择通道7作为ADC输入,即P1.11引脚 */
              (23<<8 )|                   /* bit15:bit8  把采样时钟频率设置为2MHz 48/(23+1)*/
              (1<<16 )|                   /* bit16       硬件扫描模式                       */
              (0<<17 )|                    /* bit19:bit17 10位模式                           */
              (0<<24 );                   /* bit26:bit24 硬件扫描模式下这些位置0           */
}
  • SYSCON->PDRUNCFG &= ~(0x1<<4); // ADC模块上电

#define SYSCON ((SYSCON_TypeDef *) SYSCON_BASE) //系统配置

RW_en PDRUNCFG; /掉电配置 寄存器,地址偏移: 0x238 (R/W) */

第8-31位为保留位

  • SYSCON->SYSAHBCLKCTRL |= (1<<13); // 使能ADC时钟

系统AHB时钟控制寄存器SYSAHBCLKCTRL全部位结构,其字节地址为0x400480080

  • SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON时钟

IO配置模块时钟控制位

  • IOCON->PIO1_11 &= ~0x9F; // 把P1.11引脚选择模拟输入方式

0x9F:1001 1111

~0x9F:0110 0000

IOCON寄存器:0000 0000 0000 0000 0000 0000 0000 0000

  • IOCON->PIO1_11 |= 0x01; // 把P1.11引脚设置为AD7功能

  • SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 关闭IOCON时钟

之前开时钟,现在又关闭,没理解。

IOCON模块的作用是什么?

是改变IO的功能,改变了IO的功能以后,程序运行过程中就不需要改变IO的功能了,所以就关了时钟省电
比如某个引脚,本来是GPIO,我在项目中,要用这个引脚的ADC功能,那么把这个引脚初始化为ADC功能以后,就不需要改变IO的功能了,所以关了IOCON时钟省电
  • ADC->CR = (1<<7)| /* bit7:bit0 选择通道7作为ADC输入,即P1.11引脚 */

(23<<8 )| /* bit15:bit8 把采样时钟频率设置为2MHz 48/(23+1)*/

(1<<16 )| /* bit16 硬件扫描模式 */

(0<<17 )| /* bit19:bit17 10位模式 */

(0<<24 ); /* bit26:bit24 硬件扫描模式下这些位置0

(1)第0-7位(SEL)引脚选择位,置1有效。当第16位(BURST)置0,只能选择一个通道,当第16位(BURST)置1,允许多位置1;

(2)APB 时钟 (PCLK) 被 CLKDIV +1 分频,产生 ADC 时钟。

/********************************************/
/* 函数功能:读取电压值(AD7)              */
/* 出口参数:adc_value, 读到的电压值        */
/********************************************/
uint32 ADC_Read(void)
{
    uint32 adc_value=0;
    uint8 i;
    adc_value = ADC->DR[7];    //读取第一次的值
    adc_value =  0;            // 丢弃
    for(i=0;i<10;i++)           // 再连续读取10个电压值
    {
         delay_us(6);
        adc_value += ((ADC->DR[7]>>6)&0x3FF);        
    }
    adc_value = adc_value/10;  // 把读到的10个电压值取平均值
    adc_value = (adc_value*Vref)/1024; // 转换为真正的电压值

    return adc_value;      // 返回结果
}

adc_value += ((ADC->DR[7]>>6)&0x3FF); /* 提取 10 位的 A/D 转换结果 */

adc_value =adc_value+(ADC->DR[7]>>6)&0x3FF);

ADC->DR[7]:A/D 通道 7 数据寄存器。该通道包含在通道 7 上完成。

读取通道7的AD值

0x3FF:

0011 1111 1111

0000 0000 0000 0000 0000 0000 0000 0000

右移6位的原因是ADC对应的DR寄存器中0-5位是保留(数据手册有说明可以查的到),如果要用的话需要先移位再使用,后面的3FF是因为ADC处理的数据都是10位的精度所以要“&”一下。

三、PT100

T100电阻是指铂热电阻,其中PT是指“铂”元素;100是指铂热电阻的特性在0℃时,电阻值刚好是100Ω,在100℃时它的阻值约为138.5Ω。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/623430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务下如何选择OAuth2授权之四种模式

OAuth2.0是一个授权框架&#xff0c;他规定了客户从授权服务器获取令牌Token的规则。 一、OAuth2的组成部分 1.OAuth2.0需要解决的问题 要理解OAuth2.0&#xff0c;先要知道为什么会有这个东西产生&#xff0c;或者说他能帮我们解决什么问题&#xff0c;其实简单说他就是帮我…

【解决】跨设备访问Ubuntu接口文档,请求超时,ping不通问题

文章目录 一、问题描述二、系统环境三、问题原理说明1. 常见问题原因2. 说说IP 地址和子网掩码不匹配问题 四、有风险的解决方法1. 一般的解决方法&#xff1a;2. 我们的解决方法&#xff1a;第一&#xff1a;第二&#xff1a; 选择网络适配器第三&#xff1a;桥接模式第四&…

js常用的一些技巧【一行】

前言 总结一些常用的&#xff0c;但是一时可能想不起来的一些js小技巧&#xff0c;方便CV 数组 生成数组 当你需要要生成一个0-99的数组 方案1 const createArr (n) > Array.from(new Array(n), (v, i) > i) const arr createArr(100) // 0 - 99 数组方案2 const c…

相同性能和体积的磁体,吸力是一样的吗?

很多小伙伴可能都会有这样一个疑问&#xff0c;相同性能和体积的磁体&#xff0c;它们的吸力一样吗&#xff1f;网上有说钕铁硼磁铁的吸力是自身重量的640倍&#xff0c;这可信吗&#xff1f; 这个问题其实可以发散开&#xff0c;那就是磁铁的吸力与哪些因素有关。首先需要明确…

【已解决】qt4安装包下载含下载链接(完全版)

总所周知&#xff0c;c qt4.8是一个稳定版本&#xff0c;而qt4.8去网上找的我好辛苦&#xff0c;而且官网时而挂机一样&#xff0c;网站崩溃一样&#xff0c;即使找到了&#xff0c;它们也会让你下载qt4.8版本&#xff0c;而那些&#xff0c;比如这里就会显得手足无措。 问题…

爱创科技闪“药”亮相第62届全国制药机械博览会!

2023年5月28日-30日&#xff0c;第62届&#xff08;2023年春季&#xff09;全国制药机械博览会暨2023中国国际制药机械博览会在青岛国际世界博览城完美收官。全国药机展是业界公认的专业化、国际化、规模大、展品全、观众多&#xff0c;集贸易、研讨于一体的制药装备行业交流平…

FPGA实战开发-基于的ddr图像缓存设计(上)

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 例如&#xff1a; 本文主要基于DDR的图像缓存设计 整体架构流程 提示&#xff1a;这里可以添加技术整体架构 先用图像产生模块产生一个1080P60Hz的测试图像&#xff0c;然…

内网程序配置外网访问方案

该方案可解决客户公司没有固定IP&#xff0c;内网IIS程序配置外网访问。如果有固定IP&#xff0c;可以直接在公司主路由器上映射端口即可。 一、申请一个公司域名和云服务器 二、在申请的公司一级域名下&#xff0c;解析一个二级域名&#xff0c;使用泛域名方式&#xff0c;解…

Mysql版本升级教程【5.x到8.x】

目录 0.查看当前版本1.备份导出原数据2.停止Mysql服务3.卸载Mysql相关组件4.删除Mysql安装目录5.删除Mysql数据目录6.官网下载新版安装包7.安装新版Mysql8.配置环境变量 0.查看当前版本 1.备份导出原数据 可以在Navicat里将相关数据库存到.sql文件中&#xff0c;到时候直接导入…

阿里面试太为难我了,阿里面试了7轮(拿下P7岗offer)

前言 今年的大环境非常差&#xff0c;互联网企业裁员的现象比往年更严重了&#xff0c;可今年刚好是我的第一个“五年计划”截止的时间点&#xff0c;说什么也不能够耽搁了&#xff0c;所以早早准备的跳槽也在疫情好转之后开始进行了。但是&#xff0c;不得不说&#xff0c;这…

准备跳槽的兄弟可以看看...

八股文为什么这么火爆&#xff1f; 因为只要大家技术和能力过关&#xff0c;八股文能帮助大家在面试时有很好的表现和稳定的发挥&#xff0c;让面试官预估到你能带来的价值&#xff0c;从而实现薪资高涨幅。 总结了一些小伙伴的面试经验&#xff0c;和我自己多年的资料库存&a…

Zabbix“专家坐诊”第194期问答汇总

问题一 Q&#xff1a;请问一下&#xff0c;我这个监控上了光交和V7000通过trap&#xff0c;mib文件也上传了&#xff0c;usr/snmp/mibs/V7000目录&#xff0c;是创建的监控项调用此文件夹下的mib文件&#xff0c;还是自动找呢&#xff1f; A&#xff1a;mib文件只用于mib内容…

深度学习架构-Tensorflow

深度学习基本概念 人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能的目的 就是让计算机能够像人一样思考。 强人工智能&#xff1a;就是要使机器学习人的理解、学习和执行任务的能力。 弱人工智能&#xff1a;指用…

计算机网络安全的主要内容是什么?CISP题库分享

在技术上&#xff0c;网络安全包括物理安全、运行安全、信息安全和安全保证四个方面: 物理安全 包括环境安全、设备安全和记录介质安全。环境安全涉及中心机房和通信线路的安全保护问题&#xff1b;设备安全涉及设备的防盗和防毁、设备的安全使用等问题&#xff1b;记录介质安…

linux-docker备份数据库

利用计划任务和批处理从docker容器中备份数据库文件到宿主机指定目录 如何创建定时任务 创建计划任务&#xff08;定时任务&#xff09;&#xff1a; crontab -e打开后是VI编辑器&#xff0c;将自己计划任务的内容写到里边然后wq&#xff08;保存并退出&#xff09;就行了 查…

当涉及到嵌入式开发时

以下是一些建议和关键要点&#xff0c;可以帮助您进行有效的开发&#xff1a; 硬件选择&#xff1a;根据项目需求选择合适的硬件平台和组件&#xff0c;包括处理器、存储器、传感器和通信接口等。考虑功耗、性能、可靠性和成本等因素。 软件开发环境&#xff1a;选择适合嵌入式…

3.1 增加多进程执行playwright

增加了多进程的方式执行测试代码&#xff0c;对代码改动比较大 1、case case目录依然是自动生成 2、config dir_collection.py新增了配置 mkdir_collections [case,log,img, ] del_collections [results,report ] del_regex temp3、data/img/log/resource/video data/im…

Linux内核4.14版本——drm框架分析(6)——实例注册drm device/ encoder/crtc/plane/connector等

目录 1. 简介 2. drm device的注册 3. fops 根据前面几篇文档的介绍&#xff0c;我们知道了drm的整体的构成&#xff0c;后面的文章我们从实际的一个例子中进行分析。 1. 简介 kernel版本&#xff1a;4.14 gpu&#xff1a;ARM Mali DP650 hdmi&#xff1a;dw hdmi 涉及的…

[已解决]无法在Windows 11中扩展C盘

如果你的台式电脑或笔记本电脑刚刚升级到Windows 11&#xff0c;如果你没有足够的硬盘空间来保存新文件和软件&#xff0c;那你可能会收到磁盘空间不足的警告。在这种情况下&#xff0c;你可能需要扩展分区来解决这个问题。 虽然Windows系统自带了“磁盘管理”工具&a…

10分钟了解Kubernetes网络

Kubernetes是现代容器化应用不可或缺的强大、可靠的基础平台。本文将介绍Kubernetes中与网络相关的组件&#xff0c;正是这些组件支撑Kubernetes成为云原生应用的首选基础设施。原文: Networking in Kubernetes 网络是Kubernetes中非常值得理解的重要主题&#xff0c;它帮助Kub…