请教MEGA16怎么实现多路AD的采集??
目前没得思路,求高手指点 int main(void)
{
unsigned int adc0_get,adc1_get,adc2_get,adc3_get;
InitializeADC();
while(1)
{
adc0_get=ADC_Convert(0);
adc1_get=ADC_Convert(1);
adc2_get=ADC_Convert(2);
adc3_get=ADC_Convert(3);
}
}
主函数中调用的两个子函数原形如下:
unsigned int ADC_Convert(unsigned char chanel)
{
unsigned int result;
ADMUX=_BV(REFS0);
ADMUX|=ch; //设置通道
ADCSRA|=_BV(ADSC); //启动转换
while(!(ADCSRA&_BV(ADIF))); //查询ADC是否结束且ADC寄存器是否更新
result=(uint)(ADC); //读转换结果
ADCSRA|=_BV(ADIF); //ADIF写“1”清零
return result;
}
ADC寄存器初始化
void InitializeADC(void)
{
DDRA&=0xF8;PORTA&=0xf8;//配置A/D转换器端口ADC3为输入,无上拉
//使能ADC,单次转换,预分频选择64
ADCSRA=0x86;
//AVCC,AREF引脚外加滤波电容,选ADC7
//ADMUX|=_BV(REFS0);
}
以上用Winavr2010编译通过! 如果只用一个AD转换端口的话,可考虑用模拟开关(如MAX4617等)进行切换。
页:
[1]