Uint16 ReadADS1115(void)
{
Uint16 temp;
Start_ADS1115();
if(Send_Byte(0x91)==0)
return 0;
temp=Read_byte();
AAAA1=temp;
Ack_IIC(1); //这一句出问题
AAAA2=Read_byte();
temp=AAAA1<<8+AAAA2;//Read_byte();
Ack_IIC(1);
Stop_ADS1115();
return temp;
}
Uint16 ADS1115(Uint16 channal)
{
Uint16 result;
if(Confige1115(channal)==1)
{
DelayUs(500);
if(PointRegister()==1)
{
result=ReadADS1115(); return result;
}
else
{
return 0;
}
}
else
{
return 0;
}
}
以上是核心部分,高八位读取是正确的,说明配置应该没问题,可是第八位一直都是0xFF,希望找找原因,谢谢
Jialun Mei:
是低八位,谢谢
Wanda WANG:
能用中文描述下你读取数据的整个流程吗? 看别人写的程序太难懂了。
Guoliang Li:
首先,或者测量下实际输入是不是和ADC输出的数据一致。
Decapton Wang:
可否用示波器抓一下SDA和SCL的波形图?另,如果写成Ack_IIC(0)会怎样?
Jialun Mei:
回复 Decapton Wang:
谢谢大家的回复,IIC在读取数据没完成之前应该是发ACK0的,全部完成才发ACK1,也就是我程序里标的有问题的那一句改一下就行了。话说这款芯片确实是很赞的。