LPC1114 - AD采集

news/2025/2/22 22:44:03/

一、基础知识

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.ppmy.cn/news/280046.html

相关文章

酷比魔方可以PHP编程么,深度测评剖析酷比魔方iplay20pro和台电M40有没有区别?哪个好?专家深度剖析...

蚌埠市网友 来自微信小程序 这两个酷比魔方iplay20pro和台电M40区别不是很大的哈&#xff0c;配置是差不多的&#xff0c;只是说款式不太一样&#xff0c;看个人喜欢吧&#xff0c;我自己用的是酷比魔方iplay20 Pro&#xff0c;外观是我喜欢的&#xff0c;整体看着相当大气&…

酷比、原道、艾诺等一系列国产山寨平板电脑在ubuntu系统下adb不识别问题的统一解决方案

我有三个平板电脑&#xff0c;其中两个是国产的&#xff0c;cube酷比魔方的U9GT2和艾诺的novo8 advenced。 最近在ubuntu上编译android的源代码&#xff0c;可是发现ubuntu下adb识别国产平板不是那么容易的 这个问题困扰了我好久&#xff0c;现在解决了&#xff0c;整理一下&…

“番茄工作法” 工欲善其事必先利其器

前言 上一篇的《番茄工作法》让你的一天变成26小时文章中&#xff0c;介绍了番茄工作法的基本原理&#xff0c;里面也提到了我使用的一些工具。 所谓工欲善其事必先利其器&#xff0c;在开始番茄工作法的阶段&#xff0c;有一个工具&#xff0c;才能让我们事半功倍&#xff0c…

android apk无法安装高版本号,android 使用FileProvider 兼容apk 在7.0版本无法安装

源头 都是因为一个bug android.os.FileUriExposedException: file:///storage/emulated/0/mwh/app.apk exposed beyond app through Intent.getData() 复制代码 因为这个bug 显示 原来的 apk安装方法无法在高于7.0 的手机系统上安装apk了。 所以就得需要使用FileProvider 来做兼…

PC并没有没落 手机移动市场分析

手机输入很麻烦&#xff0c;简短输入还行&#xff0c;长篇大论输入&#xff0c;手机不适合&#xff0c;而且还要手拿着。 所以手机定位手持设备&#xff0c;采集&#xff0c;数字助理功能&#xff0c;这些都是方便携带设备&#xff0c;加上屏幕小&#xff0c;有多少人是用来看…

雷锋科普:联发科MT6577,国产平民双核手机的芯

联发科MediaTek创立于1997年&#xff0c;是世界顶尖的IC专业设计公司&#xff0c;位居全球消费性IC片组的领航地位。在功能机兴盛时期&#xff0c;联发科凭借低价功能机解决方案造就了深圳山寨机产业&#xff0c;甚至对世界各大知名手机厂商造成直接或间接的影响&#xff0c;一…

MTK6577手机有哪些 MT6577手机汇总

MTK 手机 网: 联发科 的 双核 智能手机 芯片 MTK6577 已经发布快2个月了,而采用了MTK MT6577 芯片的手机有哪些, MTK手机 网对近期采用 MTK6577方案 的智能手机做了个列表,方便大家查阅. 以下表格中的数据来源于官方公布的消息,不排除手机厂商会对未上市的手机…

手机酷比android版本,系统:从安卓2.3跨入安卓4.0

系统&#xff1a;从安卓2.3跨入安卓4.0 此次全新升级的koobee i55对系统进行了更新&#xff0c;搭载了定制版Android4.0操作系统。由于搭载1GHz高通骁龙S4双核MSM8225处理器&#xff0c;因此在Android4.0下的操作和之前koobee i50一样流畅。而且在图标的设计上也脱离了之前Andr…