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 ;开启全局中断使能,置1BSF 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

参考:PIC英文技术手册

PIC单片机入门_8位AD转换器相关推荐

  1. 100Ω-500KΩ电位器电阻转rs485 12位AD转换器 电子尺

    在计算机广泛应用的今日,数据收集的重要性是非常显著的.它是计算机与外部物理世界连接的桥梁.各种类型信号收集的难易程度不同很大.实际收集时,噪声也可能带来一些费事.数据收集时,有一些基本原理要注意,还有 ...

  2. PIC单片机入门教程(二)—— 安装集成开发环境(MPLAB X IDE)

    PIC单片机入门教程(二)-- 安装集成开发环境(MPLAB X IDE) 教程中使用的电脑运行Windows 10 专业版 64位系统 1.下载 MPLAB X IDE v4.05 历史版本:htt ...

  3. c语言编程TLC2543AD采集,51单片机驱动12位AD转换TLC2543电路图+程序

    51单片机驱动12位AD转换TLC2543电路图+程序 2015-06-18 16:51:15   来源:51hei void resultvolt() { volt=volt*5000.0/4334 ...

  4. 利用10位AD转换器 及 LED 数码管,实现由AD转换器采集温度,并用数码管显示。温度超出一定范围,LED 指示灯闪烁报警。(主要分析进制16进制转换10进制,并用数码管显示问题)

    ** 题目: ** 利用原有的电路 AD 及 LED 数码管显示等例子,进行整合.实现由 AD转换器采集温度(用可调电阻模拟),温度在数码管上显示.当温度超出一定范围,用 LED 指示灯进行闪烁报警. ...

  5. PIC单片机入门笔记(新手学PIC必看)——基于PIC16F886

    学习PIC单片机的目的是打算做一款433M无线开关,之前学习过51与AVR单片机,对8位单片机有一些基础,不过PIC单片机还是第一次接触,先从入门开始吧!入门实验最经典的是点亮一只LED了,这次也它为 ...

  6. PIC单片机入门_中断系统详解

    1.中断的基本概念 当单片机正在执行程序时,出现了某些特殊状况,例如定时时间到.有键盘信号输入等,此时CPU须要暂时停止当前的程序,而转去执行处理这些事件的程序,待执行完这些特定的程序之后,再返回到原 ...

  7. PIC单片机入门_输入输出端口详解

    1.引言: PIC单片机引脚图: 在PIC16F87X 单片机中,28引脚型号的单片机有3 个I/O端口,分别是RA.RB和RC:40引脚型号单片机有5个 I/O端口,分别是RA.RB.RC.RD和R ...

  8. PIC单片机入门_指令系统

    1.前文回顾 前面学习了PIC单片机的系统框架,也介绍了程序存储器.数据存储器的组织形式.这里需要补充一点的就是寻址方式,之前仅仅提到了立即数寻址.直接寻址.其实还有几个比较重要的寻址方式,PC相对寻 ...

  9. PIC单片机入门_框架与存储器

    1.PIC16F877A单片机框架 1.1 为何性能如此之高? PIC单片机之所以有很高的性能是因为其具备如下特性: 内部为哈佛结构.寄存器文档.大多数单指令周期.指令流水线操作.长字型指令.指令数很 ...

最新文章

  1. 别再@微信官方 了,我给你一面小国旗!
  2. 【项目实战课】基于Pytorch的StyleGAN人脸属性(表情、年龄、性别)编辑实战
  3. LeetCode 204. Count Primes
  4. dede定义全局变量(include/common.inc.php)及调用方式
  5. Ubuntu文本编辑器适合linux平台的其它版本
  6. 【Kafka】kafka AdminClient 闲时关闭连接
  7. Vue.js经典开源项目汇总
  8. js做小数运算精度问题
  9. mysql php sdk_PHP连接MySQL数据库
  10. 百度Apollo计划跟踪:Apollo 3.0前言
  11. QQ空间删除的照片怎么找回,你知道回收站吗?
  12. wordpress简约淘客主题风格附详细实例教程源码
  13. MATLAB函数——fir1
  14. Android开发之麦田福音网移动版本演示程序
  15. Excel高级使用技巧
  16. 坚持并活下去!cxuan 在 CSDN 的 2020 年终总结。
  17. 【Matlab】牛顿迭代法实现
  18. ads1258_ADS1258:高精度多通道模/数转换芯片
  19. ERROR: Exception: Traceback
  20. np.arange与np.linspace细微区别(数据溢出问题)

热门文章

  1. Java基础01 从HelloWorld到面向对象
  2. Java线程中的资源共享问题
  3. ASP.NET GridView嵌套DataList实例
  4. nyoj 1261 音痴又音痴的LT(离散化+树状数组求K小数)
  5. hdu 5542(树状数组优化dp)
  6. Netty(一) SpringBoot 整合长连接心跳机制
  7. 20180525小测
  8. bzoj4551: [Tjoi2016Heoi2016]树(树链剖分)
  9. 浅谈python异步IO,同步IO,线程与进程~
  10. LVS-NAT搭建HTTP及HTTPS