又出现奇葩问题啦!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通道的电压值一样! 这个芯片实验过没有问题,好像要空读一次才是有效的。 I2C器件读取一般内部地址会自己加,不奇怪
没看太明白。芯片用过,没问题。
页:
[1]