AD0809的工作原理8931.pdf

上传人:得** 文档编号:84959867 上传时间:2023-04-08 格式:PDF 页数:20 大小:908.77KB
返回 下载 相关 举报
AD0809的工作原理8931.pdf_第1页
第1页 / 共20页
AD0809的工作原理8931.pdf_第2页
第2页 / 共20页
点击查看更多>>
资源描述

《AD0809的工作原理8931.pdf》由会员分享,可在线阅读,更多相关《AD0809的工作原理8931.pdf(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、AD0809 的工作原理 1.AD0809 的芯片说明:ADC0809 是带有 8 位 A/D 转换器、8 路多路开关以及微处理机兼容的控制逻辑的 CMOS 组件。它是逐次逼近式 A/D 转换器,可以和单片机直接接口。(1)ADC0809 的内部逻辑结构 由上图可知,ADC0809 由一个 8 路模拟开关、一个地址锁存与译码器、一个 A/D 转换器和一个三态输出锁存器组成。多路开关可选通 8 个模拟通道,允许 8 路模拟量分时输入,共用 A/D 转换器进行转换。三态输出锁器用于锁存 A/D 转换完的数字量,当 OE 端为高电平时,才可以从三态输出锁存器取走转换完的数据。(2)引脚结构 IN0I

2、N7:8 条模拟量输入通道 ADC0809 对输入模拟量要求:信号单极性,电压范围是 05V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。地址输入和控制线:4 条 ALE 为地址锁存允许输入线,高电平有效。当 ALE 线为高电平时,地址锁存与译码器将 A,B,C 三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B 和 C 为地址输入线,用于选通 IN0IN7 上的一路模拟量输入。通道选择表如下表所示。C B A 选择的通道 0 0 0 IN0 0 0 1 IN1 0 1 0 IN2 0 1 1

3、 IN3 1 0 0 IN4 1 0 1 IN5 1 1 0 IN6 1 1 1 IN7 数字量输出及控制线:11 条 ST 为转换启动信号。当 ST 上跳沿时,所有内部寄存器清零;下跳沿时,开始进行 A/D 转换;在转换期间,ST 应保持低电平。EOC 为转换结束信号。当 EOC 为高电平时,表明转换结束;否则,表明正在进行 A/D 转换。OE 为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE1,输出转换得到的数据;OE0,输出数据线呈高阻状态。D7D0 为数字量输出线。CLK 为时钟输入信号线。因 ADC0809 的内部没有时钟电路,所需时钟信号必须由外界提供,通常使

4、用频率为 500KHZ,VREF(),VREF()为参考电压输入。2 ADC0809 应用说明 (1)ADC0809 内部带有输出锁存器,可以与 AT89S51 单片机直接相连。(2)初始化时,使 ST 和 OE 信号全为低电平。(3)送要转换的哪一通道的地址到 A,B,C 端口上。(4)在 ST 端给出一个至少有 100ns 宽的正脉冲信号。(5)是否转换完毕,我们根据 EOC 信号来判断。(6)当 EOC 变为高电平时,这时给 OE 为高电平,转换的数据就输出给单片机了。3 实验任务 如下图所示,从 ADC0809 的通道 IN3 输入 05V 之间的模拟量,通过 ADC0809 转换成数

5、字量在数码管上以十进制形成显示出来。ADC0809 的 VREF 接5V 电压。4 电路原理图 5.程序设计:(1)进行 A/D 转换时,采用查询 EOC 的标志信号来检测 A/D 转换是否完毕,若完毕则把数据通过 P0 端口读入,经过数据处理之后在数码管上显示。(2)进行 A/D 转换之前,要启动转换的方法:ABC110 选择第三通道 ST0,ST1,ST0 产生启动转换的正脉冲信号.(3).关于 0809 的计算:ad0809 是根据逐位逼近的方法产生数据的。参考电压为 0-5V 的话。以 0809 八位 255 的转换精度每一位的电压值为(5-0)/255 设输入电压为 X 则:X-27

6、*=0 则 AD7=1 否则 AD7=0。X-26*=0 则 AD6=1 否则 AD6=0。X-20*=0 则 AD0=1 否则 AD0=0。(27 指 2 的 7 次方。26-20 同理)若参考电压为 0-1V (1-0)/255精度自然高了。可测量范围小了。1)汇编源程序:CH EQU 30H DPCNT EQU 31H DPBUF EQU 33H GDATA EQU 32H ST BIT OE BIT EOC BIT ORG 00H LJMP START ORG 0BH LJMP T0X ORG 30H START:MOV CH,#0BCH MOV DPCNT,#00H MOV R1,#

7、DPCNT MOV R7,#5 MOV A,#10 MOV R0,#DPBUF LOP:MOV R0,A INC R0 DJNZ R7,LOP MOV R0,#00H INC R0 MOV R0,#00H INC R0 MOV R0,#00H MOV TMOD,#01H MOV TH0,#(65536-4000)/256 MOV TL0,#(65536-4000)MOD 256 SETB TR0 SETB ET0 SETB EA WT:CLR ST SETB ST CLR ST WAIT:JNB EOC,WAIT SETB OE MOV GDATA,P0 CLR OE MOV A,GDATA

8、MOV B,#100 DIV AB MOV 33H,A MOV A,B MOV B,#10 DIV AB MOV 34H,A MOV 35H,B SJMP WT T0X:NOP MOV TH0,#(65536-4000)/256 MOV TL0,#(65536-4000)MOD 256 MOV DPTR,#DPCD MOV A,DPCNT ADD A,#DPBUF MOV R0,A MOV A,R0 MOVC A,A+DPTR MOV P1,A MOV DPTR,#DPBT MOV A,DPCNT MOVC A,A+DPTR MOV P2,A INC DPCNT MOV A,DPCNT CJN

9、E A,#8,NEXT MOV DPCNT,#00H NEXT:RETI DPCD:DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,6FH,00H DPBT:DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,07FH END 2)C 语言源程序#include unsigned char code dispbitcode=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;unsigned char code dispcode=0 x3f,0 x06,0 x5b,0 x4f,0 x6

10、6,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x00;unsigned char dispbuf8=10,10,10,10,10,0,0,0;unsigned char dispcount;sbit ST=P30;sbit OE=P31;sbit EOC=P32;unsigned char channel=0 xbc;/IN3 unsigned char getdata;void main(void)TMOD=0 x01;TH0=(65536-4000)/256;TL0=(65536-4000)%256;TR0=1;ET0=1;EA=1;P3=channel;while(

11、1)ST=0;ST=1;ST=0;while(EOC=0);OE=1;getdata=P0;OE=0;dispbuf2=getdata/100;getdata=getdata%10;dispbuf1=getdata/10;dispbuf0=getdata%10;void t0(void)interrupt 1 using 0 TH0=(65536-4000)/256;TL0=(65536-4000)%256;P1=dispcodedispbufdispcount;P2=dispbitcodedispcount;dispcount+;if(dispcount=8)dispcount=0;3)FP

12、GA 实现的程序:(verilog)module AD0809(clk,/脉宽(至少 100ns)rst_n,EOC,/约 100us 后 EOC 变为高电平转换结束 START,/启动信号,上升沿有效(至少 100ns)OE,/高电平打开三态缓冲器输出转换数据 ALE,/高电平有效,选择信道口 ADDA,/因为 ADDB,ADDC 都接地了,这里只有 ADDA 为变量 DATA,/转换数据 DATA_R);output START,OE,ALE,ADDA;input EOC,clk,rst_n;input7:0 DATA;output7:0 DATA_R;reg START,OE,ALE,A

13、DDA;reg7:0 DATA_R;reg4:0 CS,NS;parameter IDLE=5b00001,START_H=5b00010,START_L=5b00100,CHECK_END=5b01000,GET_DATA=5b10000;always(*)case(CS)IDLE:NS=START_H;START_H:NS=START_L;START_L:NS=CHECK_END;CHECK_END:if(EOC)NS=GET_DATA;else NS=CHECK_END;GET_DATA:NS=IDLE;default:NS=IDLE;endcase always(posedge clk

14、)if(!rst_n)CS=IDLE;else CS=NS;always(posedge clk)case(NS)IDLE:begin OE=0;START=0;ALE=0;ADDA=1;end START_H:begin OE=0;START=1;/产生启动信号 ALE=1;ADDA=1;/选择信道口 IN0 end START_L:begin OE=0;START=0;ALE=1;/启动信号脉宽要足够长,在启动的时候 ALE 要一直有效 end CHECK_END:begin OE=0;START=0;ALE=0;end GET_DATA:begin OE=1;/高电平打开三态缓冲器输出转

15、换数据 DATA_R=DATA;/提取转换数据 START=0;ALE=0;end default:begin OE=0;START=0;ALE=0;ADDA=0;end endcase endmodule 4)FPGA 实现的程序:(VHDL)LIBRARY IEEE;USE USE ENTITY AD0809 IS PORT(D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);CLK,EOC:IN STD_LOGIC;CLOCK:IN STD_LOGIC;ALE,START,OE,LOCK0:OUT STD_LOGIC;DOUT:OUT STD_LOGIC_VECTOR(6

16、 DOWNTO 0);SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END AD0809;ARCHITECTURE behav OF AD0809 IS TYPE states IS(st0,st1,st2,st3,st4);SIGNAL current_state,next_state:states:=st0;SIGNAL REGL:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL LOCK:STD_LOGIC;SIGNAL CNT1:STD_LOGIC_VECTOR(0 DOWNTO 0);SIGNAL A:INTEGER RANGE 0

17、TO 1;SIGNAL LOWDATA:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL HIGHDATA:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL LOWLED7S:STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL HIGHLED7S:STD_LOGIC_VECTOR(6 DOWNTO 0);BEGIN LOCK0=LOCK;PROCESS(REGL)BEGIN LOWDATA=REGL(3 DOWNTO 0);HIGHDATA LOWLED7S LOWLED7S LOWLED7S LOWLED7S LOWLED7S

18、LOWLED7S LOWLED7S LOWLED7S LOWLED7S LOWLED7S LOWLED7S LOWLED7S LOWLED7S LOWLED7S LOWLED7S LOWLED7S Null;END CASE;CASE HIGHDATA IS WHEN 0000=HIGHLED7S HIGHLED7S HIGHLED7S HIGHLED7S HIGHLED7S HIGHLED7S HIGHLED7S HIGHLED7S HIGHLED7S HIGHLED7S HIGHLED7S HIGHLED7S HIGHLED7S HIGHLED7S HIGHLED7S HIGHLED7S

19、Null;END CASE;END PROCESS;PROCESS(CLOCK)BEGIN IF CLOCKEVENT AND CLOCK=1 THEN CNT1SEL=111;ASEL=110;ANULL;END CASE;END PROCESS;PROCESS(A)BEGIN CASE A IS WHEN 0=DOUTDOUTNULL;END CASE;END PROCESS;COM:PROCESS(current_state,EOC)BEGIN CASE current_state IS WHEN st0=ALE=0;START=0;LOCK=1;OE=0;next_stateALE=1

20、;START=0;LOCK=1;OE=0;next_stateALE=0;START=1;LOCK=0;OE=0;IF(EOC=1)THEN next_state=st3;ELSE next_stateALE=0;START=0;LOCK=0;OE=1;next_stateALE=0;START=0;LOCK=1;OE=1;next_statenext_state=st0;END CASE;END PROCESS COM;REG:PROCESS(CLK)BEGIN IF(CLKEVENT AND CLK=1)THEN current_state=next_state;END IF;END PROCESS REG;LATCH1:PROCESS(LOCK)BEGIN IF LOCK=1 AND LOCKEVENT THEN REGL=D;END IF;END PROCESS LATCH1;END behav;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁