PIC单片机进行AD转换的设计

2020-08-02来源: elecfans关键字:pic单片机  ad转换  模拟量

AD转换

我们先看看R1和R2,R2是个可调电阻如果我们将R2变大RA1这个管脚上的电压就越大。R2变小RA1这个管脚上的电压就越小。那单片机是怎么知道电压变化的。这就需要AD转换。就是将模拟量转换成数字量。

PIC单片机进行AD转换的设计

PIC单片机如何表示电压

PIC用十位二进制位的数来表示电压,也就是数值0~1023来表示电压。那比如现在这个数值是400那这代表多少的电压?这就要根据参考电压来确定了。


比如我们设置正参考电压为3.3V ,当输入的电压为0时,数值就为0。当输入的电压为3.3V时,数值就是1023. 那如果输入的电压是1.2V代表多少电压。


首先,先算出一个数值代表多少的电压 3.3V除以1023 约等于 0.003V 。


然后,1.2V除以0.003V 等于400. 这就得出了400代表的是1.2V。


见下图我们可以看AN0~AN7.这些都是可以配置成模拟输入的端口。只有这些引脚才能做为AD转换的端口。

PIC单片机进行AD转换的设计

实例讲解:

例如: 我们看第一张的原理图,从RA0/AN0脚输入个模拟量如果电压大于1.2v则LED亮否则LED灭。


AD的设置步骤:

1,设置端口

将RA0口设置为输入TRISA = 0x01;

将RA0口设置为模拟ANSELA = 0x01;


2, 配置ADC模块

选择ADC的转换时钟。

如何选择转换时钟呢 要根据现在的时钟频率进行选择。可以根据数据手册中的表格进行选择 。


我们设置单片机的时钟频率为32MHZ ,选择ADC周期关键不要选择阴影部分,在32MHz 这一列 我们随意选择了ADC时钟周期1us,对应的时钟源为Fosc/32.,AD控制寄存器1 ADCON1的ADCS《2:0》=010注:ADCS《2:0》代表的意思就是 ADCS的0到2位

PIC单片机进行AD转换的设计

配置参考电压

我们这里把正参考电压配置为电源压。AD控制寄存器1ADCON1的ADPREF《1:0》=00;


配置左/右对齐

AD转换后数值是十位的二进制,我们用单片机却只是八位的,所以PIC单片机,用两个八位的寄存器来存放AD值,ADRESH用来存放高位结果,ADRESL用来存放低位结果。可是ADRESH和ADRESL加起来是十六啊。那这十位的数值是怎么放在里面的。这就靠左右对齐来设置,

如果是右对齐 低8八位放在ADRESL,剩下的2位放在ADRESH中。


如果是左对齐 高8八位放在ADRESH,剩下的2位放在ADRESL中。见下图

PIC单片机进行AD转换的设计

我们这里选择右对齐,所以AD控制寄存器1ADCON1的ADFM=1

PIC单片机进行AD转换的设计

上面将有关ADCON1寄存器的配置说完了。下面来讲解ADCON0


选择ADC输入通道

AD转换模块只有一个,而AD输入通道有8个AN0~AN7.所以不可能同时进行AD转换,那个需要用我们就分配给那个,根据硬件我们将AD转换模块分配给AN0.


所以 ADCON0 的CHS《4:0》=0000;


开启ADC模块

ADC模块开启,ADCON0的ADON=1,只是单纯的启用ADC模块。并不开始AD转换。如果不用ADC模块时候建议关闭。可以省点电哦!!!

PIC单片机进行AD转换的设计

3 开始AD转换

ADCON0的GO/DONE=1开启AD转换。


4 等待AD转换结束


5 读取结果

一般情况下我们并不取一次的AD转换的值。而是取多次之后算平均值。这样来确保转换的准确性。配置ADC模块,有许多地方并没有讲解为什么这么配置,因为许多配置其实是比较随意的。并不是那么的绝对的。一定非要选择哪一个。当然实际的配置还是要根据你项目需求。


//开发环境MPLAB X IDE ,单片机PIC16LF1823.

#include

__CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&MCLRE_OFF&CP_ON&CPD_OFF&BOREN_ON

&CLKOUTEN_OFF&IESO_ON&FCMEN_ON);//这个要放到上一行去

__CONFIG(PLLEN_OFF&LVP_OFF) ;

#define ADC_NUM 8 //转换的次数

#define LED LATA1

void init_GPIO(void)

{

TRISA = 0x01;//端口设置为输入

ANSELA = 0x01;//设置为模拟输入

PORTA = 0x00;

LATA = 0x00;

}

void init_fosc(void)

{

OSCCON = 0xF0;//32MHZ

}

void init_AD(void)

{

ADCON1= 0xA0;//右对齐,AD时钟为Fosc/32,参考电压为电源电压,

ADCON0= 0x00;//选择通道AN0

ADCON0bits.ADON = 1;//开启模块

}

unsigned int ADC_BAT_ONE(void)//转换一次

{

unsigned int value;

value=0;

ADCON0bits.CHS =0;//选择通道AN0

ADCON0bits.ADGO=1;//开始转换

while(ADCON0bits.GO==1);//等待转换结束

value=(unsigned int)ADRESH;//强制类型转换,因为ADRESH是字符型的只能表示8位二进制。所以必须转换成可以容纳10位二进制的整型。

value= value《《8;// 将高两位左移8位

value += ADRESL;//低八位加入ADRESL的值。

return value;

}

unsigned int ADC_BAT_contiue(void)

{

unsigned int ADV_MCU[ADC_NUM],ADV_CNT,ADV_ALL;

ADV_ALL=0;

for(ADV_CNT=0;ADV_CNT {

ADV_MCU[ADV_CNT]=ADC_BAT_ONE();

}

for(ADV_CNT=0;ADV_CNT {

ADV_ALL += ADV_MCU[ADV_CNT];

}

ADV_ALL= ADV_ALL/ADC_NUM;

return ADV_ALL;//得到结果返回

}

/*

*

*/

int main(int argc, char** argv) {

init_fosc();//设置时钟

init_GPIO();//设置I/O口

init_AD();//设置AD

while(1)

{

if( ADC_BAT_conTIue()》400)//判断输入电压是否大于1.2V

{

LED=1;//灯亮

}

else

{

LED=0;//灯灭

}

}

}


关键字:pic单片机  ad转换  模拟量 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic504991.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于PIC单片机的数据采集系统设计
下一篇:PIC单片机的振荡器应该如何配置

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

PIC单片机的多路AD切换程序设计
pic单片机是最重要的单片机种类之一,对于pic单片机,小编曾带来诸多介绍,如pic单片机的优势、pic单片机选型等。而在本文中,小编将为大家介绍两种pic单片机程序:一是pic单片机多路ad切换程序,二是pic单片机循环程序。一、pic单片机简介pic单片机(Peripheral Interface Controller)是一种用来开发和控制外围设备的集成电路(IC)。一种具有分散作用(多任务)功能的CPU。与人类相比,大脑就是CPU,PIC 共享的部分相当于人的神经系统。PIC 单片机是一个小的计算机。PIC单片机有计算功能和记忆内存像CPU并由软件控制运行。然而,处理能力—般,存储器容量也很有限,这取决于PIC的类型
发表于 2020-08-02
<font color='red'>PIC单片机</font>的多路AD切换程序设计
PIC单片机的振荡器应该如何配置
  PIC系列单片机可工作于不同的振荡器方式。用户可以根据其系统设计的需要,选择下述四种振荡方式中的一种,其振荡的频率范围在DC~20/25MHz之间。  用户可以根据不同的应用场合,从表1所示的四种振荡方式中选择一种(使用PIC编程器时也需作这种选择的操作),以获得最佳的性能价格比。其中,LP振荡器方式可以降低系统功耗,RC振荡器方式可节省成本。  建立PIC源程序时,其振荡器方式由配置寄存器CONFIG的D1位和D0位来决定,如表2所示。  1内部晶体振荡器/陶瓷振荡器  在LP、XT和HS这三种方式下,需要在微控制器引脚OSC1/CLKIN和OSC2/CLKOUT的两端接一石英晶体或陶瓷谐振器。如图1中,只 有在HS方式下
发表于 2020-08-02
<font color='red'>PIC单片机</font>的振荡器应该如何配置
基于PIC单片机的数据采集系统设计
封装成一个类,修改某个类的实现,增加类的功能不会影响整个程序的框架,这样就很容易维护和扩展功能;加之我们要实现的软件功能中需要调用大量的windows API函数库,所以采用VC++6.0作为上位机的开发环境。程序功能模块划分总的功能模块主要包括三个模块,即HID设备读写模块,数据采集模块,数据处理模块。HID设备的查找与读写(1)枚举USB主机在检测到USB设备插入后,就要对设备进行枚举了。枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。(2)HID人机接口设备(HID)是指直接和人进行互动的设备,如鼠标、键盘等。 在Windows 中,具有相似属性和提供相似服务
发表于 2020-08-02
基于<font color='red'>PIC单片机</font>的数据采集系统设计
PIC单片机对机器人的控制程序设计
,实现两支手臂的动作。上面程序描写左手是否到达鼓掌位,到达停止,右手是否到达举手位,到达停止。看动作标志位是否为零,不是,不断地循环检测;是,执行下面的程序。2 、GOTO,CALL指令的不同使用在PIC的汇编程序中,CALL与GOT0指冷使用的场合不同。一般情况下,在于程序与主程序之间大多用CALL指令;而状态转换模块之间大多用GOTO 指令,即由此状态进入另一种状态不需返回。由于PIC单片机的堆栈有限,在程序中,不能无止境地使用GOTO语句,这样会使堆栈溢出,程序无法正常运行。各个小程序内部循环占用堆栈的级数不多,使用GOTO指令是可行的,但在大的程序中用GOTO则无法返回到调用前程序的下一条指令。CALL指令完成调用完子程序后
发表于 2020-07-30
<font color='red'>PIC单片机</font>对机器人的控制程序设计
PIC单片机键盘系统的设计方案解析
发光二极管、荧光管及其他显示器提供按扫描方式工作的显示接口,而且为显示器提供多路复用信号,可以显示多达16位的字符或数字。键盘中有无按键按下是由列线送入全扫描字、行线读入行线状态来判断的,其方法是将列线的所有I/O线均置成低电平,然后将行线电平状态读入累加器A中,如果有键按下,总会有一根行线被拉至低电平,从而使行输入不全为1。键盘中哪一个键按下可由列线逐列置低电平后,检查行输入状态来判断,其方法是依次给列线送低电平,然后检查所有行线状态,如果全为1,则所按下的键不在此列,如果不全为1,则所按下的键必在此列,而且是在与0电平线相交的交点上的那个键。(2)单片机键盘扫描法pic单片机键盘系统的设计方案扫描法是在判定有键按下后逐列果行
发表于 2020-07-30
<font color='red'>PIC单片机</font>键盘系统的设计方案解析
Proteus仿真ARM7 LPC2101 AD转换器源程序
调试时首先观察待测电阻是否工作正常。在电阻的变化端插入电压探针,具体方式在左边工具探针中选取电压探针(Voltage)运行仿真,点击电阻,观察探针电压是否在不断变化。调试流程绘制 ADC 接口电路1.在器件库中找到 ADC 转换芯片(ADC0801),如图连接 ADC0801 和总线信号。其中 ADC0801数据线连接数据总线最低字节(D0-D7),读写信号接总线读写信号(NRD,NWR)。其他信号请按照下图进行连接。2.片选信号 AD_CS 接译码电路输出(采用部分译码,对应地址为 0x03XXXXXX)。3.连接模拟输入,在器件库找到可变电阻(POT-HG)。完成 ADC0801 工作流程编程现在我们需要用程序控制 ADC
发表于 2020-07-12
Proteus仿真ARM7 LPC2101 <font color='red'>AD转换</font>器源程序
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved