嵌入式专题

返回   利尔达技术论坛 > 【B】技术在线:排难解疑 技术讨论 > 低功耗 RF
  
注册账号 论坛帮助 会员列表 日历事件 搜索论坛 今日新帖 标记所有讨论区已读

发表新主题 回复
 
主题工具 主题评分 显示模式
旧 2010-02-07, 15:32   #1
lukunnr
级别:0 | 在线时长:2小时 | 升级还需:3小时
初级会员
 
注册日期: Dec 2009
帖子: 4
精华: 0
现金: 125 金币
资产: 125 金币
声望: 10 lukunnr 声名狼藉
请教CC2500关于切换频点接收数据的问题

大家好,我在使用CC2500的过程中出现了一个问题,至今没有办法解决,请各位帮我看看

我的要求是这样的.我使用了4个cc2500的模块分别在 CHANNR=1,3,5,7 (其余配置一样)这几个频点连续发送数据

SIDLE; //进入空闲模式
SFTX; //冲洗发送缓冲
cc2500WriteTxPayload(p); //写入要发送的数据
while(1) //因为要使用最快和紧凑的发送速度,因此在这里使用死循环,不知道这样是不是最快的方法,如果有更快的方法,请大家告诉我
{
STX; //发送数据
while(cc2500_SO_PIN==1); //检测引脚状态
while(cc2500_SO_PIN==0);

SIDLE; //进入空闲模式
SFTX; //冲洗发送缓冲
cc2500WriteTxPayload(p); //写入要发送的数据
}

其中,第一个模块发送的数据为 07 11 22 33 44 55 11
第二个模块发送的数据为 07 11 22 33 44 55 22
第三个模块发送的数据为 07 11 22 33 44 55 33
第四个模块发送的数据为 07 11 22 33 44 55 44

然后使用一个cc2500在CHANNR=1,3,5,7 (其余配置一样)这几个频点上接受,每个频点上接受一定时间,大概示例如下

channr_No=1;
start_scan:
for(i=0;i<2000;i++) //2000次尝试
{
if(cc2500Scanf) //rx是否接收到数据
{ //接受到数据
将接收到的数据放入rx_buff //这里有个断点
if(channr_No==7){ channr_No=1; } //如果频点为7,则将频点跳回到1
esle{channr_No+=2;} //否则,跳到下一个频点接收数据
set_channl_to(channr_No); //切换频点
goto start_scan; //接收到数据了,不需要才循环了,立即开始下个频点的扫描
}
}

//能够执行到这里,说明2000次循环已经完毕,仍然没有接收到数据,超时了,则自动跳转到下一个频点开始扫描
if(channr_No==7){ channr_No=1; } //如果频点为7,则将频点跳回到1
esle{channr_No+=2;} //否则,跳到下一个频点接收数据
set_channl_to(channr_No); //切换频点
goto start_scan; //开始扫描

下面是切换频点的函数
void set_channr_to_x(unsigned char channl_num)
{
//直接使用CHANNR寄存器的地址进行更改
cc2500ConfigRegister(ADDR_CHANNR,channl_num);
}

下面是数据接收检测的函数
unsigned char cc2500Scanf(unsigned char* p)
{
if(cc2500_GDO2_PIN==1){ //为1的时候表示没有数据接收到
return(0);} //返回通知调用函数没有接收到数据
cc2500ReadRxPayload(p,PKTLEN+3); //读出数据以及RSSI,LQI等
cc2500Strobecommand(cc2500_STROBE_SIDLE(0)); //进入空闲模式
cc2500Strobecommand(cc2500_STROBE_SFRX(0)); //冲洗接收缓冲
cc2500Strobecommand(cc2500_STROBE_SRX(0)); //进入接收状态
return(1); //返回通知调用函数已经接收到数据
}

目前有两个问题:
1.有什么方法可以让那4个发射的函数发射数据速度更快些(目前使用的是MSK 500byte),能不能不进入空闲模式和清空发送FIFO,因为我发送的一直是同样的数据
2.我发现我在频点1接收到了数据(07 11 22 33 44 55 11),可以知道这个是1好发射机的,然后我在频点3依然接收到了数据(07 11 22 33 44 55 11),实际数据应该是(07 11 22 33 44 55 22 啊???这里是怎么回事),但是RSSI和频点1的RSSI不一样, 在频点5接收到了数据(07 11 22 33 44 55 22),这里应该是(07 11 22 33 44 55 33),在频点7接收到数据(07 11 22 33 44 55 33) 应该是(07 11 22 33 44 55 44) ,经过观察的结果是,在切换频点后,他总是会接收到上一个频点接收到的数据,不管调用多少次SFRX指令,并且如果将切换的频点设置为一个没有数据的频点(例如频点20),它仍然会接收到上一个频点接收到的同样的数据,请问这是怎么回事,用没有什么解决方法?
lukunnr 当前离线  
回复时引用此帖
旧 2010-02-09, 15:46   #2
icyan
级别:3 | 在线时长:21小时 | 升级还需:11小时级别:3 | 在线时长:21小时 | 升级还需:11小时级别:3 | 在线时长:21小时 | 升级还需:11小时
一般会员
 
注册日期: Aug 2009
帖子: 80
精华: 0
现金: 635 金币
资产: 635 金币
声望: 10 icyan 声名狼藉
不知楼主注意了么 应该只能在IDLE状态下 改变寄存器的值吧
icyan 当前离线  
回复时引用此帖
发表新主题 回复


主题: 请教CC2500关于切换频点接收数据的问题 回复主题
标题:
  
信息:


当前查看此主题的会员: 1 (0 位会员和 1 位游客)
 
主题工具
显示模式 对此主题评分
对此主题评分:

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

论坛启用 BB 代码
论坛启用 表情图标
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
论坛跳转


所有时间均为北京时间。现在的时间是 14:52


版权所有(C)2005-2008 利尔达科技有限公司 电话:86-571-88800000 传真:86-571-89908688 邮编:310011
地址:杭州市登云路425号利尔达科技大厦 E-mail: service@lierda.com
浙ICP备05004122号

利尔达