欢迎来到天天文库
浏览记录
ID:30359580
大小:224.54 KB
页数:12页
时间:2018-12-29
《adc数据采集显示实验》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、预习报告实验目的:1、熟练ATmega16内部的ADC特点;2、了解ATmega16内部的ADC在数据采集中的相关操作和寄存器说明;3、熟练的应用ATmega16内部的ADC转换器主要实验仪器:1、计算机一台(安装有PROTEUS和ICC软件)实验原理及主要工作:一、实验原理ATmega16内部的ADC拥有很多的特点,更具这些特点可以知道本次实验的有些内容的要求。本次试验是数据采集和显示,用ADC转换器来进行数据的采集,并在1602的液晶显示屏上显示出数据采集的结果。要做本次实验还需了解ATmega16内部的ADC的寄存器,ADC有
2、以下几个寄存器:(1)多路复用器选择寄存器-ADMUX:其中REFS1/REFS0:参考电压源选择设置;ADLAR:ADC转换结果对齐选择位。(2)ADC数据寄存器-ADCL及ADCH:读取ADCL之后,ADC数据寄存器一直要等到ADCH也被读出才可以进行数据更新。因此,如果转换结果为左对齐,且要求的精度不高于810比特,那么仅需读取ADCH就足够了。否则必须先读出ADCL再读ADCH,其中MUX4~0:模拟通道与增益选择位。(3)ADC控制和状态寄存器A-ADCSRA:其中ADEN:ADC使能位;ADSC:ADC转换启动位;ADA
3、TE:ADC自动触发使能位;ADIF:ADC中断标志;ADIE:ADC中断使能;ADPS2~0:ADC预分频器选择位。(4)特殊功能IO寄存器-SFIOR:其中ADTS2~0:ADC自动触发源;Res:保留位。预习中遇到的问题及思考:1、怎样选择变阻器?实验原始数据记录:10教师签字:10实验报告请按以下几个部分完成实验报告。一、实验步骤二、实验原理图(proteus)三、程序流程图四、C程序代码全部五、调试结果截图六、实验总结及心得体会七、附件(原理图及程序压缩包)一、实验步骤1、ADC端口初始化(设置为不带上拉电阻的输入口);2
4、、基准电压源设置;(设置特殊功能寄存器ADMUX的位REFS1、REFS0)3、转换结果对其方式设置:(设置特殊功能寄存器ADMUX的位ADLAR)4、输入通道选择设置:(设置特殊功能寄存器ADMUX的位MUX4:0)5、AD使能、启动转换、中断设置:(设置特殊功能寄存器ADCSRA)6、触发源选择设置:(设置特殊功能寄存器SFIOR)二、实验原理图如下图,使用软件PROTEUS画出原理图。因为在实际中没有AVR的开发板,所以使用软件来模型出,来显示。当然也要了解这个软件的使用方法。10因此,在下面的图形中能够显示出ADC的数据采集
5、与显示,所以如下图:三、程序流程图10四、C程序代码#include#include#defineuintunsignedint#defineucharunsignedchar#defineRS_CLRPORTC&=~BIT(0)#defineRS_SETPORTC
6、=BIT(0)#defineRW_CLRPORTC&=~BIT(1)#defineRW_SETPORTC
7、=BIT(1)#defineE_CLRPORTC&=~BIT(2)#defineE_SETPORTC
8、=BIT(2)cons
9、tucharbiaoti[]={"ADCTEST"};uintvalue=0;voiddelay_ms(uintt){ucharx,y;for(;t>0;t--){for(x=0;x<114;x++)for(y=0;y<1;y++);}}voidWRITE_DATA(uchardata){E_CLR;RS_SET;RW_CLR;PORTD=data;E_SET;delay_ms(5);E_CLR;10}voidWRITE_COM(uchardata){E_CLR;RS_CLR;RW_CLR;PORTD=data;E_SET;dela
10、y_ms(5);E_CLR;}voidinit_1602(void){DDRC=0xFF;DDRD=0xFF;delay_ms(20);WRITE_COM(0x38);delay_ms(5);WRITE_COM(0x38);delay_ms(5);WRITE_COM(0x38);delay_ms(5);WRITE_COM(0x08);WRITE_COM(0x0c);WRITE_COM(0x06);WRITE_COM(0x84);}voidADC_init(void){DDRA=0x00;PORTA=0x00;10ADMUX=0x00
11、;ADCSRA=0xe7;SFIOR=0x00;}voidmain(void){uchari;ucharADC_L,ADC_H;init_1602();for(i=0;i<10;i++){WRITE_DATA(biaoti[i]);}
此文档下载收益归作者所有