Edwardwei 发表于 2014-8-15 12:28:33

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

四个通道都测电压,但是读通道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=Read_AD(0);
                //Send_Byte(val);   //串口输出看看值
                //delay_ms(10);
                val=Read_AD(1);
                val=Read_AD(2);
                val=Read_AD(3);
                Display();
                delay_ms(500);
        }
0对应1通道,但读出的值是4通道的,我用万能表,测过了,4通道输入的值确实和读到的1通道的电压值一样!

rain73 发表于 2014-8-16 00:35:14

这个芯片实验过没有问题,好像要空读一次才是有效的。

laoma 发表于 2014-8-16 00:37:52

I2C器件读取一般内部地址会自己加,不奇怪

labtech 发表于 2014-8-16 10:04:36

没看太明白。芯片用过,没问题。
页: [1]
查看完整版本: 又出现奇葩问题啦!PCF8952 AD转换,读通道1得到通道4的值