基于STC15W408AS单片机驱动BH1750FVI光强度传感器

在上一篇中,我们介绍了iic驱动oled显示屏。这一篇是iic驱动bh1750fvi光强度传感器。其实在之前的树莓派系列中也写过bh1750fvi光强度传感器的文章。
这里是一个iic总线上面挂载了两个iic从设备。
产品介绍
bh1750fvi 是一种用于两线式串行总线接口的数字型光强度传感器集成电路。这种集成电路可以根据收集的光线强度数据来调整液晶或者键盘背景灯的亮度。利用它的高分辨率可以探测较大范围的光强度变化。(1lx-65535lx)
产品特点
支持 i2c bus 接口(f/s mode support)。接近视觉灵敏度的光谱灵敏度特性(峰值灵敏度波长典型值:560nm)。输出对应亮度的数字值。对应广泛的输入光范围(相当于 1-65535lx)。通过降低功率功能,实现低电流化。通过 50hz/60hz 除光噪音功能实现稳定的测定7. 支持 1.8v 逻辑输入接口。无需其他外部件。光源依赖性弱(白炽灯,荧光灯,卤素灯,白光 led,日光灯)。有两种可选的 i2c slave 地址。可调的测量结果影响较大的因素为光入口大小。使用这种功能能计算 1.1 lx 到 100000 lx 马克斯/分钟的范围。最小误差变动在±20%。受红外线影响很小。产品应用
移动电话,液晶电视,笔记本电脑,便携式游戏机,数码相机,数码摄像机,汽车定位系统,液晶显示器。
芯片框图
描述:
・pd 接近人眼反应的光敏二极管。(photo diode with approximately human eye response.)
・amp 集成运算放大器:将 pd 电流转换为 pd 电压。
・adc 模数转换获取 16 位数字数据。
・logic + ic interface(逻辑+ ic 界面)光强度计算和 i2c 总线接口,包括下列寄存器:数据寄存器→光强度数据寄存。初始值是:“0000_0000_0000_0000”。测量时间寄存器→时间测量数据寄存。初始值是:“0100_0101”。
・osc 内部振荡器(时钟频率典型值:320khz)。该时钟为内部逻辑时钟。
从这个框图也可以看出这个芯片的内部模块比较简单,实际使用也不复杂。
测量程序步骤
指令集合结构
从“写指示”到“读出测量结果”的测量时序实例
#define iic_scl p10 // 时钟#define iic_sda p11 // 数据这个是iic和单片机io口的连接。
驱动代码
#include bh1750fvi.h#include iic.h#define bh1750fvi_slaveaddress 0x46 // 设备地址#define bh1750fvi_down 0x00 // 断电指令#define bh1750fvi_on 0x01 // 通电指令#define bh1750fvi_reseet 0x07 // 复位#define bh1750fvi_con_h 0x10 // 连续分辨率模式, 1lx, 120ms#define bh1750fvi_con_h2 0x11 // 连续分辨率模式, 0.5lx, 120ms#define bh1750fvi_con_l 0x13 // 连续低分辨率模式,4lx, 16ms#define bh1750fvi_one_h 0x20 // 一次高分辨率模式,1lx, 120ms#define bh1750fvi_one_h2 0x21 // 一次高分辨率模式,0.5lx, 120ms#define bh1750fvi_one_l 0x23 // 一次低分辨率模式,4lx, 16ms // 往bh1750fvi写数据void bh1750fvi_write_reg(u8 reg){ iic_start(); iic_write_byte(bh1750fvi_slaveaddress); iic_write_byte(reg); iic_stop();}// 读取1字节数据u8 bh1750fvi_read_reg(u8 reg){ u8 dat; iic_start(); iic_write_byte(bh1750fvi_slaveaddress); iic_write_byte(reg); iic_start(); iic_write_byte(bh1750fvi_slaveaddress + 1); dat = iic_read_byte(); iic_stop(); return dat;}u16 bh1750fvi_read_all(){ u8 i; u8 buf[8]; u16 dat; iic_start(); iic_write_byte(bh1750fvi_slaveaddress + 1); for(i = 0; i < 2; i++) { buf[i] = iic_read_byte(); if(i == 2){ iic_send_ack(1); }else{ iic_send_ack(0); } } iic_stop(); dat = buf[0]< <8 + buf[1]; return dat;}u16 bh1750fvi_measure(){ bh1750fvi_write_reg(bh1750fvi_on); bh1750fvi_write_reg(bh1750fvi_con_h); return bh1750fvi_read_all();}void bh1750fvi_init(){ bh1750fvi_write_reg(bh1750fvi_down); bh1750fvi_write_reg(bh1750fvi_on);}main.c
#include stc15.h#include delay.h#include bh1750fvi.h#include oled.hvoid uatrinit();void senddata(u8 dat);void sendstring(char *s);u8 num[] = {'0','1','2','3','4','5','6','7','8','9'};void main(){ u16 result; bh1750fvi_init(); oled_init(); //初始化oled oled_clear() ; while (1) { result = bh1750fvi_measure(); oled_showchar(0,0,num[result/10000],1); // 万 oled_showchar(10,0,num[result%10000/1000],1); // 千 oled_showchar(20,0,num[result%10000%1000/100],1); // 百 oled_showchar(30,0,num[result%10000%1000%100/10],1);// 十 oled_showchar(40,0,num[result%10],1); // 个 delayms(2000); }}显示效果图

清源科技多个分布式光伏项目成功并网
埃科光电闯关过会!7成收入来自工业相机,募资11.19亿扩大工业影像核心部件生产规模
泰克示波器在USB2.0一致性测试的应用
2019年需要关注的5种人工智能趋势
小米有望很快推出Redmi Note 10系列智能手机
基于STC15W408AS单片机驱动BH1750FVI光强度传感器
金航标开拓汽车自动驾驶市场,kinghelm品牌GPS北斗双模导航定位天线转接线成无人配送车关键零部件
华为余承东:先锋计划的产品正在加班加点生产
蒸汽回收机是什么,它的特点以及原理是什么
vivo X21魅夜紫图片赏析:张扬个性 极致魅惑
一文解析桥式整流电路
新汉完整数字告示解决方案
电动车频“起火”!蔚来、宁德相互“甩锅”,已引起政府部门关注
芯讯通携摩摩哒共享按摩椅精彩亮相MWCA
全球环境保护意识的抬头,也牵动产业在发展上的趋势
主观价值论与客观价值论
五分钟看懂通用V2V智能网联技术
从应用角度详解什么是AXI
移动办公时代引领者:英特尔vPro平台
特斯拉在中国上线两座超级充电站