首页 > 代码库 > ADC取样
ADC取样
#include<ioavr.h>#include "adcproc.h"#include "utils.h"#include "globdefs.h"#define SKIP_SAMPLES 1//ADC采样时忽略样本数#define BYTE unsigned char#define ADC_MUX_I 0x00//MUX选择第0通道#define ADC_MUX_U 0x01#define ADC_MUX_T 0x02BYTE fADCFlag = 0;int iADCData = http://www.mamicode.com/0;void InitADCSystem(void){ PORTA_PORTA0 = PORTA_PORTA1 = PORTA_PORTA2 = 0; //内部上拉电阻无效,减少干扰 DDRA_DDA0 = DDRA_DDA1 = DDRA_DDA2 = 0; //输入 ADMUX_REFS1 = ADMUX_REFS0 = 1; //内部参考电压2.56V ADCSRA_ADATE = 0; //单次转换模式 ADMUX_ADLAR = 0; //结果右对齐}void OpenADCSystem(void){ ADCSRA_ADEN = 1; //允许ADC转换 ADCSRA_ADIE = 1; //中断使能}void CloseADCSystem(void){ ADCSRA_ADEN = 0; ADCSRA_ADIE = 0; //关闭ADC中断}void SetADCInput(TMEAS_CHAN channel){ switch(channel) { case TMEAS_I_SENSE: ADMUX = ADMUX & 0xF0 | ADC_MUX_I; //ADMUX_MUX3=ADMUX_2=ADMUX_1=ADMUX_0=0; break; case TMEAS_U_SENSE: ADMUX = ADMUX & 0xF0 | ADC_MUX_U; //ADMUX_MUX3=ADMUX_2=ADMUX_1=0;ADMUX_0=1; break; case TMEAS_T_SENSE: ADMUX = ADMUX & 0xF0 | ADC_MUX_T; //ADMUX_MUX3=ADMUX_2=ADMUX_0=0;ADMUX_1=1; break; }}int ADCGetData(BYTE aver){ int adccode = 0; BYTE repeats = (1 << aver) + SKIP_SAMPLES; BYTE i = 0; fADCFlag = 0; for(i = 0; i < repeats; i++) { ADCSRA_ADSC = 1; //开始转换 while(!fADCFlag)//等待ADC中断 { ; } if(i > (SKIP_SAMPLES - 1)) { SREG_I = 0;//M8C_DisableGInt; adccode += iADCData; SREG_I = 1;//M8C_EnableGInt; } fADCFlag = 0; } adccode >>= aver; return (adccode);}#pragma vector=ADC_vect__interrupt void ADCConverted(void){ iADCData = ADC; fADCFlag = 1;}
ADC取样
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。