注册/登录
论坛 > 板卡试用区
发帖|
看3047|回2|收藏
小马哥-1650185 看全部
2018-11-24 18:02:39
本帖最后由 小马哥-1650185 于 2018-11-24 18:28 编辑

           BH1749NUC是一种带有I2C总线接口的数字彩色传感器IC。这种集成电路感知红色、绿色、蓝色RGB)和红外线,并将它们转换成数字值,能够准确地获得环境光的照度和色温。适用于电视、手机、平板电脑LCD背光的调节。


典型电路:
2.jpg

封装及引脚
3.jpg


模块电路:
1.jpg


同样是IIc 接口,只需要配置寄存器,然后读取寄存器就行

寄存器列表
4.jpg

数据寄存器保存了RGB的数据,16bit
5.jpg

芯片初始化代码:

代码:

  1. reg = BH1749NUC_MODE_CONTROL1_VAL;
  2.   rc = write(BH1749NUC_MODE_CONTROL1, ®, sizeof(reg));
  3.   if (rc != 0) {
  4.     Serial.println(F("Can't write BH1749NUC MODE_CONTROL1 register"));
  5.     return (rc);
  6.   }

  7.   reg = BH1749NUC_MODE_CONTROL2_VAL;
  8.   rc = write(BH1749NUC_MODE_CONTROL2, ®, sizeof(reg));
  9.   if (rc != 0) {
  10.     Serial.println(F("Can't write BH1749NUC MODE_CONTROL2 register"));
  11.     return (rc);
  12.   }


获取传感器颜色数据:

代码:

  1. byte BH1749NUC::get_rawval(unsigned char *data)
  2. {
  3.   byte rc;

  4.   rc = read(BH1749NUC_RED_DATA_LSB, data, GET_BYTE_RED_TO_GREEN2);
  5.   if (rc != 0) {
  6.     Serial.println(F("Can't get BH1749NUC RGB, IR and GREEN2 value"));
  7.   }

  8.   return (rc);
  9. }

  10. byte BH1749NUC::get_val(unsigned short *data)
  11. {
  12.   byte rc;
  13.   unsigned char val[GET_BYTE_RED_TO_GREEN2];

  14.   rc = get_rawval(val);
  15.   if (rc != 0) {
  16.     return (rc);
  17.   }

  18.   //val[6] and val[7] are RESERVED Register Value
  19.   data[0] = ((unsigned short)val[1] << 8) | val[0];
  20.   data[1] = ((unsigned short)val[3] << 8) | val[2];
  21.   data[2] = ((unsigned short)val[5] << 8) | val[4];
  22.   data[3] = ((unsigned short)val[9] << 8) | val[8];
  23.   data[4] = ((unsigned short)val[11] << 8) | val[10];

  24.   return (rc);
  25. }

然后可以直接使用库读取

代码:

  1. rc = bh1749nuc.get_val(color);

读取结果如下
6.jpg
白色LED强光手电照射 数据基本上都是0xFFFF

7.jpg

漆黑环境下都是0:
8.jpg

下面来看下曲线分析:
9.jpg

再来个动图效果

1543055273978mz啊.gif

stary666 看全部
2018-11-25 00:09:01
看看 logo.png
feixiang20 看全部
2018-11-25 19:10:01
看看了

罗姆半导体技术社区

Powered by Discuz! X3.4

首页|标准版|触屏版|电脑版