学习AVR笔记二十二基于ADC0804的模数转换实验.docx
- 文档编号:28733001
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:12
- 大小:92.20KB
学习AVR笔记二十二基于ADC0804的模数转换实验.docx
《学习AVR笔记二十二基于ADC0804的模数转换实验.docx》由会员分享,可在线阅读,更多相关《学习AVR笔记二十二基于ADC0804的模数转换实验.docx(12页珍藏版)》请在冰豆网上搜索。
学习AVR笔记二十二基于ADC0804的模数转换实验
AVR学习笔记二十二、基于ADC0804的模数转换实验
--基于ATmega64
重要说明:
从AVR学习笔记二十二开始,单片机型号改为
ATmega64,晶体频率为16MHz
22.1实例功能
本实例利用模数转换芯片ADC0804实现模拟电压的采集,并通过串口将采集到的电压值发送到计算机,在计算机上通过串口助手查看电压值。
22.2器件和原理
22.2.1模数转换器简单介绍
模数转换器即A/D转换器,或简称ADC(AnalogDigitalConverter),它是一种将输入模拟量转变为输出数字量的器件,是连接模拟和数字的桥梁。
通常是指一个将模拟
信号转变为数字信号的电子元件。
通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号。
由于数字信号本身不具有实际意义,仅仅表示一个相对大小。
故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。
而输出的数字量则表示输入信号相对于参考信号的大小。
模数转换器最重要的参数是转换的精度,通常用输出的数字信号的位数的多少表示。
转换器能够准确输出的数字信号的位数越多,表示转换器能够分辨输入信号的能力越强,转换器的性能也就越好。
A/D转换一般要经过采样、保持、量化及编码4个过程。
在实际电路中,有些过
程是合并进行的,如采样和保持,量化和编码在转换过程中是同时实现的。
22.2.2模数转换器的分类
A/D转换器的种类很多,并且有多种分类方法,下面做简单介绍:
1)从原理上通常可分为以下4种:
计数式A/D转换器、双积分式A/D转换器、逐次逼近式A/D转换器和并行A/D转换器。
计数式A/D转换器结构很简单,转换速度很慢,现在很少采用。
双积分式A/D转换器抗干扰能力强,转换精度高,但转换速度不够快,一般用于数字式测量仪表中。
逐次逼近式A/D转换器结构不太复杂,转换速度很高,一般应用于微机接口电路中。
并行A/D转换器的转换速度最快,但结构复杂,成本高,一般只应用于那些转换速度极高的场合。
2)从输出代码的有效位数可分为8位,10位,12位,14位,16位,24位及BCD
111
码输出的3丄位,4丄位,5丄位等多种不同的位数。
222
3)从数据输出的接口类型可分为并行接口型和串行接口型
2223ADC0804的结构和工作原理
ADC0804是一种比较常用的、中速廉价型单通道、8位逐次比较型A/D转换器。
它与
单片机的接口为并行接口方式。
ADC0804引脚图如下:
理匚
20
1Vuc(J^Viv)
丽匚
2
19
二1CLKR
3
18
二
CLJU匸
4
ADC
17
二DE)i
^KtiC匚
5
08Q4
16
二]PEJ?
由匚
15
二]DIh
v5?
匸
/
二11欣
U'.MI匚
1
二1DBJ
12
二]嚓
匚
W+-tADCQaOH的引脚隔
引脚功能及应用特性如下:
CS、RD、WR(引脚1、2、3):
是数字控制输入端,满足标准TTL逻辑电平。
其中CS和WR用来控制A/D转换的启动信号。
CS、RD用来读A/D转换的结果,当它们同时为低电平时,输出数据锁存器DB0~DB7各端上出现8位并行二进制数码。
CLKI(引脚4)和CLKR(引脚19):
ADC0801~0805片内有时钟
电路,只要在外部“CLKI”和“CLKR两端外接一对电阻电容即可产生A/D转换所要求的时钟,其振荡频率为fCLK"1/1.1RC。
其典型应用参数为:
R=10©,C=150PF,fCLK~640KHZ,转换速度为100卩s。
若采用外部时钟,则外部fCLK可从CLKI端送入,此时不接R、C。
允许的时钟频率范围为100KHZ〜1460KHZ。
INTR(引脚5):
INTR是转换结束信号输出端,输出跳转为低电平表示本次转换已经完成,可作为微处理器的中断或查询信号。
如果将CS和WR
端与INTR端相连,则ADC0804就处于自动循环转换状态。
CS=0时,允许进行A/D转换。
WR由低跳高时A/D转换开始,8位逐次比较需8X8=64个时钟周期,再加上控制逻辑操作,一次转换需要66〜
73个时钟周期。
在典型应用fCLK=640KHZ时,转换时间约为103ys〜114卩s。
当fCLK超过640KHZ,转换精度下降,超过极限值1460KHZ时便不能正常工作。
VIN(+)(引脚)和VIN(—)(引脚7):
被转换的电压信号从VIN(+)和VIN(—)输入,允许此信号是差动的或不共地的电压信号。
如果
输入电压VIN的变化范围从0V到Vmax,则芯片的VIN(—)端接地,输入电压加到VIN(+)引脚。
由于该芯片允许差动输入,在共模输入电压允许的情况下,输入电压范围可以从非零伏开始,即Vmin至Vmas。
此时芯片的
VIN(—)端应该接入等于Vmin的恒值电码坟上,而输入电压VIN仍然加到VIN(+)引脚上。
AGND(引脚8)和DGND(引脚10):
A/D转换器一般都有这两个引脚。
模拟地AGND和数字地DGND分别设置引入端,使数字电路的地电流不影响模拟信号回路,以防止寄生耦合造成的干扰。
VREF/2(引脚9):
参考电压VREF/2可以由外部电路供给,从“VREF/2”端直接送入,VREF/2端电压值应是输入电压范围的二分之一。
所以输入电压的范围可以通过调整VREF/2引脚处的电压加以改变,转换器的零点无需调整。
例如输入电压范围是0.5-3.5V,在VREF/2端应加1.5V电压。
如果参考电压由片内提供,则VREF/2端悬空即可。
ADC0804转换器的工作时序如图4-8所示。
AD转换器的设计接口电路图
图4-5AD转换器的申仍
图中,ADC0804数据输出线与AT89C51的数据总线直接相连,AT89C51的RD、WR和INT1直接连到ADC0804,由于用P1.0线来产生片选信号,故无需外加地址译码器。
当AT89C51向ADC0804发WR(启动转换)、RD(读取结果)信号时,只要虚拟一个系统不占用的数据存储器地址即可。
22.3电路和连接
1)模数转换器的连接
本实例采用ATmega16单片机控制模数转换器ADC0804实现外部模拟电压信号的采集。
具体电路连接为:
单片机的PB口的8位(PB0-PB7)连接ADC0804的8个数据输岀端口DB0-DB7,
单片机的PD5,PD6,PD7分另I」连接ADC0804的CS,WR,RD3个控制端口。
电源电压为+5V,由于ADC0804片内含有参考电压源和时钟发生器,所以ADC0804的VRE
F/2端口悬空,时钟引脚的连接如上面图中所示(由于手头没有150pF电容,所以以104瓷片电容代替,这样做会增加转换时间,但对于学习来说并无大碍)。
由于只是实验,所以芯片的模拟地和电压地直接连在一起,实际应用是最好分开,比较
好的方法是在这两个引脚之间连接一个0欧姆的电阻。
外部模拟电压的输入采用常用的电位器方法,电位器的两个固定端分别连接电源正极和
负极,滑动电阻端连接ADC0804的VIN+,VIN-接地。
2)RS232电路,串口通讯电路前面已经介绍了,在此不做说明。
8.4程序设计
1、程序功能
程序的功能是使用单片机控制模数转换芯片ADC0804采集外部电压,然后将采集到的
电压值通过串口发送到计算机。
2函数说明
本程序多个功能函数,分别是:
•端口初始化函数,设置各端口的初始工作状态。
voidPort_Init(void);//端口初始化配置
•串口通信相关函数:
voidUsart_Init(void);//USART寄存器设置
voidUsart_PutChar(unsignedcharcTXData);//字节发送函数
voidUsart_PutString(unsignedchar*pcString);
•ADC0804操作相关函数:
voidAD_start(void);//AD转换开始
unsignedcharAD_GetData(void);//读取AD值
3、使用WINAVR开发环境,使用的是外部12M的晶振,所以需要将makefile文件中的时钟频率修改为12M。
另外在程序烧录到单片机的时候,熔丝位也要选择为外部12M晶振(注意是晶振,不是外部振荡器,一定不要选择错了,否则会导致单片机不能再烧写程序)。
4、程序代码
/***************************************************AVRADC0804模数转换范例****MCU:
ATmega64***
****作者:
maweili***
****编译器:
WINAVR***
重要说明:
从AVR学习笔记二十二开始,单片机型号改为ATmega64
,晶体频率为16MHz
2009.7.30
*********************************************
#include
#include
#include
中断函数头文件
//常量声明
#defineBAUD9600//
波特率设置值
//全局变量声明
unsignedintADData;//AD
转换获得的数据
//端口声明
#definecsPD5
#definewrPD6
#definerdPD7
//端口操作
#definecs_set(PORTD|=(1< #definecs_clr(PORTD&=~(1< #definerd_set(PORTD|=(1< #definerd_clr(PORTD&=~(1< #definewr_set(PORTD|=(1< #definewr_clr(PORTD&=~(1< //函数声明 字节发送函数 voidPort_Init(void);//端口初始化配置voidUsart_Init(void);//USART寄存器设置voidUsart_PutChar(unsignedcharcTXData);//voidUsart_PutString(unsignedchar*pcString); voidAD_start(void);//AD转换开始 unsignedcharAD_GetData(void);//读取AD值 intmain(void) { unsignedcharDelay3s; Port_Init(); Usart_Init(); Usart_PutString("ADC0804模数转换测试程序"); Usart_PutString("测得通道的电压值为: "); Usart_PutChar(ADData/1000+0x30);// Usart_PutChar('.');// Usart_PutChar(ADData%1000/100+0x30);//Usart_PutChar(ADData%100/10+0x30);// Usart_PutChar(ADData%10+0x30);// sei();//使能全局中断 while (1) AD_start(); //ADData=AD_GetData(); ADData=(int)((long)AD_GetData()*4670/256); //将获得的AD直转换为 电压值 // 单位为mv。 得到电压值的千位并发送 发送小数点 得到电压值的百位并发送 得到电压值的十位并发送 得到电压值的个位并发送 Usart_PutChar('V');// 发送电压符号“V” Usart_PutChar(0x0d);// Usart_PutChar(0x0a);//AD值发送结束,回车换行 for(Delay3s=0;Delay3s<200;Delay3s++)//延时3S{ _delay_ms(5); _delay_ms(5);} } } //端口状态初始化设置函数 voidPort_Init() { PORTB=0xff; DDRB=0x00;//数据采集端口,置为输入口 PORTD=0xe0; DDRD=0xe0;//ADC0804控制端口,设为输出口 cs_clr; } //USARTO寄存器配置函数 voidUsart_Init() { UCSR1A=0X00; UCSR1C|=(1< UBRR1L=(F_CPU/BAUD/16-1)%256;//波特率设置 UBRR1H=(F_CPU/BAUD/16-1)/256; UCSR1B|=(1< //字节发送函数 //接收中断函数 ISR(USART1_RX_vect){ unsignedcharRev; 从USARTI/O数据寄存器-UDF中读岀数据 将接收到的数据发送 Rev=UDR1;// Usart_PutChar(Rev);//} voidUsart_PutString(unsignedchar*pcString){ while(*pcString) { Usart_PutChar(*pcString++); } Usart_PutChar(0x0D); Usart_PutChar(0x0A);//结尾发送回车换行} //AD转换开始 voidAD_start(void){ unsignedchartemp; wr_set; _delay_ms (1); wr_clr; _delay_ms(3); wr_set; for(temp=0;temp<100;temp++) { _delay_ms(3); }} //读取AD值 unsignedcharAD_GetData(void) unsignedchardata=0; rd_set; _delay_ms (1);rd_clr; _delay_ms (1);data=PINB; _delay_ms(3);rd_set; _delay_ms(3); returndata;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学习 AVR 笔记 十二 基于 ADC0804 转换 实验