微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > BH1750光照传感器组网实验就不行了,单独一个就可以,求救啊

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

时间:10-02 整理:3721RD 点击:
本人在做毕业设计,里面有用到通过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而已
各位大神有做过的求帮忙啊

有没有按照时序来,我调过罗姆的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;
}

你最好看下时序,延时的话,你最好拿协议栈的MicroWait(1); 定时更准些。

亲 你的源代码能发我一份吗 同样在做 邮箱787357610@qq.com

也可以给我发一份吗 我也在做 邮箱740294502@qq.com

楼主,源码能发我一份吗?最近我也在做用BH1750采集光强,我数据接收后是一堆乱码,能发我一份资料吗?qq 550813617qq.com,非常谢谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top