打印
[技术问答]

N76E885AT20的AD多通道采集的问题

[复制链接]
676|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
豌豆爹|  楼主 | 2023-6-9 09:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

大家好,我是第一次使用N76E885AT20芯片,AD多通道采集数据时,会出现有时有数据,有时没有数据,请教这是怎么回事?void ADC_INILT()
{

//==========ADC初始化
        ADCCON0|=0x00;                                                                //ADC控制寄存器0
                                                                                                                                         
        ADCCON1|=0x21;                                                                //ADC 控制寄存器1

        ADCCON2|=0x00;                                                                //ADC 控制寄存器1

        P0DIDS|=0x1E;                                                                //ADC通道数字输入不连接寄存器 AD4和AD3 AD2和AD1
}
//==================
//函数功能:通过AD采集通道对应AD值
//入口参数:AD采集通道号
//出口参数:采集后AD值
//说明:
//==================
uint AD_SAPING(uchar channel)
{      
        uint i,k;
        ADCCON0&=0xF0;
        ADCCON0|=channel;                                                //选择AD采集通道(选择通道0)
        clr_ADCF;                                                                                //ADC转换标志清0
        set_ADCS;                                                                                //启动AD开始转换                                
        while(ADCF==0);                                                        //转换结束      
        clr_ADCF;                                                                                //ADC转换标志清0
//========读取右边AD采集值(右对齐,高位是8位,低位是2个)      
        i=ADCRL;
        k=ADCRH<<2;
        k+=i;
        return k;                                                                                //返回值                                                                                                                        
}


//========同时采集多个通道
void main()
{
  uchar i,j;
  uint AD_BUF[4][10];
   ADC_INILT();        //ADC初始化
   for(i=1;i>=4;i++)
   {
       for(j=0;j>=9;j++)
       {
          AD_BUF[j]=AD_SAPING(i);
       }
   }
}

程序运行时,多次采集数据就会出错,有时可以采集到数据,有时无法采集到数据,请问各大神是怎么回事,程序哪 里有问题吗?谢谢

使用特权

评论回复
沙发
onlycook| | 2023-6-10 09:00 | 只看该作者
多路ADC采样可以参考N76E003的bsp下的ADC_multi_channel例程

使用特权

评论回复
板凳
Henryko| | 2023-6-12 22:47 | 只看该作者
是不是多通道冲突了

使用特权

评论回复
地板
Annie556| | 2023-6-21 10:44 | 只看该作者
在 ADC_INILT() 函数中,你初始化了 ADCCON0 和 ADCCON1寄存器,但是并没有对 ADCCON2 寄存器进行初始化。在 AD_SAPING() 函数中,你使用了 ADCCON2 寄存器来设置 ADC 的采样时间和增益,如果 ADCCON2 寄存器没有正确初始化,可能会导致采集数据不稳定

使用特权

评论回复
5
Charlene沙| | 2023-6-21 12:06 | 只看该作者
最好还是延时稍微加大点,这样数据不容易被清掉

使用特权

评论回复
6
Emily999| | 2023-6-21 13:19 | 只看该作者
找个FAE咨询一下吧,或者代理商,他们还能好处理点

使用特权

评论回复
7
Candic12e| | 2023-6-21 14:25 | 只看该作者
看到在 main() 函数中,你多次调用 AD_SAPING() 函数来采集多个通道的数据,但是并没有给 ADC 留出足够的转换时间,这可能会导致采集到的数据不准确。你可以在调用 AD_SAPING() 函数之间加入适当的延迟时间,或者使用硬件定时器来触发 ADC 转换

使用特权

评论回复
8
Allison8859| | 2023-6-21 15:31 | 只看该作者
你说的没有数据是数据直接为0还是?

使用特权

评论回复
9
Belle1257| | 2023-6-21 16:40 | 只看该作者
感觉像数据通道冲突了,导致有时候有数据,有时候没有

使用特权

评论回复
10
B1lanche| | 2023-6-22 06:48 | 只看该作者
你的程序中没有对 ADC 的采样频率和采样时间进行设置,这可能会导致采集到的数据不准确。在 AD_SAPING() 函数中,你可以使用 ADCCON2 寄存器来设置采样时间和采样频率

使用特权

评论回复
11
alxd| | 2023-6-22 09:21 | 只看该作者
你在 AD_SAPING() 函数中,循环中等待 ADC 转换结束,但是并没有使用互斥锁来保护临界区,这可能会导致在多线程环境下出现竞态条件。你可以使用 临界区 或 信号量 来解决这个问题

使用特权

评论回复
12
Carina卡| | 2023-6-22 11:29 | 只看该作者
有时候有数据,有时候没数据?是不是被别的函数给数据清空了

使用特权

评论回复
13
Estelle1999| | 2023-6-22 13:50 | 只看该作者
你用官方的demo修改呗,是不是能好点

使用特权

评论回复
14
bartonalfred| | 2023-7-12 17:38 | 只看该作者
增大相邻通道之间的延时               

使用特权

评论回复
15
i1mcu| | 2023-7-12 18:06 | 只看该作者
选择正确的通道进行采集非常重要。确保选择了正确的通道,并相应地配置ADC寄存器以实现多通道采集。

使用特权

评论回复
16
uytyu| | 2023-7-12 18:24 | 只看该作者
多个通道的信号存在相互干扰               

使用特权

评论回复
17
pl202| | 2023-7-13 14:15 | 只看该作者
选择合适的传输速率和数据格式,以保证数据传输的稳定性和准确性。

使用特权

评论回复
18
mnynt121| | 2023-7-13 15:12 | 只看该作者
如果采集的信号受到外界干扰,那么需要使用隔离和滤波等方法减少干扰。

使用特权

评论回复
19
iyoum| | 2023-7-13 16:06 | 只看该作者
当AD模块的采样时间过短或外部输入阻抗过高时,可能会导致采样精度降低。

使用特权

评论回复
20
xiaoyaodz| | 2023-7-13 16:59 | 只看该作者
如果不同通道的信号具有不同的采样速率,可能会导致数据不准确或不一致。

使用特权

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

本版积分规则

503

主题

1924

帖子

5

粉丝