opt3001光线传感器问题求助

2019-03-24 17:02发布

用51单片机模拟I2C时序控制opt3001光线传感器,用逻辑分析仪抓出来的数据显示,opt3001没有反馈ACK给MCU,请问这种情况下最有可能是哪点出问题了呢?

下图是逻辑分析仪抓出来的时序图

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
Kileo
1楼-- · 2019-03-25 00:28
程序的流程如下,先读ManufacturerID和DeviceID,然后配置Configuration为0xCC10,等待800ms转换时间,判断CRF位是否为1(转换完成),进行Result值的读取,代码如下        
        opt3001ManufacturerIdRead = opt3001i2cReadRegsiter(OPT3001_MANUFACTURER_ID_REGISTER_ADDRESS);
        delay_xms(10);
        opt3001DeviceIdRead = opt3001i2cReadRegsiter(OPT3001_DEVICE_ID_REGISTER_ADDRESS);
        delay_xms(10);               
        while(1)
        {
                opt3001i2cWriteRegsiter(OPT3001_CONFIGURATION_REGISTER_ADDRESS, opt3001SetConfigurationRegister);

                /*        OPT3001 Resualt Read -- I2C Read        */
                delay_xms(CONVERSION_TIME_800MS);
                opt3001ConfigurationRead = opt3001i2cReadRegsiter(OPT3001_CONFIGURATION_REGISTER_ADDRESS);

                if(opt3001ConfigurationRead & (1 << OPT3001_CONFIGURATION_CRF))                // 判断是否转换完成, CRF = 1 :转换完成
                {        
                        opt3001ResultRead = opt3001i2cReadRegsiter(OPT3001_RESULT_REGISTER_ADDRESS);        
        
                        exponent = opt3001ResultRead >> 12;                        // 分离出指数部分
                        msntissa = opt3001ResultRead & 0x0fff;                // 分离出尾数部分
               
                        if(exponent < 12)        // exponent最大取值为1011B
                        {
                                //lsb_size = 0.01 * (2 << exponent);
                                //lux = lsb_size * fractional;
                                //intLux = (long)lux;
                                //len = IntToString(str, intLux);         //整数部分转换为字符串
                                len = IntToString(str, exponent);         //整数部分转换为字符串                                                
                        }        
                        UartInit(9600);
                    SendString("The Lux is : ");
                        SendString(str);
                }
                //else        // 重新配置Configuration Register
                        opt3001i2cWriteRegsiter(OPT3001_CONFIGURATION_REGISTER_ADDRESS, opt3001SetConfigurationRegister);
tx093zhong
2楼-- · 2019-03-25 05:37
你好 你的OPT3001调试好了吗?
tx093zhong
3楼-- · 2019-03-25 09:10
 精彩回答 2  元偷偷看……
tx093zhong
4楼-- · 2019-03-25 09:19
需要你的帮助啊
tx093zhong
5楼-- · 2019-03-25 10:59
需要你的帮助啊
ywfw30
6楼-- · 2019-03-25 12:09
 精彩回答 2  元偷偷看……

一周热门 更多>