OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8931|回复: 5

求:BH1750光照传感器 STM32的开发例子

[复制链接]

30

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2011-10-22
在线时间
0 小时
发表于 2013-2-22 16:10:45 | 显示全部楼层 |阅读模式
求:BH1750光照传感器   STM32的开发例子,谢谢 我这里的驱动不了:
高手帮助看看,问题出在哪里了?只读出来一个255

void BH_start()  //开始信号
{
       BHWriteState1();
BH1DATA_H;//SDA=1;
delay_us(5);
BH1SCK_H;//SCL=1;
delay_us(5);
BH1DATA_L;//SDA=0;
delay_us(5);
}


void BH_stop()   //停止信号
{
       BHWriteState1();
BH1DATA_L;//SDA=0;
delay_us(5);
BH1SCK_H;//SCL=1;
delay_us(5);
BH1DATA_H;//SDA=1;
delay_us(5);
}

void BH_respons()  //应答
{
u8 i;
BH1SCK_H;//SCL=1;
delay_us(5);
BHReadState1();
while((BHDATA1()==1)&&(i<250))i++;
BH1SCK_L;//SCL=0;
delay_us(5);
}

void init_BH()  //初始化bh1710
{
       BHWriteState1();
BH1DATA_H;//SDA=1;
delay_us(5);
BH1SCK_H;//SCL=1;
delay_us(5);
}

void BH_write_byte(u8 date)
{
u8 i,temp;
/*for(i=0;i<8;i++)
{
temp=date&0x80;
BH1SCK_L;//SCL=0;
   delay_us(5);
SDA=temp;
delay_us(5);
BH1SCK_H;//SCL=1;
delay_us(5);
date=date<<1;

}
*/
BHWriteState1();
for (i=0x80;i>0;i/=2)             //shift bit for masking
  { 
  temp=date&i;
  BH1SCK_L;//SCL=0;
   delay_us(5);
  if (temp) BH1DATA_H;          //masking value with i , write to SENSI-BUS
    else BH1DATA_L;   
  delay_us(5);
    BH1SCK_H;                          //clk for SENSI-BUS
  delay_us(5);

  }
BH1SCK_L;//SCL=0;
delay_us(5);
BH1DATA_H;//SDA=1;
delay_us(5);
}

u8 BH_read_byte()
{
u8 i,k;
BHWriteState1();
BH1SCK_L;//SCL=0;
delay_us(5);
BH1DATA_H;//SDA=1;
delay_us(5);
BHReadState1();
for(i=0;i<8;i++)
{
BH1SCK_H;//SCL=1;
delay_us(5);
k=(k<<1)|BHDATA1();
BH1SCK_L;//SCL=0;
delay_us(5);
}
return k;
}



void write_reg(u8 address,u8 shuju) //给指定地址中写入数据
{
BH_start();
BH_write_byte(address);
BH_respons();
BH_write_byte(shuju);
BH_respons();
BH_stop();
}


u16 read_reg(u8 address) //从指定地址中读出数据 
{
u8 date2;
u8 date1;
u16 date;
BH_start();
BH_write_byte(address);
BH_respons();
date1=BH_read_byte();
BH1SCK_L;//SCL=0;  //写应答信号1
//BHWriteState1();
delay_us(5);
BH1DATA_L;//SDA=0;
delay_us(5);
BH1SCK_H;//SCL=1;
delay_us(5);  
date2=BH_read_byte();
BH1SCK_L;//SCL=0;
//BHWriteState1();
delay_us(5); //写应答信号0
BH1DATA_L;//SDA=0;
delay_us(5);
BH1SCK_H;//SCL=1;
delay_us(5);
BH_stop();

date=date1*256+date2;
return date;
}



//1710测光强主函数
u16 bh1710_read()
{
static u16 bh=0;


write_reg(write_1710,power_on);
write_reg(write_1710,0x52);   //测量时间设置100%
write_reg(write_1710,0x78);
write_reg(write_1710,h_resolution_mod);

delay_ms(120);
delay_ms(120);


bh=read_reg(read_1710);
write_reg(write_1710,reset);
write_reg(write_1710,power_down);


return bh;
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2013-5-6
在线时间
0 小时
发表于 2013-5-6 20:54:53 | 显示全部楼层
回复【楼主位】笑呵呵:
---------------------------------
你好,我是新手。。。我现在也碰到这个问题,不知道你怎么解决的?
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2014-5-11
在线时间
43 小时
发表于 2014-5-11 21:31:33 | 显示全部楼层
楼主搞定没?发一下你的源码学习一下。
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2015-7-21
在线时间
0 小时
发表于 2015-9-20 20:13:45 | 显示全部楼层
回复【3楼】3304756:
---------------------------------我也和你一样的情况
回复 支持 反对

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2014-2-27
在线时间
6 小时
发表于 2016-2-27 10:42:07 | 显示全部楼层
各位大神解决了吗?求教
回复 支持 反对

使用道具 举报

4

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2016-1-25
在线时间
75 小时
发表于 2016-3-29 22:42:49 | 显示全部楼层
没有答案的问题,也不知道楼主怎么样了,都这么多年了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 07:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表