//获取OPT3001的设备ID 初始值为0x3001
uint GetOPT3001DeviceID()
{
uint IDNum=0;
uchar MSB=0;
uchar LSB=0;
OPT3001IIC_Start(); //IIC开始
OPT3001IIC_Send_Byte(OPT3001WriteAddr); //发送写地址 0x88 OPT3001IIC_Wait_Ack();
OPT3001IIC_Send_Byte(DEVICE_ID); //发送出厂编号寄存器地址 0x7F
OPT3001IIC_Wait_Ack();
OPT3001IIC_Start(); //IIC开始
OPT3001IIC_Send_Byte(OPT3001ReadAddr); //发送读地址 0x89
OPT3001IIC_Wait_Ack();
MSB = OPT3001IIC_Read_Byte(ACK); //读取两个字节
LSB = OPT3001IIC_Read_Byte(NACK);
IDNum=MSB*256+LSB;
OPT3001IIC_Stop();
return IDNum;
}
硬件上我VIN--5V ADDR---GND INT未连接,现在用上面的函数去读取OPT3001的设备ID时都是0xff00,数据不正确,应该是0x3001,后来我经过仿真在IIC开始后,发送的第一个写地址0x88后,我用OPT3001IIC_Wait_Ack();函数监控返回值为0x01表示我发的地址都没有回应
//获取OPT3001的设备ID 初始值为0x3001
uint GetOPT3001DeviceID()
{
uint IDNum=0;
uchar MSB=0;
uchar LSB=0;
OPT3001IIC_Start(); //IIC开始
OPT3001IIC_Send_Byte(OPT3001WriteAddr); //发送写地址 0x88 OPT3001IIC_Wait_Ack();
OPT3001IIC_Send_Byte(DEVICE_ID); //发送出厂编号寄存器地址 0x7F
OPT3001IIC_Wait_Ack();
OPT3001IIC_Start(); //IIC开始
OPT3001IIC_Send_Byte(OPT3001ReadAddr); //发送读地址 0x89
OPT3001IIC_Wait_Ack();
MSB = OPT3001IIC_Read_Byte(ACK); //读取两个字节
LSB = OPT3001IIC_Read_Byte(NACK);
IDNum=MSB*256+LSB;
OPT3001IIC_Stop();
return IDNum;
}
硬件上我VIN--5V ADDR---GND INT未连接,现在用上面的函数去读取OPT3001的设备ID时都是0xff00,数据不正确,应该是0x3001,后来我经过仿真在IIC开始后,发送的第一个写地址0x88后,我用OPT3001IIC_Wait_Ack();函数监控返回值为0x01表示我发的地址都没有回应
举报