模数转换与模拟比较-avr ad范例_第1页
模数转换与模拟比较-avr ad范例_第2页
模数转换与模拟比较-avr ad范例_第3页
免费预览已结束,剩余5页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AVR模数(AD)转换范例程本范例使用 版本开本程序简单的示范了如何使用ATMEGA16的ADC模数转换器 查询方 数据格式的变换出于简化程序考虑,各种数据有对外输出,学习时建议使用JTAGICE硬件仿真电路图设计为简化线路设计,使用了本的ATmega16功能小板在范例中选用2.56V电压基准作Vref,差分通道10倍放大则单端电压测量范围02.56V,分辨率2.5mV差分+/-256mV分辨率0.5mV电流分辨率=50uA@10欧姆电流采样电阻电流分辨率=500uA@1欧姆电流采样电阻程序中需要把实测的基准电压代入常量Vref中,以获得更准确地结果我手中的样片实测为2.556V@Vcc=5.0V本电路参考,没有考 .代码设计与说明 *******策划、整理与测试:(arm ****代码设计: *******编译器 ********************************/#include<avr/io.h>#include<avr/delay.h>#include<avr/signal.h>#include<avr/interrupt.h>/*宏INTERRUPT的用法与SIGNAL类似,区别 SIGNAL执行时全局中断触发位被清除、其他中断被INTERRUPT执行时全局中断触发位被置位、其他中断可嵌套执另外avr-libc提供两个API函数用于置位和清零全局中断触发位,它们是经常用到的。分别是:voidsei(void)和voidcli(void)由interrupt.h定义*/#definein_Single0//PA0(ADC0)#definein_Diff_P3//PA3(ADC3)#definein_Diff_N2#defineAD_SE_ADC00x00//ADC0#defineAD_SE_ADC10x01//ADC1#defineAD_SE_ADC20x02//ADC2#defineAD_SE_ADC30x03//ADC3#defineAD_SE_ADC40x04#defineAD_SE_ADC50x05//ADC5#defineAD_SE_ADC60x06//ADC6#defineAD_SE_ADC70x07#defineAD_Diff0_0_10x0x08//ADC0+ADC0-,10#defineAD_Diff1_0_10x0x09//ADC1+ADC0-,10#defineAD_Diff0_0_200x0x0A//ADC0+ADC0-,200倍放大,校准#defineAD_Diff1_0_200x0x0B//ADC1+ADC0-,200倍放#defineAD_Diff2_2_10x0x0C//ADC2+ADC2-,10#defineAD_Diff3_2_10x0x0D//ADC3+ADC2-,10#defineAD_Diff2_2_200x0x0E//ADC2+ADC2-,200倍放大,校准#defineAD_Diff3_2_200x0x0F//ADC3+ADC2-,200倍放#defineAD_Diff0_1_1x0x10//ADC0+ADC1-#defineAD_Diff1_1_1x0x11//ADC1+ADC1-,校准用#defineAD_Diff2_1_1x0x12//ADC2+ADC1-#defineAD_Diff3_1_1x0x13//ADC3+ADC1-#defineAD_Diff4_1_1x0x14//ADC4+ADC1-#defineAD_Diff5_1_1x0x15//ADC5+ADC1-#defineAD_Diff6_1_1x0x16//ADC6+ADC1-#defineAD_Diff7_1_1x0x17//ADC7+ADC1-//差分ADC2作负端,不放大#defineAD_Diff0_2_1x0x18//ADC0+ADC2-#defineAD_Diff1_2_1x0x19//ADC1+#defineAD_Diff2_2_1x0x1A//ADC2+ADC2-,校准用#defineAD_Diff3_2_1x0x1B//ADC3+ADC2-#defineAD_Diff4_2_1x0x1C//ADC4+ADC2-#defineAD_Diff5_2_1x0x1D//ADC5+ADC2-#defineAD_SE_VBG0x1E//VBG能隙1.22V电压基准,校准#defineAD_SE_GND0x1F////1x10x8200x//在PDIP封装下的差分输入通道器件测试。只保证器件在TQFP与MLF封装下正常工#defineVref2556//mVVref引脚电压@5.0V//#defineVref2550//mV实测的Vref引脚电压@3.3VunsignedintADC_SingleEnded;ADCintADC_Diff;ADCvolatileunsignedintADC_INT_SE;ADC/volatilevolatileunsignedcharADC_OK;//ADCvolatileunsignedintLED_Volt;//mVintLED_Curr;//100uA//仿真时在watch窗口,这些全局变量unsignedintread_adc(unsignedcharadc_input)//查询方式ADC单端{//0xc0:选择2.56V参考电ADCSRA|=(1<<ADSC);ADloop_until_bit_is_set(ADCSRA,ADIF);1AD束//while((ADCSRA&(1<<ADIF))==0);2好//loop_until_bit_is_clear(ADCSRA,ADSC);2C=0ADCSRA|=(1<<ADIF);1returnADC;}intread_adc_diff(unsignedcharadc_input)//查询方式ADC差分通{unsignedintADMUX=(0xc0|adc_input);//adc_input:差分通道_delay_ms(1);>125uS2//可正可负+/-9bit-//Tiny26,ADC+ADC-,为if(ADC_FIX>=0x0200){ADC_FIX|=0xFC00;16}return}SIGNAL(SIG_ADC)//ADC{ADIFADC_INT_SE=ADC;//结果}int{longtemp32;ADC_SingleEnded=0;DDRx=0x00,PORTx=0x00PORTB=0xFF;//不用的管脚使 上拉电阻//作ADC输入时,不可使能上拉电阻ADCSRA=(1<<ADEN)|0x06;ADC,64125KHz@8MHztemsei();while{Vref2556mV//查询方式ADC0LED_Volt=(unsignedint)(temp32/1024);ADC_Diff=read_adc_diff(AD_Diff3_2_10x);ADC_Diff-=read_adc_diff(AD_Diff2_2_10x);//校准OFFSET//查询方式ADC3+,ADC2-10倍放大max+/-//101mA=10mVm

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论