首页 ADC0804实验

ADC0804实验

举报
开通vip

ADC0804实验ADC0804实验 实 验 报 告 实验名称: [ADC0804实验] 姓 名: 学 号: 指导教师: 实验时间: [2013年6月15日] 信息与通信工程学院 ADC0804实验 1.实验任务 AD0804 是 A/D 转换器。从ADC0804的通道IN输入0~5V之间的模拟量,转换成数字量在数码管上以十进制显示出来。 任务 1:将数码管中的显示数字对应单位“V”的位置加上小数点,使原来以“mV” 为单位的输出转变为以“V”为单位。 任务2:在任务1的基础上,将AD0804的8位2进制输出...

ADC0804实验
ADC0804实验 实 验 报 告 实验名称: [ADC0804实验] 姓 名: 学 号: 指导教师: 实验时间: [2013年6月15日] 信息与通信工程学院 ADC0804实验 1.实验任务 AD0804 是 A/D 转换器。从ADC0804的通道IN输入0~5V之间的模拟量,转换成数字量在数码管上以十进制显示出来。 任务 1:将数码管中的显示数字对应单位“V”的位置加上小数点,使原来以“mV” 为单位的输出转变为以“V”为单位。 任务2:在任务1的基础上,将AD0804的8位2进制输出用点阵中的一列反映 出来,点阵的亮暗代 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 该位为1或者0。 2.实验原理 2.1 ADC0804原理 ADC0804是8位全MOS中速逐次逼近式A/D转换器,片内有三态数据输出锁存器,可以和单片机直接接口。单通道输入,转换时间大约100us。ADC0804转换时序是:当CS=0许可进行A/D转换。WR由低到高时,A/D开始转换,一次转换共需要66-73个时钟周期。CS与WR同时有效时启动A/D转换,转换结束产生INTR信号(低电平有效),可供查询或者中断信号。在CS和RD的控制下可以读取数据结果。 ADC0804 为一只具有20引脚8位CMOS 连续近似的A/D 转换器, 其规格如下: (1) 高阻抗状态输出 (2) 分辨率:8 位(0~255) (3) 存取时间:135 ms (4) 转换时间:100 ms (5) 总误差:-1~+1LSB (6) 工作温度:ADC0804C为0度~70度;ADC0804L为-40 度~85 度 (7) 模拟输入电压范围:0V~5V (8) 参考电压:2.5V (9) 工作电压:5V (10) 输出为三态结构 1. 接脚说明见图1: 2. PIN1 (CS ):Chip Select,与RD、WR 接脚的输入电压高低一起判断读取或写入与否,当其为低位准(low) 时会active。 3. PIN2 ( RD ):Read。当CS 、RD 皆为低位准(low) 时,ADC0804 会将转换后的数字讯号经由DB7 ~ DB0 输出至其它处理单元。 4. PIN3 (WR ):启动转换的控制讯号。当CS 、WR 皆为低位准(low) 时ADC0804 做清除的动作,系统重置。当WR 由0?1且CS ,0 时,ADC0804会开始转换信 号,此时INTR 设定为高位准(high)。 5. PIN4、PIN19 (CLK IN、CLKR):频率输入/输出。频率输入可连接处理单元的讯号频率范围为100 kHz 至800 kHz。而频率输出频率最大值无法大于640KHz,一般可选用外部或内部来提供频率。若在CLK R 及CLK IN 加上电阻及电容,则可产生ADC 工作所需的时序,其频率约为: 6. PIN5 ( INTR ):中断请求。转换期间为高位准(high),等到转换完毕时INTR 会变为低位准(low)告知其它的处理单元已转换完成,可读取数字数据。 7. PIN6、PIN7 (V(+)、V(-)):差动模拟讯号的输入端。 ININ 输入电压V,V(+),V(-),通常使用单端输入,而将V(-)接地。 ININININ8. PIN8 (A GND):模拟电压的接地端。 9. PIN9 (V?2)?模拟参考电压输入端。VREF 为模拟输入电压VIN 的上限值。REF 若PIN9空接,则VIN 的上限值即为VCC。 10. PIN10 (D GND)?数字电压的接地端。 11. PIN11 ~ PIN18 (DB7 ~ DB0)?转换后之数字数据输出端。 12. PIN20 (Vcc)?驱动电压输入端。 图1.ADC0804引脚图 2.2 本实验原理 ADC0804的输入模拟电压用一个滑动变阻器对电源分压得到,它的8位输出AD0~AD7与FPGA的8个管脚相连,即input [7:0] data。而data就是数码管的动态显示数据。通过循环扫描,使数码管正确的显示出data的十进制数形式。 图2.ADC0804与FPGA连接图 3(实验程序 3.1任务1程序 要想在数码管上从右往左数第4位显示小数点,可以用变量“jishu”的状态作为判断条件,当seg_com选中第4位时,jishu=3'b100,所以我在程序中增加了下面一段用来显示小数点: if(jishu==3'b100) begin case(shuju) 4'b0000:seg_data=8'b01000000;//0. 4'b0001:seg_data=8'b01111001;//1. 4'b0010:seg_data=8'b00100100;//2. 4'b0011:seg_data=8'b00110000;//3. 4'b0100:seg_data=8'b00011001;//4. 4'b0101:seg_data=8'b00010010;//5. 4'b0110:seg_data=8'b00000010;//6. 4'b0111:seg_data=8'b01111000;//7. 4'b1000:seg_data=8'b00000000;//8. 4'b1001:seg_data=8'b00010000;//9. default: seg_data=8'b01111111; endcase 3.2任务2程序 为了控制一列点阵,首先应该对FPGA试验箱中的几个复用端定义为输出并赋予合适的值。试验箱中点阵部分的连接图如下图: 图3.点阵与FPGA连接图 因此任务2在任务1的基础上在程序中增加下列指令: /*****fuyong assign SEL[0]=0; assign SEL[1]=1; assign SEL[2]=0; assign LL=0; /***** 点阵的控制端!! output [7:0] X; assign X=data_led; 4.管脚分配 任务2管脚(任务1的管脚包括在任务2中) 图4.ADC0804管脚分配图 5.实验结果 5.1任务1结果 顺时针旋转滑动变阻器旋钮,数码管显示由4.980变换到0.000。逆时针旋转则逐渐由小变大。 5.2任务2 结果 当数码管显示的输出值为0.000时,点阵中左上方第一列全暗,随着数码管显示值的增加,点阵的那列从上到下依次表示ADC0804的输出AD0~AD7,所以点阵上半部分变化比较灵敏。当码管显示值为4.980时,点阵全亮。之所以数码管不能显示5.000,是因为公式(vo=5*data_led*1000/256)中data_led最大值只能是255。 6.实验心得 通过本次实验,加深了对分频模块的理解与应用.在实验中,分频的作用是非常大的,只有稳定的频率,才能够使得各个芯片和期间正常工作,只有真正的了解分频的原理和方法,才可以独立展开程序的读和写. 此外我还学习到了8位数码管的动态显示方法。本次实验中,通过上课加小数点的练习,加深了我对动态显示的理解和灵活应用。 通过实验,在课下准备与课上练习中,我的编程和逻辑能力进一步得到了锻炼和提高。 附录 任务2程序: module jia0804(clkin, reg clkout; //becom zhongjian variable data, reg clkout2; //提供显示数据时钟 seg_com,seg_data, reg [3:0] state = state_pre; adcs,rd,wr, reg[7:0] jishu; ,SEL,X,LL); reg[3:0] shuju; //add.......+dianzhen program reg[31:0] vo; input clkin; //时钟输入50MHZ //******分频 input [7:0] data; always @(posedge clkin) begin output reg[7:0] seg_com; //位选 output reg[7:0] seg_data; //段选 if(DCLK_DIV < (CLK_FREQ / output reg rd,wr; CLK_out_FREQ)) output wire adcs; DCLK_DIV <= DCLK_DIV+1'b1; output [2:0] SEL; else output [7:0] X; begin output [5:1] LL; DCLK_DIV <= 0; parameter CLK_FREQ = 'D50_000_000; //系 clkout <= ~clkout; 统时钟50MHZ end parameter CLK_out_FREQ = 'D5000; //输end 出时钟 'D500_000; parameter CLK_out_FREQ2 = 'D50000; //输always @(posedge clkin) 出时钟$$$ gaiya begin if(DCLK_DIV2 < (CLK_FREQ / parameter state_pre = 0; CLK_out_FREQ2)) parameter state_pre2 = 1; DCLK_DIV2 <= DCLK_DIV2+1'b1; parameter state_start = 2; else parameter state_conv = 3; begin parameter state_wait = 4; if(clkout2==1) parameter state_readpre = 5; begin parameter state_read = 6; if(jishu<7) jishu=jishu+1; reg [7:0] data_led; //LED显示数据 else jishu=0; reg [31:0] DCLK_DIV; end reg[31:0] DCLK_DIV2; DCLK_DIV2 <= 0; clkout2 <= ~clkout2; end end else end begin //*******数码管显示 case(shuju) always @(posedge clkout2) 4'b0000:seg_data=8'b11000000;//0 begin 4'b0001:seg_data=8'b11111001;//1 vo=5*data_led*1000/256; 4'b0010:seg_data=8'b10100100;//2 case(jishu) 4'b0011:seg_data=8'b10110000;//3 4'b0100:seg_data=8'b10011001;//4 3'b100:shuju=(vo)/1000; 4'b0101:seg_data=8'b10010010;//5 3'b101:shuju=((vo)%1000)/100; 4'b0110:seg_data=8'b10000010;//6 4'b0111:seg_data=8'b11111000;//7 3'b110:shuju=(((vo)%1000)%100)/10; 4'b1000:seg_data=8'b10000000;//8 4'b1001:seg_data=8'b10010000;//9 3'b111:shuju=(((vo)%1000)%100)%10; default: seg_data=8'b11111111; default:shuju=4'b0000; endcase endcase end case(jishu) 3'b000: seg_com=8'b00000001; end 3'b001: seg_com=8'b00000010; 3'b010: seg_com=8'b00000100; //********led zhen 3'b011: seg_com=8'b00001000; assign X=data_led; 3'b100: seg_com=8'b00010000; //********ADC0804时序 3'b101: seg_com=8'b00100000; assign adcs=0; 3'b110: seg_com=8'b01000000; always @ (negedge clkout) 3'b111: seg_com=8'b10000000; begin //default: out=6'b00000; case (state) endcase state_pre : //0 if(jishu==3'b100)//if gaowei,add a begin point wr<=0; begin rd<=1; case(shuju) state <=state_pre2; 4'b0000:seg_data=8'b01000000;//0. end 4'b0001:seg_data=8'b01111001;//1. state_pre2 : //1 4'b0010:seg_data=8'b00100100;//2. begin 4'b0011:seg_data=8'b00110000;//3. wr<=1; 4'b0100:seg_data=8'b00011001;//4. rd<=1; 4'b0101:seg_data=8'b00010010;//5. state <=state_start; 4'b0110:seg_data=8'b00000010;//6. end 4'b0111:seg_data=8'b01111000;//7. state_start ://2 4'b1000:seg_data=8'b00000000;//8. begin 4'b1001:seg_data=8'b00010000;//9. wr<=1; default: seg_data=8'b01111111; rd<=0; endcase state <=state_conv; end state <= state_pre; //重新回到状 state_conv : //3 态1 进行下一次AD转换 end begin endcase data_led = data; //开始读数据 end state <=state_wait; //*******fuyong end assign SEL[0]=0; state_wait : //4 assign SEL[1]=1; begin assign SEL[2]=0; wr<=1; assign LL=0; rd<=1; endmodule
本文档为【ADC0804实验】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_004283
暂无简介~
格式:doc
大小:122KB
软件:Word
页数:0
分类:互联网
上传时间:2017-10-01
浏览量:11