9102|8

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

BH1750光照传感器组网实验就不行了,单独一个就可以,求救啊 [复制链接]

1芯积分
本人在做毕业设计,里面有用到通过CC2530跟BH1750光照传感器通信得到光照强度。
在单独一个CC2530时就可以,然后在组网点对点传输时就不行了,总是出现65535/1.2=54621这个值,如图

这是在SampleApp.c里的
void SampleApp_Init( uint8 task_id )
{
  SampleApp_TaskID = task_id;
  SampleApp_NwkState = DEV_INIT;
  SampleApp_TransID = 0;

  MT_UartInit();                  //串口初始化
  MT_UartRegisterTaskID(task_id); //注册串口任务
  P0SEL &= 0x7f;                  //P0_7配置成通用io
  //初始化BH1750FVI
  //SCL引脚(通用IO,输出)
  P1SEL &= ~0x10;  
  P1DIR |= 0x10;  
  //SDA引脚(通用IO,输出)
  P1SEL &= ~0x20;  
  P1DIR |= 0x20;       
  IIC_SCL = 1;
  IIC_SDA = 1;

。。。。。
}
void SampleApp_Send_P2P_Message( void )
{
  byte temp[3], humidity[3], strTemp[7];
  byte lux[9],strlux[9];
  byte adc[9],stradc[9];
  unsigned int  temp1;
  unsigned int val, BH_data;
  float BH_temp=0.0;
  float temp2=0.0;
  float vol=0.0;            

  BH1750_Write(0x01);                                   //上电
  BH1750_Write(0x10);                                          //设置为高分辨率模式

//读取测量到的光强值
  BH_data = BH1750_Read_Data();
  BH_temp = (float)(BH_data)/1.2;
  val = BH_temp;  
  lux[0]='0'+(val/10000);
  lux[1]='0'+((val%10000)/1000);
  lux[2]='0'+(((val%10000)%1000)/100);
  lux[3]='0'+((((val%10000)%1000)%100)/10);
  lux[4]='0'+((((val%10000)%1000)%100)%10);
  lux[5]='L';
  lux[6]='u';
  lux[7]='x';
  lux[8]='\0';
  //将数据整合后方便发给协调器显示
  osal_memcpy(strlux, lux, 9);
  //获得的温湿度通过串口输出到电脑显示
  HalUARTWrite(0, "Beam:", 5);
  HalUARTWrite(0, strlux, 9);
  HalUARTWrite(0, "\n",1);
  if ( AF_DataRequest( &SampleApp_P2P_DstAddr, &SampleApp_epDesc,
                       SAMPLEAPP_P2P_CLUSTERID1,
                       9,
                       strlux,
                       &SampleApp_TransID,
                       AF_DISCV_ROUTE,
                       AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
  {
  }
  else
  {
    // Error occurred in request to send.
  }

。。。。
}
原本I2C.c的延时函数也改成了组网的延时函数
//延时函数
void DELAY_US(unsigned int Xus) //X us延时
{
  while(Xus--)
  {
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
  }
}

时序方面跟单独一个CC2530是一样的,子函数就改了这个NOP而已
各位大神有做过的求帮忙啊

此帖出自RF/无线论坛

最新回复

背景:BH1750这颗IC没用过 指导思路:      1) 如果你能在不传输节点时读取正确,说明这个芯片的驱动没有问题      2) 如果是在传输中有问题,那就要找传输过程中是不是哪个地方转换错了,或者变量长度不够而溢出了,所以只保留了最大值,可以做一下测试,在光照减弱到最小时,看值有没有变化  详情 回复 发表于 2018-8-10 09:39
点赞 关注
 

回复
举报

2144

帖子

3

TA的资源

五彩晶圆(中级)

沙发
 
有没有按照时序来,我调过罗姆的BH1721

给个函数你参考下
/**
* @brief  BH1721_Exec_OpeCode
* @note   BH1721执行操作码
* @param  None
* @retval None
*/
uint8
BH1721_Exec_OpeCode(uint8 Opecode)
{
        if ( !HAL_I2C_Start() ) {
        return 0;
    }
   
    HAL_I2C_TxByte((BH1721_I2C_ADDR << 1) & ~0x01);
    if ( !HAL_I2C_WaitAck() ) {
        HAL_I2C_Stopd();
        return 0;
    }
   
        HAL_I2C_TxByte(Opecode);
        HAL_I2C_WaitAck();

    HAL_I2C_Stopd();
        return 1;
}
此帖出自RF/无线论坛
个人签名电工
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

板凳
 
你最好看下时序,延时的话,你最好拿协议栈的MicroWait(1);  定时更准些。
此帖出自RF/无线论坛
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
亲 你的源代码能发我一份吗 同样在做 邮箱787357610@qq.com
此帖出自RF/无线论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
也可以给我发一份吗   我也在做   邮箱740294502@qq.com
此帖出自RF/无线论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

6
 
楼主,源码能发我一份吗?最近我也在做用BH1750采集光强,我数据接收后是一堆乱码,能发我一份资料吗?qq 550813617qq.com,非常谢谢
此帖出自RF/无线论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
你好,,请问你的BH1750读出数据来了吗?我的加入协议栈之后也是读出54612来
此帖出自RF/无线论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

8
 
楼主,源码能发我一份吗?最近我也在做用BH1750采集光强,我数据接收后是一堆乱码,能发我一份资料吗? 513673326@qq.com,非常谢谢
此帖出自RF/无线论坛
 
 
 

回复

1368

帖子

6

TA的资源

版主

9
 
背景:BH1750这颗IC没用过
指导思路:
     1) 如果你能在不传输节点时读取正确,说明这个芯片的驱动没有问题
     2) 如果是在传输中有问题,那就要找传输过程中是不是哪个地方转换错了,或者变量长度不够而溢出了,所以只保留了最大值,可以做一下测试,在光照减弱到最小时,看值有没有变化
此帖出自RF/无线论坛
个人签名专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表