请选择 进入手机版 | 继续访问电脑版
搜索
热搜: ROHM 模拟 车载
查看: 770|回复: 3

【传感器试用】代码详解颜色传感器BH1749NUC使用

  [复制链接]

该用户从未签到

11

主题

401

帖子

0

精华

金牌会员

最后登录
2022-1-5
发表于 2020-1-19 11:40:55 | 显示全部楼层 |阅读模式
本帖最后由 freeelectron 于 2020-1-19 11:58 编辑

图片1.png
1、基本特性
l I2C接口(支持全速模式)
l 16bit数字输出
l 红色、绿色、蓝色以及红外光
l 两个I2C地址可选
l 分辨率0.0125lx/count(在高增益和最长时间测量模式下)
l 典型的电流消耗为190uA
l 工作温度范围-40~85

2、引脚描述
图片2.png
ADDR引脚就是用来选择地址的:
图片3.png
INT引脚:输出电平变化、接mcu的外部中断接口。

3、寄存器描述
图片4.png

4、程序设计
4.1、寄存器以及参数设定定义
  1. #define  BH1749NUC_I2C_ADDR   0x72  //8bit
  2. //#define BH1749NUC_I2C_ADDR   0x39  7bit

  3. #define  BH1749NUC_SYSTEM_CONTROL   0x40
  4.             //bit[7]
  5.       #define    BH1749NUC_SOFEWARE_RESET_NOT_DONE      0x00
  6.       #define    BH1749NUC_SOFEWARE_RESET_DONE           0x80
  7.             //bit[6]
  8.       #define    BH1749NUC_INT_RESET_NOT_CHANGE          0x00
  9.       #define    BH1749NUC_INT_RESET_INACTIVE            0x40
  10.             //bit[5:0]

  11. #define  BH1749NUC_MODE_CONTROL1    0x41
  12.             //bit[6:5]
  13.       #define    BH1749NUC_IR_GAIN_FORBIDDEN1           0x00
  14.       #define    BH1749NUC_IR_GAIN_X1                    0x20
  15.       #define    BH1749NUC_IR_GAIN_FORBIDDEN2           0x40
  16.       #define    BH1749NUC_IR_GAIN_X32                   0x60
  17.             //bit[4:3]
  18.       #define    BH1749NUC_RGB_GAIN_FORBIDDEN1             0x00
  19.       #define    BH1749NUC_RGB_GAIN_X1                      0x08
  20.       #define    BH1749NUC_RGB_GAIN_FORBIDDEN2              0x10
  21.       #define    BH1749NUC_RGB_GAIN_X32                     0x18
  22.             //bit[2:0]
  23.       #define    BH1749NUC_MEASUREMENT_MODE_FORBIDDEN1   0x00
  24.       #define    BH1749NUC_MEASUREMENT_MODE_FORBIDDEN2   0x01
  25.       #define    BH1749NUC_MEASUREMENT_MODE_120MS        0x02
  26.       #define    BH1749NUC_MEASUREMENT_MODE_240MS        0x03
  27.       #define    BH1749NUC_MEASUREMENT_MODE_FORBIDDEN3   0x04
  28.       #define    BH1749NUC_MEASUREMENT_MODE_35MS         0x05
  29.       #define    BH1749NUC_MEASUREMENT_MODE_FORBIDDEN4   0x06
  30.       #define    BH1749NUC_MEASUREMENT_MODE_FORBIDDEN5   0x07

  31. #define  BH1749NUC_MODE_CONTROL2    0x42
  32.             //bit[4]
  33.       #define    BH1749NUC_RGB_EN_INACTIVE               0x00     
  34.       #define    BH1749NUC_RGB_EN_ACTIVE                 0x10

  35. #define  BH1749NUC_RED_DATA_L       0x50
  36. #define  BH1749NUC_RED_DATA_H       0x51

  37. #define  BH1749NUC_GREEN_DATA_L     0x52
  38. #define  BH1749NUC_GREEN_DATA_H     0x53

  39. #define  BH1749NUC_BLUE_DATA_L      0x54
  40. #define  BH1749NUC_BLUE_DATA_H      0x55

  41. #define  BH1749NUC_IR_DATA_L        0x58
  42. #define  BH1749NUC_IR_DATA_H        0x59

  43. #define  BH1749NUC_GREEN2_DATA_L    0x5A
  44. #define  BH1749NUC_GREEN2_DATA_H   0x5B

  45. #define  BH1749NUC_INTERRUPT        0x60
  46.             //bit[7]
  47.       #define BH1749NUC_INT_STATUS_INACTIVE              0x00
  48.       #define BH1749NUC_INT_STATUS_ACTIVE                0x80
  49.             //bit[3:2]
  50.       #define BH1749NUC_INT_SOURCE_RED                   0x00
  51.       #define BH1749NUC_INT_SOURCE_GREEN                 0x04
  52.       #define BH1749NUC_INT_SOURCE_BLUE                  0x08
  53.       #define BH1749NUC_INT_SOURCE_FORBIDDEN             0x0C

  54. #define  BH1749NUC_PERSISTENCE      0x61
  55.             //bit[1:0]
  56.       #define BH1749NUC_ACTIVE_MEASUREMENT_END           0x00
  57.       #define BH1749NUC_UPDAED_MEASUREMENT_END           0x01
  58.       #define BH1749NUC_UPDAED_4_CONSECUTIVE             0x02
  59.       #define BH1749NUC_UPDAED_8_CONSECUTIVE             0x03

  60. #define  BH1749NUC_TH_HIGH          0x62
  61. #define  BH1749NUC_TH_LOW           0x63

  62. #define  BH1749NUC_MANUFACTURER_ID  0x92 //only read,the value is 0xE0.
复制代码

4.2、读取设备ID
设备ID一般都是一个固定值,芯片出厂的时候已经固化在芯片里面了,只读,可用于检测I2C通信是否正常、检测芯片是否存在。
  1. bool BH1749NUCCheck(void)
  2. {
  3.   uint8 chip_id=0;
  4.   
  5.   chip_id=BH1749NUC_ReadRegU8(BH1749NUC_MANUFACTURER_ID);
  6.   
  7.   if(chip_id==0xE0)
  8.   {
  9.     return true;
  10.   }
  11.   else
  12.   {
  13.     return false;
  14.   }
  15. }
复制代码

4.3、初始化、参数设定
  1. void BH1749NUCInit(void)
  2. {
  3.    BH1749NUC_WriteRegU8(BH1749NUC_SYSTEM_CONTROL,BH1749NUC_SOFEWARE_RESET_DONE);  //复位初始化:软件复位
  4.    
  5. BH1749NUC_WriteRegU8(BH1749NUC_MODE_CONTROL1,BH1749NUC_IR_GAIN_X1|BH1749NUC_RGB_GAIN_X1|BH1749NUC_MEASUREMENT_MODE_35MS);  //模式控制寄存器1:红外增益设置为1,RGB增益设置为1,测量时间设置为35ms
  6.    
  7.    BH1749NUC_WriteRegU8(BH1749NUC_MODE_CONTROL2,BH1749NUC_RGB_EN_ACTIVE);  //模式控制寄存器2:使能RGB测量
  8. }
复制代码

4.4、读取数据
  1. void BH1749NUCRead(void)
  2. {
  3.    uint16 red, green, blue,ri, green2;
  4.    
  5.    red=BH1749NUC_ReadRegU16(BH1749NUC_RED_DATA_L);
  6.    green=BH1749NUC_ReadRegU16(BH1749NUC_GREEN_DATA_L);   
  7.    blue=BH1749NUC_ReadRegU16(BH1749NUC_BLUE_DATA_L);   
  8.    ri=BH1749NUC_ReadRegU16(BH1749NUC_IR_DATA_L);
  9.    green2=BH1749NUC_ReadRegU16(BH1749NUC_GREEN2_DATA_L);
  10.    
  11.    printf(“red=%d, green=%d, blue=%d, ri=%d, green2=%d\r\n\r\n”);
  12. }
复制代码


图片5.png
用标准的颜色,测试了一下发现,数据有变化,但是与所选取的颜色的rgb值还是蛮大的。
greengreen2寄存器读出来的数据,基本差不多,不知道green2寄存器的意义何在?
RGB的是0-255,既就是8位的,而上面的寄存器是16位的,似乎对上不?
这里就与设置的增益有关,芯片是支持两种增益,132,增益设置为1的时候,读出来直接是RGB值;增益设置为32的时候,读出来的数值,需要乘以分辨率0.0125lx/count,转化为RGB值。












回复

使用道具 举报

该用户从未签到

16

主题

1521

帖子

0

精华

论坛元老

最后登录
2022-1-20
发表于 2020-3-11 01:12:29 | 显示全部楼层
感谢分享
回复

使用道具 举报

该用户从未签到

1347

主题

6659

帖子

0

精华

论坛元老

最后登录
2020-7-26
发表于 2020-5-6 14:09:05 | 显示全部楼层
这个传感器还有其他特点优势吗
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

963

帖子

0

精华

金牌会员

最后登录
2022-1-20
发表于 2022-1-12 20:38:09 | 显示全部楼层
控制板是怎样的?也想做一个识别产品LED灯的案例
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /2 下一条

Archiver|手机版|小黑屋|罗姆半导体技术社区

GMT+8, 2022-1-21 14:27 , Processed in 0.060794 second(s), 15 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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