搜索
bottom↓
回复: 2

MSP430 Launchpad BH1750光照传感器

[复制链接]

出0入0汤圆

发表于 2014-9-29 10:29:27 | 显示全部楼层 |阅读模式
MCU:MSP430 Launchpad MSP430G2452

分为:BH1750.c  BH1750.h  iic.c  iic.h  main.c 工程见附件
  1. //******************************************************************************
  2. //MCU              :  MSP430G2452 (MSP430 Launchpad)
  3. //Function    :  Ambient Light Sensor IC:BH1750FVI(罗姆) C Code driver
  4. //Sub-Function:  BH1750.c
  5. //Platform    :  IAR FOR MSP430 V5.50.2
  6. //Autor       :  BY ding
  7. //Versio      :  Demo V1.0       
  8. //Date        :  2014-09-14
  9. //Note        :  GY-30 Light module www.taobao.com
  10. //******************************************************************************
  11. //----------------BH1750 I/O Define -------------------/
  12. //SCL-->P2.1 define I2C Clock Pin
  13. //SDA-->P2.0 define I2C Data Pin
  14. //3.3V supply voltage

  15. #include "msp430g2452.h" //MSP430 Library
  16. #include "BH1750.h"      //Light Sensor
  17. #include "iic.h"         //I2C bus Protocol

  18. #define uint unsigned int

  19. //宏定义
  20. unsigned char BUF[2];//接收数据缓存区
  21. float light;        //光照强度

  22. //--------------------------------------------------------------------------
  23. //I2C总线上的从地址,根据ADDR引脚接法不同而修改
  24. //接GND时为0x46(写操作),0x47(读操作)
  25. //接VCC时为0xB8(写操作),0xB9(读操作)
  26. //本测试 ADDR接GND
  27. //--------------------------------------------------------------------------
  28. #define        W_DEVICE_ADR 0x46         //BH1750的写地址    A0 A1 A2  均为0
  29. #define        R_DEVICE_ADR 0x47          //BH1750的读地址    A0 A1 A2  均为0

  30. //**********************************************************************************
  31. //延时 ms:延时的毫秒数
  32. //**********************************************************************************
  33. void DelayaMs(unsigned int ms)
  34. {
  35.       unsigned int i,j;                               
  36.       for(i=0;i<ms;i++)
  37.       {                       
  38.         for(j=0;j<115;j++)                       
  39.         {;}
  40.     }
  41. }
  42. //**********************************************************************************
  43. //向BH1750中写多个字节
  44. //psrc_data:指向要写入数据数组的指针
  45. //adr:BH1750中要写入数据的首地址
  46. //nbyte:写入的字节数
  47. //返回值:  0:执行完毕;1:执行出现错误
  48. //**********************************************************************************
  49. unsigned char WriteBH1750(unsigned char adr,unsigned char nbyte)
  50. {
  51.     for(;nbyte!=0;nbyte--)
  52.      {
  53.         Start();                        //启动I2C总线
  54.         Write8Bit(W_DEVICE_ADR);        //写芯片地址以及确定下面执行写操作
  55.         if(CheckAck()==1)                //检验应答
  56.                 return 1;                //若应答错误,则退出函数,返回错误
  57.         Write8Bit(adr);                        //写地址
  58.         if(CheckAck()==1)
  59.                 return 1;
  60.         adr++;                                //地址加1
  61.         Stop();                                //停止IIC总线
  62.         DelayaMs(50);                        //写入延时
  63.         }
  64.         return 0;
  65. }
  66. //**********************************************************************************
  67. //从BH1750中读一个字节
  68. //pdin_data:指向要保存读出数据的变量的指针
  69. //adr:BH1750中要读出数据的地址
  70. //返回值:  0:执行完毕;1:执行出现错误
  71. //**********************************************************************************
  72. unsigned char ReadBH1750(unsigned char *pdin_data,unsigned char adr)
  73. {
  74.         Start();                        //启动IIC总线
  75.         Write8Bit(W_DEVICE_ADR);        //写芯片地址以及确定下面执行写操作
  76.         if(CheckAck()==1)
  77.                 return 1;
  78.         Write8Bit(adr);                        //写对芯片操作的地址
  79.         if(CheckAck()==1)
  80.                 return 1;

  81.         Start();                        //再次启动IIC总线
  82.         Write8Bit(R_DEVICE_ADR);        //写芯片地址以及确定下面执行读操作
  83.         if(CheckAck()==1)
  84.                 return 1;
  85.         *pdin_data=Read8Bit();                //读数据,存入pdin_data所指的存储器中
  86.         NoAck();                        //IIC无应答操作
  87.         Stop();                                //停止IIC总线

  88.         return 0;
  89. }
  90. //**********************************************************************************
  91. //从BH1750读多个字节
  92. //返回值:  0:执行完毕;1:执行出现错误
  93. //**********************************************************************************
  94. unsigned char ReadBH1750Seq()
  95. {
  96.         Start();                  //启动IIC总线
  97.         Write8Bit(R_DEVICE_ADR);  //写芯片地址以及确定下面执行读操作
  98.         if(CheckAck()==1)
  99.                 return 1;
  100.         for(int i=0;i<2;i++)
  101.         {
  102.           BUF[i]=Read8Bit();
  103.           if(i==2)
  104.           {
  105.             NoAck();       
  106.           }
  107.           else
  108.           {
  109.             Ack();
  110.           }
  111.         }
  112.         Stop();
  113.         return 0;
  114. }
  115. //**********************************************************************************
  116. //数据合成,换算
  117. //**********************************************************************************
  118. void Calc_BH1750()
  119. {  
  120.     unsigned int dis_data;
  121.     dis_data=BUF[0];                          
  122.     dis_data=(dis_data<<8)+BUF[1]; //把数据高、低8位数据拼在一起,即光照数据
  123.     light=(float)dis_data/1.2;           //1.2是计算照度时的固定系数
  124. }
  125. //**********************************************************************************
  126. //测量光照
  127. //**********************************************************************************
  128. void Light_BH1750()
  129. {
  130.        
  131.           InitI2C();            //初始化I2C总线
  132.         WriteBH1750(0x01,1);//Power on
  133.         WriteBH1750(0x10,1);//Continuously H-resolution mode
  134.         DelayaMs(250);
  135.         ReadBH1750Seq();
  136.         Calc_BH1750();
  137. }
复制代码



  1. //******************************************************************************
  2. //MCU              :  MSP430G2452 (MSP430 Launchpad)
  3. //Function    :  Ambient Light Sensor IC:BH1750FVI(罗姆) C Code driver
  4. //Sub-Function:  BH1750.h
  5. //Platform    :  IAR FOR MSP430 V5.50.2
  6. //Autor       :  BY ding
  7. //Versio      :  Demo V1.0       
  8. //Date        :  2014-09-14
  9. //Note        :  GY-30 Light module www.taobao.com
  10. //******************************************************************************
  11. #ifndef __BH1750
  12. #define __BH1750


  13. //**********************************************************************************
  14. //延时 ms:延时的毫秒数
  15. //**********************************************************************************
  16. void DelayaMs(unsigned int ms);



  17. //**********************************************************************************
  18. //向BH1750中写多个字节
  19. //psrc_data:指向要写入数据数组的指针
  20. //adr:BH1750中要写入数据的首地址
  21. //nbyte:写入的字节数
  22. //返回值:  0:执行完毕;1:执行出现错误
  23. //**********************************************************************************
  24. unsigned char WriteBH1750(unsigned char adr,unsigned char nbyte);



  25. //**********************************************************************************
  26. //从BH1750中读一个字节
  27. //pdin_data:指向要保存读出数据的变量的指针
  28. //adr:BH1750中要读出数据的地址
  29. //返回值:  0:执行完毕;1:执行出现错误
  30. //**********************************************************************************
  31. unsigned char ReadBH1750(unsigned char *pdin_data,unsigned char adr);



  32. //**********************************************************************************
  33. //从BH1750读多个字节
  34. //返回值:  0:执行完毕;1:执行出现错误
  35. //**********************************************************************************
  36. unsigned char ReadBH1750Seq();


  37. //**********************************************************************************
  38. //数据合成,换算
  39. //**********************************************************************************
  40. void Calc_BH1750();



  41. //**********************************************************************************
  42. //测量光照
  43. //**********************************************************************************
  44. void Light_BH1750();



  45. #endif
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2014-11-18 14:09:09 | 显示全部楼层
保存下,谢谢楼主

出0入0汤圆

发表于 2015-3-25 07:16:36 | 显示全部楼层
谢谢楼主分享!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 02:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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