PIC单片机入门_8位AD转换器

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 模块结构框图如图 所示:
PIC单片机入门_8位AD转换器_第1张图片

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 振荡器的时钟 )
PIC单片机入门_8位AD转换器_第2张图片
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转换时钟选择位
PIC单片机入门_8位AD转换器_第3张图片
bit 3:0 PCFG2:PCFG0:A/D 端口配置控制位;其端口配置效果图如下所示:
PIC单片机入门_8位AD转换器_第4张图片
注 : 当 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 转换时序如下:
PIC单片机入门_8位AD转换器_第5张图片

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结果。
PIC单片机入门_8位AD转换器_第6张图片
阴影部分不在推荐工作范围内。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工作流程图具体如下所示:
PIC单片机入门_8位AD转换器_第7张图片

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硬件编程技术详解)