makeflyeasy 发表于 2014-3-23 22:19:09

请教MEGA16怎么实现多路AD的采集??


目前没得思路,求高手指点

little4_su 发表于 2014-3-24 00:05:10

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编译通过!

shuipaopao 发表于 2014-3-24 16:36:49

如果只用一个AD转换端口的话,可考虑用模拟开关(如MAX4617等)进行切换。
页: [1]
查看完整版本: 请教MEGA16怎么实现多路AD的采集??