|
[引]avrADC转换实验-ADC噪声抑制模式
[复制链接]
/* ******************************************************** * 文件: adc.c * 功能: ADC转换实验-ADC噪声抑制模式 * 工具: WinAVR20050214(AVR-GCC) * mcu : Atmega8 * 时钟: 外部晶体8MHz * 日期: 2005年10月25日 ******************************************************** */ /**********************************************************/ #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h>
//单端通道,不放大 #define AD_SE_ADC0 0x00 //ADC0 #define AD_SE_ADC1 0x01 //ADC1 #define AD_SE_ADC2 0x02 //ADC2 #define AD_SE_ADC3 0x03 //ADC3 #define AD_SE_ADC4 0x04 //ADC4 #define AD_SE_ADC5 0x05 //ADC5 #define AD_SE_ADC6 0x06 //ADC6 #define AD_SE_VBG 0x1E //VBG 内部能隙1.23V电压基准,校准用 #define AD_SE_GND 0x1F //接地 校准用
//常量定义 #define Vref 2655 //mV 实测的Vref引脚电压4.93V供电
/*-------函数声明----------------------------------------------------------------------------------*/ uint16_t read_adc(unsigned char adc_input); uint16_t Measured_Vol_INT(void); /*----------------------------------------------------------------------------------------------------*/ SIGNAL(SIG_ADC) //ADC中断服务程序 { } uint16_t Measured_Vol_INT(void) { uint16_t M_Volt=0; //变换后的电压mV uint32_t temp32; uint8_t i; for(i=0;i<24;i++) { sei(); MCUCR|=0x90; //休眠使能、ADC噪声抑制模式 ADMUX=0xC0|AD_SE_ADC0; //单端输入ADC0 ADCSRA|=(1<<ADIE); //使能ADC中断 ADCSRA|=(1<<ADEN)|0x06; //ADC 使能的时候, asm("sleep"); //进入ADC噪声抑制模式将自动启动一次AD转换 temp32=(uint32_t)ADC*Vref; M_Volt+=(uint16_t)(temp32/1023); } ADCSRA&=~(1<<ADIE); //禁止ADC中断 cli(); return(M_Volt/24); }
|
|