又出现奇葩问题啦!PCF8952 AD转换,读通道1得到通道4的值

2020-01-23 14:22发布

四个通道都测电压,但是读通道1得到通道4的值,然后循环这样,读通道4得到通道3的值。。。。。。

这是读AD值的函数
unsigned char Read_AD(unsigned char CH)
{
        unsigned char Digital;
        IIC_Read(SlaveAddr,CH,&Digital,1);
        return Digital;
}
其中IIC_Read是
bit IIC_Read(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)
{
   unsigned char i;

   Start_I2c();               //启动总线
   SendByte(sla);             //发送器件地址
     if(ack==0)return(0);
   SendByte(suba);            //发送器件子地址
     if(ack==0)return(0);

   Start_I2c();
   SendByte(sla+1);
      if(ack==0)return(0);

  for(i=0;i<no-1;i++)
    {
     *s=RcvByte();              //发送数据
      Ack_I2c();                //发送就答位
     s++;
    }
   *s=RcvByte();
    NoAck_I2c();                 //发送非应位
    Stop_I2c();                    //结束总线
  return(1);
}

然后主程序里
while(1)
        {
                val[0]=Read_AD(0);
                //Send_Byte(val[0]);   //串口输出看看值
                //delay_ms(10);
                val[1]=Read_AD(1);
                val[2]=Read_AD(2);
                val[3]=Read_AD(3);
                Display();
                delay_ms(500);
        }
0对应1通道,但读出的值是4通道的,我用万能表,测过了,4通道输入的值确实和读到的1通道的电压值一样!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
rain73
1楼-- · 2020-01-23 17:18
 精彩回答 2  元偷偷看……
laoma
2楼-- · 2020-01-23 22:27
I2C器件读取一般内部地址会自己加,不奇怪
labtech
3楼-- · 2020-01-24 03:32
没看太明白。芯片用过,没问题。

一周热门 更多>