标题: [求助]新手AVR ADC通道切换求助 [打印本页]
作者: czxiaotou 时间: 2012-11-17 19:23
标题: [求助]新手AVR ADC通道切换求助
搞了几天,AVR-16单片机的ADC通道切换一直存在问题,每次切换到通道1,但是单片机采集到的还是通道0的数据。很郁闷。不知道是不是哪里寄存器设置错误了,求大神帮助。非常感谢
[upload=c,main1.c]viewFile.asp?ID=1393[/upload]
作者: czxiaotou 时间: 2012-11-18 11:17
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
TCCR0=0x0D;
}
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
if(SampleCount==0)
{
delay_us(50);
//ADMUX=adc_input | (ADC_VREF_TYPE & 0xff) ;
ADCSRA|=40;
delay_us(10);
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
}
else
{
//ADMUX=adc_input | (ADC_VREF_TYPE & 0xff) ;
ADCSRA|=40;
while ((ADCSRA & 0x10)==0);
delay_us(10);
ADCSRA|=0x10;
}
return ADCW;
}
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
Get_AD_Data();
}
void Get_AD_Data(void)
{
float temp=0;
char i=0;
switch (input_adc)
{
//两路ADC通道切换,0x00:表示第一路ADC,0x01:表示第二路ADC
case 0x00:
//读入ADC数据,并取平均处理,然后进行电压与压力的转换计算,最终数码管显示出来
Channel_1[SampleCount] = read_adc(input_adc);
SampleCount++;
if(SampleCount==50)
{
SampleCount=0;
temp=0;
for(i=1;i<50;i++)
{
temp="temp+Channel_1;
" }
temp="temp/49.0;"
dat1="temp;"
input_adc="0x01;
" admux="0x01;"
}
break;
case 0x01:
//读入ADC数据,并取平均处理,然后进行电压与压力的转换计算,最终数码管显示出来
Channel_2[SampleCount] = read_adc(input_adc);
SampleCount++;
if(SampleCount==50)
{
samplecount="0;
" temp="0;
" for(i=1;i<50;i++)
{
temp="temp+Channel_2;
" }
temp="temp/49.0;
" dat2="temp;
" input_adc="0x00;
" admux="0x00;
" dat_ok="1;
" tccr0="0x00;
" }
break;
}
}
void AD_init(void)
{
// ADC initialization
// ADC Clock frequency: 921.600 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: Timer0 Compare Match
ADMUX= 0x00;
ADCSRA=0xA6; //ADEN置1:使能ADC,ADATE置1:ADC自动触发使能,ADC输入时钟为CPU时钟8分频
SFIOR&=0x1F;
SFIOR|=0x60; //Timer0比较匹配
}
void timer0_config(void)
{
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 7.200 kHz
// Mode: CTC top="OCR0
//" OC0 output: Disconnected
TCCR0=0x0D;
TCNT0=0x00;
OCR0=0x80;
//TIMSK|=0x02;
}
跪求大神指点
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |