3316|4

150

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【RISC-V MCU CH32V103测评】BH1750光强检测 [复制链接]

 

BH1750是一款数字式光强度传感器,相较于光敏电阻与A/D转换器所构成的光强检测,基于使用简便无需进行标度处理等特点。

BH1750是采用I2C接口来工作的,在使用时,可通过2个I/O口来模拟I2C通讯来进行环境光的检测。

BH1750与开发板的连接及显示效果如下图所示:

在模拟I2C通讯的过程中,对其输出高低电平及读取输入信号的相关定义如下:

#define SCL_Set() GPIO_WriteBit(GPIOA, GPIO_Pin_11, Bit_SET)

#define SCL_Clr() GPIO_WriteBit(GPIOA, GPIO_Pin_11, Bit_RESET)

 

#define SDA_Set() GPIO_WriteBit(GPIOA, GPIO_Pin_12, Bit_SET)

#define SDA_Clr() GPIO_WriteBit(GPIOA, GPIO_Pin_12, Bit_RESET)

配置BH1750相关引脚的初始化函数为:

  • void BH1750_Init(void)
  • {
  •     GPIO_InitTypeDef  GPIO_InitStructure;                //定义一个GPIO_InitTypeDef类型的结构体
  •     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能与LED相关的GPIO端口时钟
  •     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12; //配置GPIO引脚
  •     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //设置GPIO模式为推挽输出
  •     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;    //设置GPIO口输出速度   GPIO_Speed_50MHz
  •     GPIO_Init(GPIOA, &GPIO_InitStructure);               //调用库函数,初始化GPIOA
  • }

将相关引脚设置为输入功能的函数为:

  • void IIC_INPUT_MODE_SET()
  • {
  •     GPIO_InitTypeDef  GPIO_InitStructure;                //定义一个GPIO_InitTypeDef类型的结构体
  •     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能与LED相关的GPIO端口时钟
  •     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;            //配置GPIO引脚
  •     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;        //设置GPIO模式为输入  GPIO_Mode_IPD GPIO_Mode_IPU
  •     GPIO_InitStructure.GPIO_Speed =GPIO_Speed_10MHz ;    //设置GPIO口输出速度  GPIO_Speed_50MHz
  •     GPIO_Init(GPIOA, &GPIO_InitStructure);               //调用库函数,初始化GPIOA
  • }

将相关引脚设置为输出功能的函数为:

  • void IIC_OUTPUT_MODE_SET()
  • {
  •     GPIO_InitTypeDef  GPIO_InitStructure;                //定义一个GPIO_InitTypeDef类型的结构体
  •     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能与LED相关的GPIO端口时钟
  •     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;            //配置GPIO引脚
  •     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //设置GPIO模式为推挽输出
  •     GPIO_InitStructure.GPIO_Speed =GPIO_Speed_10MHz ;    //设置GPIO口输出速度GPIO_Speed_50MHz
  •     GPIO_Init(GPIOA, &GPIO_InitStructure);               //调用库函数,初始化GPIOA
  • }

BH1750的多字节读取函数为:

  • void Multiple_Read_BH1750()
  • {
  •     BH1750_Start();
  •     BH1750_SendByte(SlaveAddress+1);
  •     BH1750_RecvACK();
  •     BUF[0] = BH1750_RecvByte();
  •     BH1750_SendACK(0);
  •     BUF[1] = BH1750_RecvByte();
  •     BH1750_SendACK(1);
  •     BH1750_Stop();
  •     Delay_Ms(5);
  • }

读取光强度值得函数为:

  • void Get_Sunlight_Value()
  • {
  •     int dis_data=0;
  •     float temp;
  •     char i=0;
  •     int sd;
  •     Single_Write_BH1750(0x01);  // power on
  •     Single_Write_BH1750(0x10);  // H- resolution mode
  •     Delay_Ms(180);
  •     Multiple_Read_BH1750();
  •     for(i=0;i<3;i++)    dis_data=BUF[0];
  •     dis_data=(dis_data<<8)+BUF[1];
  •     temp=(float)dis_data/1.2;
  •     sd=(int)temp;
  •     if(sd<54612) OLED_ShowNum(0,2,sd,5,16);
  • }

实现显示效果的主程序为:

  • int main(void)
  • {
  •     uint8_t  senflag;
  •     Delay_Init();   //延时函数初始化
  •     app_OLED_Init();
  •     OLED_Init();
  •     OLED_Clear();
  •     OLED_ShowString(0,0,"CH32V103 TEST",16);
  •     OLED_ShowString(0,2,"OLED & BH1750",16);
  •     BH1750_Init();
  •     Delay_Ms(2000);
  •     OLED_Clear();
  •     OLED_ShowString(0,0,"Sunlight=",16);
  •     OLED_ShowString(48,2,"lx",16);
  •     while(1)
  •     {
  •        Get_Sunlight_Value();
  •        Delay_Ms(500);
  •     }
  • }

 

最新回复

感谢分享,期待后续的测评计划帖子哈,我也会持续关注你的哈!!!   详情 回复 发表于 2021-2-17 14:51

赞赏

1

查看全部赞赏

点赞(1) 关注
 
 

回复
举报

2947

帖子

4

TA的资源

五彩晶圆(中级)

沙发
 

为啥非要使用IO口来模拟IIC,硬件上不是有IIC吗?这种用法在任务少的时候没有问题,但是在多任务的环境下这就是大问题了。以后使用操作系统是趋势,建议少用IO模拟。

点评

主要是易于移植,对于容量大好上系统,小的会受限。  详情 回复 发表于 2021-2-15 10:18
 
 
 

回复

150

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
本帖最后由 jennyzhaojie 于 2021-2-15 10:20 编辑
bigbat 发表于 2021-2-15 08:51 为啥非要使用IO口来模拟IIC,硬件上不是有IIC吗?这种用法在任务少的时候没有问题,但是在多任务的环境下这 ...

主要是易于移植,使用引脚不受限制;对于容量大的好上系统,小的会受限些。

 
 
 

回复

1938

帖子

2

TA的资源

版主

4
 

感谢分享,期待后续的测评计划帖子哈,我也会持续关注你的哈!!!

 
 
 

回复

150

帖子

0

TA的资源

一粒金砂(高级)

5
 
w494143467 发表于 2021-2-17 14:51 感谢分享,期待后续的测评计划帖子哈,我也会持续关注你的哈!!!

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
报名最后一周!2025 英飞凌消费、计算与通讯创新大会-北京站
会议时间:3月18日(周二)09:30签到
参会奖励:电动螺丝刀套装、户外登山包、京东卡

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表