AVR单片机ADC范例程序ADChADCC

上传人:鲁** 文档编号:545212681 上传时间:2023-03-27 格式:DOCX 页数:6 大小:153.32KB
返回 下载 相关 举报
AVR单片机ADC范例程序ADChADCC_第1页
第1页 / 共6页
AVR单片机ADC范例程序ADChADCC_第2页
第2页 / 共6页
AVR单片机ADC范例程序ADChADCC_第3页
第3页 / 共6页
AVR单片机ADC范例程序ADChADCC_第4页
第4页 / 共6页
AVR单片机ADC范例程序ADChADCC_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《AVR单片机ADC范例程序ADChADCC》由会员分享,可在线阅读,更多相关《AVR单片机ADC范例程序ADChADCC(6页珍藏版)》请在金锄头文库上搜索。

1、1. AD(模数)转换范例编写:阿莫(armok)/代码设计:HJJourAVR/2005-09-05/www.OurAVR.com开发语言2. 本范例使用WinAVR/GCC20050214版本开发范例描述本程序简单的示范了如何使用ATMEGA16ADC模数转换器普通的单端输入差分输入及校准基准电压的校准查询方式中断方式数据格式的变换3. 出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAGICE硬件仿真器电路图设计:为简化线路设计,使用了本网站的ATmegal幽能小板。在范例中选用内部2.56V电压基准作Vref,差分通道10倍放大则单端电压测量范围02.56V,分辨率2.5mV

2、差分电压测量范围+/-256mV分辨率0.5mV电流分辨率=50uA10欧姆电流采样电阻电流分辨率=500uA1欧姆电流采样电阻程序中需要把实测的基准电压代入常量Vref中,以获得更准确地结果我手中的样片实测为2.556VVcc=5.0V2.550VVcc=3.3V本电路仅供参考,没有考虑抗干扰方面的要求共模新入电压范10-VCC差模输入电压范围-血SW2元放大WXTpwcxocrrojP叫敏PE5(MOSE)PB6(MKO)Pg7(SCPRISETvccgXTAUXTALIPCOffiXEi)PD1(TXD)PK(INTO)roonrrn阳(OCI.BJ)PDS(OCU)PM(ICF)PAO

3、(JtDCO)PAI(ADCnPA2(ADC2)S(ADC3*0X4)PAS(ADC5)PA6XDC6)U7胸DC?)ARETATOCPC?(T0SC2)K6(T0SCI)PC5(Tii)PC4(TOQ)PC3(TMS)FC2(TCKJKg始PCO(SCL)PD7(OC2J.mrrrrrLCuir-电n电压采样.输入电压范围O-ViftfWxIED*XRED-vttmo-+VBtfyio倍放大代码设计与说明/*AVRADC使用范例*作者:HJJourAVR*编译器:WINAVR20050214*时钟:内部RC8MHz*www.OurAVR.com2006.4.30*/*本程序简单的示范了如何使

4、用ATMEGA1的ADC1数转换器普通的单端输入差分输入及校准基准电压的校准查询方式中断方式数据格式的变换出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAGICE硬件仿真器*/#include#include#include#include/*宏INTERRUPT勺用法与SIGNAL类似,区别在于SIGNAL执行时全局中断触发位被清除、其他中断被禁止INTERRUPT行时全局中断触发位被置位、其他中断可嵌套执另外avr-libc提供两个API函数用于置位和清零全局中断触发位,它们是经常用到的分别是:voidsei(void)和voidcli(void)由interrupt.h定义*

5、/管脚定义#definein_Single0/PA0(ADC0)#definein_Diff_P3/PA3(ADC3)#definein_Diff_N2/PA2(ADC2)/常量定义/单端通道,不放大#defineAD_SE_ADC00x00/ADC0#defineAD_SE_ADC10x01/ADC1#defineAD_SE_ADC20x02/ADC2#defineAD_SE_ADC30x03/ADC3#defineAD_SE_ADC40x04/ADC4#defineAD_SE_ADC50x05/ADC5#defineAD_SE_ADC60x06/ADC6#defineAD_SE_ADC70

6、x07/ADC7/差分通道ADC0乍负端,10/200倍放大#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倍放大/差分通道ADC2作负端,10/200倍放大#defineAD_Diff2_2_10x0x0C/ADC2+ADC2-,10#defineAD_Diff3_2_10x0x0D/ADC

7、3+ADC2-,10倍放大,校准用倍放大#defineAD_Diff2_2_200x0x0E/ADC2+ADC2-,200倍放大,校准用#defineAD_Diff3_2_200x0x0F/ADC3+ADC2-,200倍放大/差分通道ADC1作负端,不放大#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/ADC

8、4+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+ADC2-#defineAD_Diff2_2_1x0x1A/ADC2+ADC2-,校准用#defineAD_Diff3_2_1x0x1B/ADC3+ADC2-#defineAD_Diff4_2_1x0x1C/ADC

9、4+ADC2-#defineAD_Diff5_2_1x0x1D/ADC5+ADC2-/单端通道,不放大#defineAD_SE_VBG0x1E/VBG内部能隙1.22V电压基准,校准用#defineAD_SE_GND0x1F/接地校准用/注:/差分通道,如果使用1x或10x增益,可得到8位分辨率。如果使用200x增益,可得到7位分辨率/在PDIP封装下的差分输入通道器件未经测试。只保证器件在TQFPMLF封装下正常工作。#defineVref2483/mV实测的Vref引脚电压5.0V供电/#defineVref2464/mV实测的Vref引脚电压3.3V供电/全局变量unsignedintA

10、DC_SingleEnded;/单端输入的ADC值intADC_Diff;/差分输入的ADC直volatileunsignedintADC_INT_SE;/volatile限定中断模式用的单端输入ADC值,会在中断服务程序中被修改,须加volatileunsignedcharADC_OK;/ADC状态,会在中断服务程序中被修改,须加volatile限定变换后的电压mVunsignedintLED_Volt;/intLED_Curr;/变换后的电流100uA/仿真时在watch窗口,监控这些全局变量。unsignedintread_adc(unsignedcharadc_input)/查询方式读

11、取AD西端通道ADMUX=(0xc0|adc_input);/adc_input/0xc0:选择内部2.56V参考电压:单端通道0x000x07,0x1E,0x1FADCSRA|=(1ADSC);/启动AD转换loop_until_bit_is_set(ADCSRA,ADIF);/方法1等待AD转换结束/while(ADCSRA&(1ADIF)=0);/写法2这种写法优化不好/loop_until_bit_is_clear(ADCSRA,ADSC);/ADCSRA|=(1125uSADCSRA|=(1ADSC);loop_until_bit_is_set(ADCSRA,ADIF);ADCSRA

12、|=(1ADIF);/当切换到差分增益通道,由于自动偏移抵消电路需要沉积时间,第一次转换结果准确率很低。用户最好舍弃第一次转换结果。ADCSRA|=(1ADSC);loop_until_bit_is_set(ADCSRA,ADIF);ADCSRA|=(1=0x0200)/负数要变换,正数不用(ADC_FIX|=0xFC00;/变换成16位无符号整数)return(int)ADC_FIX;)SIGNAL(SIG_ADC)/ADC中断服务程序(/硬件自动清除ADIF标志位ADC_INT_SE=ADC;读取结果ADC_OK=1;)intmain(void)(longtemp32;ADC_Single

13、Ended=0;ADC_Diff=0;ADC_INT_SE=0;/上电默认DDRx=0x00,PORTx=0x00输入,无上拉电阻PORTB=0xFF;/不用的管脚使能内部上拉电阻。PORTC=0xFF;PORTD=0xFF;PORTA=(1in_Single)|(1in_Diff_P)|(1in_Diff_N);/作ADO入时,不可使能内部上拉电阻。ADCSRA=(1ADEN)|0x06;/使能ADC,时钟64分频125KHz8MHzsystemclocksei();/使能全局中断while(1)(/实测的Vref引脚电压=2556mVADC_SingleEnded=read_adc(AD_

14、SE_ADC0);/查询方式读取ADC0temp32=(long)ADC_SingleEnded*Vref;LED_Volt=(unsignedint)(temp32/1024);ADC_Diff=read_adc_diff(AD_Diff3_2_10x);ADC_Diff-=read_adc_diff(AD_Diff2_2_10x);/校准OFFSETtemp32=(long)ADC_Diff*Vref;LED_Curr=(unsignedint)(temp32/(512*10);/单位为100uA/查询方式读取ADC3+,ADC2-10倍放大max+/-255.6mV/10欧姆1mA=10mVmax+/-25.56mA/分辨率约0.5mV=50uA显示取整为100uA单位ADCSRA|=(1

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

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号