最近在做课程设计,用到了BH1750这个模块,所以在IDE上下载了这个对接了SENSOR框架的软件包,但是在测试的过程中,发现读出来的全是0,参考了datasheet之后觉得寄存器配置应该没有什么问题,无奈只能百度,在好一番寻找之后,在CSDN上发现了一个9个月前的回答,他是这样说的,在bh1750.c文件中将函数bh1750_read_light();中的bh1750_set_measure_mode();里的mode参数改成BH1750_ONE_H_RES_MODE2就能正常读数了,经过测试发现问题确实解决,虽然是别人的回答,但是希望能帮到大家,还有就是希望能告知作者。
demo打印出来的值都是0,以为是传感器坏了(老早之前买的),于是用arduino测试一下,模块ok,根据@ppapp 说的修改成功,感谢!继续研究是因为啥
修改一下:
bh1750_set_measure_mode(hdev, BH1750_CON_H_RES_MODE2, 120);
模式不改变,把后面m_time加大一点就好了
猜测原因: 连续模式下,120ms,是最小阈值
1.bh1750先天体质差别
2.模块硬件设计
3.软件delay的精确度
4.接线问题(本人是杜邦线测试)
有条件的小伙伴可以上仪器,多模块,对比测试测试
最后,感谢软件包作者Sanjay_Wu,感谢ppapp,感谢rtt
https://github.com/sanjaywu/bh1750_sensor/issues 去这里联系一下作者试试
Hi https://www.rt-thread.org/qa/space-uid-16558.html :
看数据手册第5页:
[attach]15695[/attach]
BH1750_CON_H_RES_MODE2模式是指连续测量模式,也就是连续读取
BH1750_ONE_H_RES_MODE2模式是测量后自动设置为断电模式,也就是单次读取
所以使用软件里面默认使用BH1750_CON_H_RES_MODE2模式是没有问题的。
我做了测试,可以正常读取:
[attach]15698[/attach]
如果读取数据为0,请检查以下I2C通信是否正常,BH1750 IC是否引脚连接正常,下图是我使用的硬件接线图:
[attach]15697[/attach]
Hi ppapp :
看数据手册第5页:
您好,您的回复看到了,这个是我刚刚做的测试,BSP是F103-dofly-M3S,引脚我检查过了,sensor probe li_bh1750命令都正常识别,第一次识别是BH1750_CON_H_RES_MODE2参数的,第二次识别是BH1750_ONE_H_RES_MODE2参数的,第二次我还拿手捂了下,第一次读数只有0一直解决不了,改成BH1750_ONE_H_RES_MODE2才能正常读数,我愿意相信软件包没有错误,但是这个情况应该怎么解决呢。[attach]15699[/attach]
Sanjay_Wu 发表于 2020-6-5 21:51
Hi ppapp :看数据手册第5页:
具体接线:scl和sda是bsp定义的i2c2默认引脚pb10和pb11,3.3v和GND正常接,ADDR置空。重新建立的bsprtt工程。配置情况:只是打开模拟i2c,由于看到软件包也是i2c2于是其他什么都没干,当然还在sensor中添加了那几行代码。
[i=s] 本帖最后由 Sanjay_Wu 于 2020-6-6 01:17 编辑 [/i]
具体接线:scl和sda是bsp定义的i2c2默认引脚pb10和pb11,3.3v和GND正常接,ADDR置空。重新建立的bsprtt工 …
我在我的硬件平台上跑这个软件包是正常的。
如果数据读取为0,可以先检查一下硬件是否正常,DVI引脚是否有干扰?
从你的截图来看,数据并非一直是0,DVI引脚收到干扰的可能性应该比较大
[attach]15700[/attach]
有帮助就好