[AVR单片机]

AVR使用多路ADC出现相互干扰

[复制链接]
1198|4
手机看帖
扫描二维码
随时随地手机跟帖
avrgb|  楼主 | 2016-4-15 11:27 | 显示全部楼层 |阅读模式
我使用3路ADC采集,将数据显示在12864上,但下面这段代码在执行时使用1通道ADC会影响2通道 2通道会影响3通道 3通道会影响1通道,。,不知道问题在哪
#include <iom16v.h>
#include <macros.h>
#define  uchar unsigned char
#define  uint  unsigned int
#include "LCD12864.c"
void delay(uint MS)                  
{
        uint m,n;
             for( m=0;m<MS;m++)
                     for(n=0;n<500;n++);
}
uint mega16_ad(uchar adx)
{
     uint addata;
         DDRA&=~BIT(adx); //PA1为输入状态
         PORTA&=~BIT(adx); //PA1为高阻态输入
         ADMUX=0X40|adx;  //AVCC为基准电,AD1为输入通道 01000001
         ADCSRA=0X80; //10000000
         ADCSRA|=BIT(ADSC);
         while(!(ADCSRA&(BIT(ADIF))));
         ADCSRA|=BIT(ADIF);
     addata=ADCL;
         addata=addata+ADCH*256;
         return addata;
}   

void main()
{
   uint ada[3];
   uchar cnt,i,m;
   uchar a[3][5];
   DDRD|=BIT(4)|BIT(5)|BIT(6);//设置PD4、5、6为输出
   PORTD&=~BIT(6);//液晶使能拉低
   InitLcd12864();
   while(1)
   {
                   for(m=0;m<3;m++)
                   {
                   switch(m)
                   {
                                case 0:
                                 ada[0]=mega16_ad(0);
                                 delay(10);
                                 break;
                                 case 1:
                                 ada[1]=mega16_ad(1);
                                 delay(10);
                                 break;
                                 case 2:
                                 ada[2]=mega16_ad(3);
                                 delay(10);
                                 break;
                   }                 
                   for(i=0;i<4;i++)
                     {
                        a[m][3-i]=(ada[m]%10+0x30);
                          ada[m]=ada[m]/10;
                     }
                   a[m][4]='\0';
                }
                LcdShowStr(0, 0, a[0]);
                LcdShowStr(0, 1, a[1]);
                LcdShowStr(0, 2, a[2]);  
   }                 
}

相关帖子

SD10A| | 2016-4-15 12:16 | 显示全部楼层
我没看手册。但是你修改下程序
改成使用1的时候 就禁止2 3   试验一下呢

使用特权

评论回复
avrgb|  楼主 | 2016-4-15 15:25 | 显示全部楼层
SD10A 发表于 2016-4-15 12:16
我没看手册。但是你修改下程序
改成使用1的时候 就禁止2 3   试验一下呢

我试了下 是分频因子的问题  但现在还有些问题没想通,我再读取ADC值以后 没有清零ADIF标志位,但程序没有问题,不知道什么原因

使用特权

评论回复
color_sky| | 2016-4-22 10:20 | 显示全部楼层
我是来学习的,请大家帮助。

使用特权

评论回复
蓝魔大师弟| | 2016-11-14 07:59 | 显示全部楼层
学习的学习的...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

29

帖子

0

粉丝