IIC总线设计③——光敏传感器(BH1750)
目录
一、模块介绍
(一)基本信息
(二)运行条件
(三)内部介绍
(四)模块工作流程
(五)指令集
(六)模块地址
(七)IIC通信举例
(1)连续读H分辨率模式1 、ADDR=0
(2)单次L分辨率模式1 、ADDR=1
(八)结果计算公式
二、程序设计
(一)bh1750.h文件宏定义
(二)bh1750.c文件
①初始化函数
②读数据函数
(三)主函数
三、演示效果
(一)黑暗处
(二)对着我的台灯
四、补充
(一)硬件连接
(二)模块图
(三)原理图
程序:
51版本:
32版本:
链接:https://pan.baidu.com/s/1SASv3GejlO8cs43fcHTQfw
提取码:9534
一、模块介绍
(一)基本信息
BH1750FVI 是一款用于 I2C 总线接口的数字环境光传感器 IC。该IC最适合获得环境光,用于调整手机LCD和Keypad背光功率的数据。
- IIC总线接口
- 光谱责任近似于人眼反应
- 照度数字转换器
- 宽范围和高分辨率。 ( 1 - 65535 lx )
- 通过断电功能实现低电流
- 50Hz / 60Hz 光噪声抑制功能
- 1.8V 逻辑输入接口
- 无需任何外部零件
- 光源依赖性小。 (例如白炽灯、荧光灯、卤素灯、白光 LED、太阳灯)
- 可以选择 2 种 I2C 从地址。
- 光学窗口影响的可调测量结果(使用此功能可以检测最小 0.11 lx,最大 100000 lx。)
- 小的测量变化 (+/- 20%)
- 红外线的影响很小。
(二)运行条件
①VCC 电压 Vcc 最小2.4 最大3.6 V
②IIC参考电压为VCC电压
(三)内部介绍
①PD:具有近似人眼响应的光电二极管。
②AMP:用于将 PD 电流转换为电压的集成运算放大器。
③ADC:用于获得数字 16 位数据的 AD 转换器。
④Logic+I2C Interface:逻辑+ I2C接口
⑤OSC:内部振荡器(典型值 320kHz)。它是内部逻辑的 CLK
(四)模块工作流程
注:实线箭头表示自动执行,虚线箭头表示通过IIC指令执行。
首先是给模块上电,模块会自动进入掉电模式,当需要测量时,通过IIC发送指令使模块进入上电模式,此时模块会等待IIC发送测量命令,当选择单次测量时,模块测量完成会会自动进入掉电模式,若下次测量需要发送上电指令;若选择持续测量,模块不会自动进入掉电模式。
(五)指令集
操作说明 | 操作码(十六进制) | 指令描述 |
---|---|---|
掉电模式 | 0x00 | 无 |
上电模式 | 0x01 | 等待测量命令。 |
复位 | 0x07 | 重置数据寄存器值。复位命令在掉电模式下不可使用。 |
连续H分辨率模式1 | 0x10 |
以 1lx 分辨率开始测量。 测量时间通常为 120 毫秒。 |
连续H分辨率模式2 | 0x11 |
以 0.5lx 分辨率开始测量。 测量时间通常为 120 毫秒。 |
连续L分辨率模式 | 0x13 |
以 4lx 分辨率开始测量。 测量时间通常为 16 毫秒。 |
单次 H 分辨率模式1 | 0x20 |
以 1lx 分辨率开始测量。 测量时间通常为 120 毫秒。 测量后,它会自动设置为掉电模式 |
单次 H 分辨率模式2 | 0x21 |
以 0.5lx 分辨率开始测量。 测量时间通常为 120 毫秒。 测量后,它会自动设置为掉电模式 |
单次 L 分辨率模式 | 0x23 |
以 4lx 分辨率开始测量。 测量时间通常为 16 毫秒。 测量后,它会自动设置为掉电模式 |
更改测量时间(高3位) | 01000_xxx | 改变测量时间 |
更改测量时间(低5位) | 011_xxxxx | 改变测量时间 |
官方推荐使用H分辨率模式1,由于H分辨率模式1测量时间长(积分时间长),可以过滤频率在50-60Hz的噪声信号,并且H分辨率模式1的分辨率为1lx,适用于黑夜测量;同样H分辨率模式2也适用于黑夜。
(六)模块地址
当ADDR = ‘L’时,地址为 0x46
当ADDR = ‘H’时,地址为 0xb8
(七)IIC通信举例
(1)连续读H分辨率模式1 、ADDR=0
这就是我们的IIC协议,首先发送一的ST起始信号,然后发送地址信号(0100011)和写方向(0),等待设备应答,在发送指令0001 0000(连续H分辨率模式1),然后进入等待(最长等待时间为180ms),再对模块读取测量结果,测量结果由高字节和低字节组成,分两个字节发送。
(2)单次L分辨率模式1 、ADDR=1
我就不解释啦,和上面是一样的。
(八)结果计算公式
若接收到的高字节为:0000 0011,低字节为0000 0001,则结果为:
二、程序设计
这里演示的是 连续读H分辨率模式1 ADDR=0 的程序,这里不涉及IIC的具体时序,只介绍关于模块如何读写数据。
(一)bh1750.h文件宏定义
ADDR=0,模块地址为0x46;
共读取5次数据(每个数据包含高位字节数据和低位字节数据);
#define BH1750_ADDRESS 0x46 //模块地址
#define BH1750_DATA_NUM 5 //从模块中读取数据个数
(二)bh1750.c文件
①初始化函数
/*
*********************************************************************************************************
* 函 数 名: BH1750_Config
* 功能说明: 初始化BH1750模块
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
void BH1750_Config(void)
{BH1750_WriteByte(0x01);//设置为上电模式,等待读取数据指令BH1750_WriteByte(0x10); // H- resolution modedelay_ms(180);//延时,180ms
}
②读数据函数
uint8_t BH1750_Source_Data[2*BH1750_DATA_NUM]={0};//用于存放原始数据
float BH1750_Convert_Data[BH1750_DATA_NUM]={0};//存放转换后的数据
float BH1750_Average_Data = 0;//平均值=取样值之和/取样次数
/*
*********************************************************************************************************
* 函 数 名: BH1750_ReadByte
* 功能说明: 单字节读取BH1750数据
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/void BH1750_ReadByte(void)
{uint8_t i=0;uint16_t temp=0;float data_sum=0;for(i=0;i<BH1750_DATA_NUM;i++){BH1750_IIC_Start(); //主机打开IIC通讯BH1750_IIC_SendByte(BH1750_ADDRESS|0x01); //发送BH1750地址+读信号BH1750_IIC_WaitAck(); //等待从机应答BH1750_Source_Data[2*i] = BH1750_IIC_ReadByte();//存储高字节数据BH1750_IIC_Ack(); //回应ACKBH1750_Source_Data[2*i+1] = BH1750_IIC_ReadByte();//存储低字节数据BH1750_IIC_NAck(); BH1750_IIC_Stop(); //发送停止信号,释放总线}printf("BH1750共读取 %d 次数据\r\n",BH1750_DATA_NUM);for(i=0;i<BH1750_DATA_NUM;i++){temp = (BH1750_Source_Data[2*i]<<8)| BH1750_Source_Data[2*i+1];//将高字节数据 和低字节数据合并成16位数据BH1750_Convert_Data[i] = (float)temp / 1.2;//转换成最终数据data_sum += BH1750_Convert_Data[i];printf("BH1750第%d次的数据: %.2f lx \r\n",i,BH1750_Convert_Data[i]);}BH1750_Average_Data = data_sum/BH1750_DATA_NUM;printf("BH1750平均数据: %.2f lx \r\n",BH1750_Average_Data);
}
(三)主函数
void Init(void)
{USART_Config();//串口初始化BH1750_Config();//BH1750初始化
}int main(void)
{Init();BH1750_ReadByte();while(1){}
}
三、演示效果
(一)黑暗处
(二)对着我的台灯
四、补充
(一)硬件连接
①SCL-------PB5
②SDA-------PB6
③ADDR----GND(或者3.3V)
④VCC-------VCC(5V或3.3V,模块上有3.3V稳压芯片)
⑤GND------GND
(二)模块图
(三)原理图
以上就是光敏传感器的全部内容了,有理解不对的地方麻烦大家指出,万分感谢!程序和资料熊同学以后会更新在文章的开始......程序有51版本和32版本。
IIC总线设计③——光敏传感器(BH1750)相关推荐
- 基于IIC总线的温湿度传感器,你用过吗
大家好,我是程序员小哈. 又到了知识分享时间,今天我给大家分享一个温湿度传感器模块,我们之前分享过DHT11和DHT21两款温湿度传感器,它俩是基于单总线输出信号的传感器模块,只需要一个GPIO即可实 ...
- ESP32-C3学习笔记(3):ESP32 C3 IIC总线驱动光照强度传感器(基于ESP-IDF Eclipse)
一.硬件简介 光照强度传感器使用的是物联网俱乐部的智慧路灯案例扩展板E53_SC1,购买连接 https://item.taobao.com/item.htm?spm=2013.1.w4004-222 ...
- IIC总线设计④——MPU6050
注:文章参考了野火.正点原子资料(书籍.程序),图片部分来自网上,若有侵权,请联系删除. 目录 一.姿态检测 (一)欧拉角 (二)陀螺仪 (三)加速度传感器 (四)磁场检测器 二.MPU6050 (一 ...
- STM32+BH1750光敏传感器获取光照强度
一.环境介绍 MCU: STM32F103ZET6 光敏传感器: BH1750数字传感器(IIC接口) 开发软件: Keil5 代码说明:使用IIC模拟时序驱动,方便移植到其他平台,采集的光照度比较 ...
- STM32 驱动 GY-302 光照传感器 BH1750 模块(软件IIC与硬件IIC驱动)
1.特别说明 要是不想看原理和过程,直接下拉找代码吧,都是测试过的,很稳定,有硬件I2C驱动的,也有软件模拟I2C驱动的,基于STM32F103系列和STM32F4系列实现,基于标准库实现,条理清 ...
- 基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计
目录 1 项目概述 1.1 项目介绍 1.2 项目开发环境 1.3 小组人员及分工 2 需求分析 2.1 系统需求分析 2.2 可行性分析 2.3 项目实施安排 3 系统硬件设计 3.1 系统整体硬件 ...
- STM32 使用HTU21D温湿度传感器(结合逻辑分析仪深入分析IIC总线)
目录 1.介绍: 2.信号: 3.使用的平台: 4.实物接线 5.实验 5.1.读写地址 5.2.软件复位 6.主程序读取温湿度 1.介绍: 1.IIC总线为半双工通讯,有两条线,时钟信号线SCL和数 ...
- 光照强度传感器BH1750
一.芯片介绍 BH1750FVI是一款数字型光强度传感器集成芯片.BH1750的内部由光敏二极管.运算放大器.ADC采集.晶振等组成. 结构图 PD二极管通过光生伏特效应将输入光信号转换成电信号,经运 ...
- IIC总线上挂载多个从机的程序实现
文章目录 IIC总线上挂载多个从机的程序实现 IIC简介: 1.项目的硬件参考电路: 2.程序实现: 2.1.程序框架设计: 2.2 IIC 总线接口程序实现: 2.3 加速度传感器的配置: 2.4 ...
- IIC总线的原理与Verilog实现
IIC总线的原理与Verilog实现 1. 软件平台与硬件平台 2. 原理介绍 2.1 IIC总线的特点: 2.2 IIC总线协议详解: 2.2.1 IIC主机往从机里面写入数据的步骤 2.2.2 I ...
最新文章
- CXF的webservice接口中字符串参数中文问题
- 使用.Net平台构建企业应用系统场(下)
- Oracle NVL()和NVL2()函数
- ecshop $user
- Find consecutive elements in an array
- php实现网站插件机制的方法
- 视频基础知识:浅谈视频会议中H.264编码标准的技术发展
- Java并发编程:线程的同步
- 【语音去噪】基于matlab谱减法语音去噪【含Matlab源码 571期】
- HP 瘦客户机 - 使用 ie4uinit.exe 应用时,Citrix HDX Flash 出现故障和错误
- java视频播放器vlcj_vlcj--java-制作视频播放器
- Unity 面试经验汇总
- 夏普打印机提示需要维护请联系服务器,夏普打印机错误代码fk3的解决办法
- WPS简历模板的图标怎么修改_指导|让疫情之下的应届生,求职简历脱颖而出
- ASO优化的盲点:Apple ID权重必须考量
- excel多表格整合去重与空格去除
- 历年(2015-2018)英语六级翻译真题及参考答案
- 我的世界java版地狱_我的世界怎么去地狱_Minecraft地狱门建造教程 - 我的世界中文站...
- windows 10 ltsc 安装微软商店
- Whiten process——数据的白化处理
热门文章
- Maven下载sources时报错java.lang.RuntimeException: Cannot reconnect
- 51系列单片机IO模试设置
- win10电脑插耳机没反应(win10插上耳机还外放)
- 图机器学习——2.1 节点嵌入:基于随机游走
- BeagleBone Black 移植U-Boot (2 MLO、U-Boot)
- MATLAB绘制B样条曲线
- 使用es6模块化出现Access to script at 'file:///... ..from origin 'null' has been blocked。。。错误
- 查看SqlServer数据库上面脚本修改信息以及修改日志
- S3C2440的裸奔--内存篇(非MMU)--------转的网友 泠瑛 的博客文章在此谢过!
- 氢键H-H的博客目录