极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 666|回复: 1

针对CM32181数字光线传感芯片开发的Arduino驱动库

[复制链接]
发表于 2017-1-11 15:32:46 | 显示全部楼层 |阅读模式
【背景】
        因工作需要单片机测试Capella Micro公司的CM32181数字环境光线传感器, 一块小PCBA。
此芯片为3.3V供电和3.3V I2C总线,支持polling和interrupt双模式操作。
此芯片在Arduino圈较少见,调试OK后顺便整成了一个Arduino驱动库上传到github上
方便大家使用。很希望以后能有更多的人为Arduino兼容丰富芯片做努力!

【驱动库github地址】
        https://github.com/ShineHua2017/CM32181_arduino
【芯片Data Sheet地址】
        http://www.ibselectronics.com/ibsstore/datasheet/CM32181A3OP.pdf
芯片引脚.PNG
样板线路.PNG
【调试环境】
        UNO x 1
        5V-3.3V IO电平转换板(需要SCL,SDA两路) x 1
        4.7K电阻(SCL,SDA上拉用) x 2
        芯片传感器PCBA的FFC接口转排针小板 x 1

环境搭建.JPG
【示例代码】
  1. /* Arduino demo code for control Light Sensor chip -- CM32181  
  2. * Setup chip on polling mode and read Lux value
  3. *
  4. * The circuit:
  5. *    Ardunio           CM32181
  6. *      SDA    <--->      SDA
  7. *      SCL    <--->      SCL
  8. *      
  9. * library coding based on TWI library
  10. *
  11. * Written by Shine Hua
  12. * Email Address: 20497409@qq.com huashine2013@gmail.com
  13. *  
  14. */

  15. #include <CM32181_arduino.h>
  16. //CM32181 ADDR pin pull high to select address 0x48
  17. //or low to select address 0x10

  18. CM32181 cm(0x10);  //when  ADDR pin connect GND

  19. void setup() {
  20.   
  21.   boolean error = false;
  22.   uint16_t chip_id = 0;
  23.   //uint16_t chip_status = 0;
  24.   
  25.   Serial.begin(9600);
  26.   
  27.   error = cm.init_chip();
  28.   if(error == false){
  29.     Serial.println("Not found chip device or init error!");
  30.     while(true)
  31.     {}
  32.   }
  33.   
  34.   chip_id = cm.get_chip_ID();
  35.   if(chip_id != 0x81){                         //chip ID must be 0x81
  36.     Serial.println("unknown chip!");
  37.     while(true)
  38.     {}
  39.   }
  40.   
  41.   //chip_status = cm.get_chip_status();  
  42.   //error = cm.powerdown_chip();
  43.   //error = cm.powerup_chip();
  44.      
  45. }

  46. void loop() {
  47.   
  48.   uint16_t get_data = cm.read_sensor_raw();       //This is sensor raw data, not lux value. you need trans.
  49.   String desc = "LUX raw data:";
  50.   desc += get_data;
  51.   Serial.println(desc);
  52.   delay(5);
  53.   
  54. }
复制代码

【细节部分】
测试数据.PNG



回复

使用道具 举报

发表于 2017-1-12 16:16:24 | 显示全部楼层
很好的实例,感谢分享
回复 支持 反对

使用道具 举报

高级模式  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2017-10-21 23:39 , Processed in 0.050379 second(s), 7 queries , File On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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