历史上的今天
返回首页

历史上的今天

今天是:2025年07月30日(星期三)

正在发生

2018年07月30日 | PIC单片机入门_8位AD转换器

2018-07-30 来源:eefocus

1.前言

PIC16F876的模数转换器 (A/D) 模块有多达 8 个模拟输入通道。如果选择8位A/D 转换器,那么芯片可以将能将一个模拟输入信号转换成相应的 8 位数字信号。采样保持输出是转换器的输入,A/D 转换器采用逐次逼近法产生转换结果。通过软件设置,模拟参考电压可以选择为器件的正向电源电压 (VDD) 或 VREF 引脚上的电平。 A/D 转换器具备可在休眠状态下工作的独特特性。

2.AD控制原理

与A/D 转换器相关连得有 3 个寄存器,它们分别是:
• A/D 结果寄存器 (ADRES)      
• A/D 控制寄存器 0 (ADCON0)  控制 A/D 模块的操作
• A/D 控制寄存器 1 (ADCON1)   端口的引脚功能进行配置I/O 引脚可被配置成模拟输入 ( 其中一个 I/O 也可作为模拟参考电压 ) 或数字 I/O 口。 
A/D 模块结构框图如图 所示:


2.1 AD控制寄存器0:控制A/D模块操作


bit [7:6] ADCS1:ADCS0:A/D 转换时钟选择位;00 = FOSC/2;01 = FOSC/8;10 = FOSC/32;11 = FRC ( 来自内部 A/D 的 RC 振荡器的时钟 )

bit [5:3] CHS2:CHS0:模拟通道选择位;000 = channel 0, (AN0);001 = channel 1, (AN1);010 = channel 2, (AN2);011 = channel 3, (AN3);100 = channel 4, (AN4);101 = channel 5, (AN5);110 = channel 6, (AN6);111 = channel 7, (AN7)。

注:PIC16F876A仅提供AN0~AN4模拟通道选择位。

bit 2 GO/DONE:A/D 转换状态位;当 ADON = 1 时,1 = A/D 转换正在进行;( 该位置 1 启动 A/D 转换。 A/D 转换结束后该位由硬件自动清零 );0 = 未进行 A/D 转换
bit 1 保留 : 总是保持该位为 0。
bit 0 ADON: A/D 模块开启位;1 = A/D 转换器模块工作;0 = A/D 转换器关闭,不消耗工作电流。

2.2 控制寄存器 1 (ADCON1):引脚功能配置


bit 7     ADFM: A/D转换结果格式选择位  1 = 右对齐  0 = 左对齐

bit6      ADCS2:A/D转换时钟选择位


bit 3:0 PCFG2:PCFG0:A/D 端口配置控制位;其端口配置效果图如下所示:


注 : 当 AN3 被选作 VREF 时, A/D 的参考电压为 AN3 引脚的电压。当 AN3 被选作模拟输入 (A) 时, A/D 的参考电压为器件的 VDD。

3.AD操作细则

当A/D转换完成之后,转换结果被载入ADRES寄存器,GO/DONE (ADCON0<2>)位被清零,且A/D中断标志位 ADIF 置 1。
当配置好 A/D 模块后,在启动转换前必须先选择A/D转换的通道。模拟输入通道的相应TRIS位
必须设置为输入。采集时间 ( acquisition time) 的确定我们要详细说明。在这一采集时间过去之后,A/D转换即可开始。

3.1 AD采集需要遵循的步骤 

1. 配置 A/D 模块:对模拟引脚 / 参考电压 / 数字 I/O (ADCON1) 进行配置;选择 A/D 输入通道 (ADCON0);选择 A/D 转换时钟 (ADCON0);打开 A/D 转换模块 (ADCON0)
2. 需要时,设置 A/D 中断: 将 ADIF 位清零;将 ADIE 位置 1;将 GIE 位置 1
3. 等待所需的采集时间
4. 启动 A/D 转换:将 GO/DONE 置 1 (ADCON0)
5. 等待 A/D 转换完成,通过以下两种方法之一可判断转换是否完成:轮询 GO/DONE 位是否被清零;或等待 A/D 转换的中断。
6. 读取 A/D 结果寄存器 (ADRES),需要时将 ADIF 位清零。
7. 要再次进行 A/D 转换,根据要求转入步骤 1 或步骤 2。每一位的 A/D 转换时间定义为 TAD。在下一次采集开始前至少需要等待 2TAD。

A/D 转换时序如下:


3.2 AD采集时间要求

TACQ = 放大器的建立时间 + 保持电容充电时间 +温度系数 = TAMP + TC + TCOFF

PIC为中档单片机提供了最小采集时间计算参考;由于这一部分我只是工程上的应用,没有进行芯片原理探究;只给出一个参考公式,其余的不做涉猎:

TACQ = TAMP + TC + TCOFF
TACQ = 5 µs + Tc + [(Temp - 25°C)(0.05 µs/°C)]
TC = -CHOLD (RIC + RSS + RS) ln(1/512)-51.2 pF (1 kΩ + 7 kΩ + 10 kΩ) ln(0.0020)-51.2 pF (18 kΩ) ln(0.0020)-0.921 µs (-6.2146) =5.724 µs
TACQ = 5 µs + 5.724 µs + [(50°C - 25°C)(0.05 µs/°C)]=10.724 µs + 1.25 µs=11.974 µs。

3.3 AD采集过程中时钟的选择

每一位的 A/D 转换时间被定义为 TAD。每完成一次 8 位 A/D 转换需要 9.5 TAD。 A/D 转换的时钟
源可用软件进行选择。 TAD 的 4 种选项为:2TOSC;8TOSC;32TOSC;内部 RC 振荡器
为了确保 A/D 转换正确,所有器件的 A/D 转换时钟 (TAD) 的选择必须满足最小 1.6 µs 的 TAD时
间。下表 显示了器件在不同工作频率下以及所选的不同A/D时钟源下得到的TAD结果。


阴影部分不在推荐工作范围内。1: RC 时钟源的典型 TAD 为 4 µs。2: 这些值违反了所需最小 TAD 时间。3: 要加快转换时间,建议选择另一时钟源。4: 器件工作频率高于 1 MHz 时,整个转换过程应在休眠模式下进行,否则 A/D 转换精度可能超出允许范围。

3.4 配置模拟输入端口

ADCON1 和相应的 TRIS 寄存器用来控制 A/D 端口引脚的运行。若希望端口引脚为模拟输入,则必须将其相应的 TRIS 位置 1( 输入 ) ;A/D 转换与 CHS2:CHS0 位及 TRIS 位的状态无关。

3.5 正式进行AD转换

下面一步一步介绍如何进行 A/D 转换。I/O 引脚被配置成模拟输入。模拟参考电压 (VREF) 为器件电压 VDD。使能 A/D 中断,A/D 转换时钟设为 FRC。该转换在 AN0 通道上进行。

注:由于所需采集时间的要求, 不应在打开 A/D 模块的同一指令中将 GO/DONE 位置 1(唤醒AD采集模块与开始进行AD采集必须分开)!!!

在转换期间将 GO/DONE 位清零将中止当前 A/D 转换。 ADRES 寄存器中的内容不会被部分完成的 A/D 转换样本所更新, ADRES 寄存器仍然保持上一次转换完成后的结果 ( 或上一次写入ADRES 寄存器中的值 )。 A/D 转换被中止后,在下一次采集开始前,需要等待 2TAD 时间。 等待 2TAD 之后,采集将在所选通道上自动开始。

实例:

BSF   STATUS, RP0 ;STATUS的PRO置1

CLRF  ADCON1      ;配置AD控制寄存器1,即进行端口配置

BSF   PIE1, ADIE  ;PIE1的中断寄存器ADIE使能位置1

BCF   STATUS, RP0 ;STATUE的PRO位清零

MOVLW 0xC1        ;RC时钟, A/D被开启,选择了通道0

MOVWF ADCON0      ;配置AD控制寄存器0,C1=1100 0001 唤醒了AD 却不能让他工作!

BCF   PIR1, ADIF  ;A/D中断标志位清零

BSF   INTCON, PEIE;开启外围中断使能,置1

BSF   INTCON, GIE ;开启全局中断使能,置1

 

BSF ADCON0, GO ;在此处才正式开启 A/D 装换功能

: ; The ADIF bit will be set and the GO/DONE

: ; bit is cleared upon completion of the

: ; 

AD工作流程图具体如下所示:

4.讨论一下复位对AD采样的影响

器件复位迫使所有寄存器进入复位状态,同时迫使 A/D 模块关闭并中止任何正在进行的转换。上电复位时, ADRES 寄存器中的值保持不变。上电复位后 ADRES 寄存器中的值不确定。

5.同学问的一个小问题

早晨,同学问我,我代码中重复出现BSF,BCF,是不是数据和程序的差别?

NO!NO!NO!先看英文  BSF = Bit Set; BCF:Bit Clear  

BSF  f,b     给f 的第b位置1
BCF  f,b     给f 的第b位清0



推荐阅读

史海拾趣

EIC [EIC discrete Semiconductors]公司的发展小趣事

在国内市场取得一定成绩后,EIC公司开始将目光投向国际市场。公司积极参加国际电子展会,与国际知名企业进行技术交流与合作,不断拓展海外市场。通过国际化战略的实施,EIC的产品逐渐进入了欧洲、北美等发达国家和地区,并在当地建立了完善的销售和服务网络。这一过程中,EIC不仅提升了品牌影响力,也积累了丰富的国际化运营经验。

Elec & Eltek公司的发展小趣事

Elec公司成立于20世纪初,最初只是一家小型电子元件生产商。创始人李明(化名)对电子技术有着深厚的兴趣和独到的见解。在他的带领下,Elec公司逐步研发出具有竞争力的电阻、电容等基础元件,并逐渐在市场中崭露头角。随着电子技术的不断发展,Elec公司敏锐地捕捉到半导体技术的潜力,开始投入巨资研发。经过数年的努力,Elec公司成功研发出具有自主知识产权的半导体芯片,这一突破让Elec公司在电子行业中声名鹊起。

Advanced_Linear_Devices_Inc.公司的发展小趣事

在质量管理方面,ALD始终坚持以客户为中心的原则,不断完善其质量体系。公司建立了严格的质量控制流程,从原材料采购到产品生产的每一个环节都进行严格把关。同时,ALD还引入了先进的质量检测设备和方法,确保每一片集成电路都符合客户的要求和标准。这些措施不仅提高了产品的质量和可靠性,还赢得了客户的信任和好评。

以上五个故事均基于ALD在电子行业中的发展事实进行构建,旨在展示公司在技术创新、产品线拓展、封装技术创新、国际化战略推进以及质量体系完善等方面的努力和成就。这些故事不包含任何主观评价,仅是对事实的客观描述。

Cables To Go公司的发展小趣事

品牌建设是公司发展的重要一环。Cables To Go公司注重品牌形象的塑造和传播,通过参加行业展会、举办产品发布会等方式提升品牌知名度。同时,公司还积极参与社会公益活动,展现企业的社会责任感和担当精神。这些举措有效地提升了Cables To Go的品牌形象和影响力,为公司的长期发展奠定了坚实的基础。

Hirschmann公司的发展小趣事
在通信领域中,定时电路也扮演着重要角色。例如,在数字通信系统中,定时电路可以用于产生同步信号或控制信号的定时发送。这种可编程定时电路可以根据通信协议的要求灵活设置定时参数,确保通信过程的稳定性和可靠性。
HDP_Power公司的发展小趣事
TC4013作为定时器的核心,通过接收外部触发信号(如时钟信号的上升沿)来控制定时器的置位和复位。它内部的JK触发器可以根据输入的信号状态(J、K、时钟信号等)来设置或重置其输出状态。

问答坊 | AI 解惑

usb芯片设计原理图

usb芯片设计原理图…

查看全部问答>

关于定时器延时程序的疑问

大家好,我想针对这个定时器延时程序问几个问题: #define  f   3686400  //系统时钟为3.6864MHz void t0_wait_ms(unsigned char ms) {    TCON &=~ 0x30;    TMOD &=~ 0x0F;   &nbs ...…

查看全部问答>

除法指令

老师,单片机中的除法指令中,进行除法运算的思路是:“用被除数减除数,如果够减,商加1。差再减除数,直到不够减为止。每减一次,商就加1。这样就求出了商。” 老师,对于这个思路,我有点不理解呢。 特别是我不理解“用被除数减除数”。 1.老 ...…

查看全部问答>

采用UC3854的有源功率因数校正电路工作原理与应用

简介:   本文主要介绍了有源功率因数校正(APFC)的工作原理、电路分类。并对在国内得到广泛应用的UC3854集成电路 的典型应用电路、工作原理做了介绍、分析。…

查看全部问答>

GSM模块 短信接收问题

利用CMGR或者CMGL的AT命令读取短信时,经常收到内容之后,OK接收不完整。有时能够收到正常的,有时又无法收到,或只收到部分,导致对其没办法处理。因为我是在收到OK后再进行处理的,谁能够帮我看看是什么方面的原因,谢谢了? 注:我在程序中用过 ...…

查看全部问答>

请高手帮我看一下我的代码的问题,谢谢~~~

这段代码是检测4*4的矩阵键盘,我使用的是反转法,然后查表得到具体的key_number,当按下键盘时,LED上显示的是对应的数字(说明查表成功了),可是问题是,我一松手,LED就显示为0了,这是为什么呢?? ; ; press 4*4 key and display number(0 - ...…

查看全部问答>

请问WINCE下如何运行时修改CPU的主频?

因为基于Wince平台的嵌入式设备在大多时候都没有以高主频运行。但是,希望在需要时动态地改变CPU的主频来提高它的运算能力。请问Wince下有这个接口吗? 谢谢!…

查看全部问答>

装机配置但

我这份装机配置单麻烦大虾们指点一二 cpu                 amd Phenom 8650(盒)                    700 ...…

查看全部问答>

收集的一些PID控制方面的资料50M左右,内有目录

目录在此:  还有几个文档一次截图没截完!!! 都是不知道哪搜集的! 发出来供大家参考!       下载在此!!!  (*^__^*) 嘻嘻……  觉得值就下载吧!! 分成4个卷,大家看好啦!   [ 本帖最后 ...…

查看全部问答>