完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
传感器介绍
BH1750FVI是一种用于两线式串行总线接口的数字型光强度传感器集成电路。这种集成电路可以根据收集的光线强度数据来调整液晶或者键盘背景灯的亮度。利用它的高分辨率可以探测较大范围的光强度变化(1lx-65535lx)。 产品可应用于移动电话,液晶电视,笔记本电脑,便携式游戏机,数码相机,数码摄像机,汽车定位系统,液晶显示器等。 设备树编写 &i2c1 { clock-frequency = <400000>; status = "okay"; ... bh1750: bh1750@23 { status = "okay"; compatible = "bh1750-sensor"; reg = <0x23>; //slave地址 }; }; 在i2c1中声明设备节点,设备有两种可选的slave地址,由ADDR端口决定:ADDR为低电平时,slave地址是0x23;ADDR为高电平时,slave地址是0x5c。这里选择了前者。 驱动编写 附上写寄存器时序图,下图以发送“连续高分辨率模式”指令为例: PS:图中,0100011(即0x23)为slave地址;00010000为“连续高分辨率模式”指令码。 下面代码根据写寄存器时序图封装了写寄存器函数,参数opecode是所要写的指令。 static int bh1750_write_reg(struct i2c_client *client, unsigned char opecode) { unsigned char buf[1] = {opecode}; //所要写的指令 int ret; ret = i2c_master_send(client,buf,1); if(ret < 0) { printk("write_reg failed! ret = %dn",ret); } return ret; } 附上读寄存器时序图: 下面代码根据读寄存器时序图封装了读寄存器函数,一次读操作会得到两个字节的数据,保存在buf中 static int bh1750_read_reg(struct i2c_client *client, char *buf) { int ret; ret = i2c_master_recv(client,buf,2); //接收两个字节数据,先接收高八位,后接收低八位 if(ret < 0) { printk("read_reg: recv failed! ret = %dn",ret); return ret; } return ret; } 有了上面两个函数之后,就可以操作传感器使其工作并获得数据,先附上一张传感器工作流程图,如下: static int bh1750_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long mask) { char *data = kmalloc(2,GFP_KERNEL); int ret; bh1750_write_reg(bh1750.client,POWERON); //发送 通电 指令 bh1750_write_reg(bh1750.client,H_RESOLUTION_MODE); //发送“连续高分辨率模式”指令 mdelay(120); //等待传感器测量完成(该模式下测量时间一般为120ms,不同模式的测量时间不同,需调整延时的时间) bh1750_read_reg(bh1750.client,data); //读取测量结果 ret = IIO_VAL_INT; if(chan->type == IIO_TEMP){ *val = *data; *val = (*val << 8) + *(data + 1); //数据合成 } else{ ret = -EINVAL; } kfree(data); return ret; } 测试结果 笔者编写了一个测试程序,在串口调试终端中运行可执行程序,测试结果如下: /********用手遮挡********/ # /usr/bin/bh1750demo light data = 0.83(lx) /********正常光照********/ # /usr/bin/bh1750demo light data = 227.50(lx) /********高强光照********/ # /usr/bin/bh1750demo light data = 39234.17(lx) |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1906 浏览 1 评论
synopsys 的design ware:DW_fpv_div,浮点数除法器,默认32位下,想提升覆盖率(TMAX),如果用功能case去提升覆盖率呢?
2382 浏览 1 评论
RK3588 GStreamer调试四路鱼眼摄像头四宫格显示报错
5175 浏览 1 评论
【飞凌嵌入式OK3576-C开发板体验】RKNN神经网络-YOLO图像识别
254 浏览 0 评论
【飞凌嵌入式OK3576-C开发板体验】SSH远程登录网络配置及CAN通讯
1336 浏览 0 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 02:52 , Processed in 0.665434 second(s), Total 73, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号