专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
有哪位大神做过CC1101的WOR功能?
2019-07-21 00:46
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
9151
12
1540
本人在做CC1101的项目,由于接收端要做低功耗处理。看到CC1101有WOR功能,所以就想用这个功能达到低功耗的目的。但是进入WOR模式后,很难接收,或者过很长一段时间才能接收,如果缩短睡眠时间,功耗增大很多。
本人也试过隔一段时间恢复CC1101,但是功耗并不理想,因为接收模式耗电太大了。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
ryanwong
1楼-- · 2019-07-21 02:36
好了,前文挖了不少坑,现在要填一下了。
1、说到WOR配置时,详细说明了开发步骤。
其实,这个开发步骤并不是必要的,或者不是一定要遵循的。我们开发产品的,第一个考虑的时低功耗问题,如果你的产品做得再牛,体验感再好,
只要功耗没有将下来,都没用,除非你的产品能毁灭地球。
所以我们先确定的是占空比,为了达到最低功耗,占空比选择0.195%。发送周期并不关心,目前发送周期最短5ms。
显然,根据上文给出的链接介绍,接收周期要比发送周期小很多。
2、现在说一下
WriteReg(CC1101_MCSM2, 0x13);的伏笔
如果这里填0x06的话,功耗还是会在40uA左右。和链接的文章计算的差不多。
我觉得仍然很大,于是又寻找了各种文章,各种人,供应商,或者淘宝卖家。这里重点批评淘宝卖家,我把程序发给他,让他看一下配置,结果我怀疑他根本
没看,来来回回一直和我说是不是哪里漏电。拜托,我的单片机连接模块的引脚都模拟输入了(除了CS,和GDO0),只接了CC1101,其它什么都没接,哪来的漏电。
问我哪里买的模块,我说另一家的,然后就不停攻击那家公司。把自己的产品说得很NB。其实都一样。
好了,对不起,不废话了。
我在数据手册找到了CC1101电气特性。
画红框的那里,8.8uA。
具体我不翻译了,根据提示,我将MCSM2.RX_TIME_RSSI 置1。这里简单解释一下,当8个电磁波周期内没有接收到数据,那么判断为接收超时(翻译不准确),这个位是在WOR功能下,
变相地,极限地 缩短接收时间,所以功耗才能降到8uA。选择配置为0x13,纯属是应为体验了一下接收效果,0x13是最佳的。(后面这一句话不是很精确)
这里再次批评淘宝卖家,还说什么,正品的芯片功耗能到达5uA,我休眠模式下还1uA不到呢?数据手册写明是8uA,蒙谁呢?话说,我还真被他蒙了,让我私下给他转30,两个CC1101,包邮。
结果我到他店里看的时候,是另一个版本的模块,两个模块加起来,把运费也加起来,也不过20块。哼,坑货。
加载中...
正点原子
2楼-- · 2019-07-21 04:05
精彩回答 2 元偷偷看……
加载中...
ryanwong
3楼-- · 2019-07-21 06:07
正点原子 发表于 2018-11-23 02:17
帮顶
原子哥,为什么你帮顶后又把我的贴子删掉?
加载中...
ryanwong
4楼-- · 2019-07-21 06:29
正点原子 发表于 2018-11-23 02:17
帮顶
不好意思没看到。。。
加载中...
ryanwong
5楼-- · 2019-07-21 09:21
精彩回答 2 元偷偷看……
加载中...
ryanwong
6楼-- · 2019-07-21 15:10
本帖最后由 ryanwong 于 2018-12-4 20:38 编辑
对不起,晚了点。
首先:由于篇幅的原因,我只把CC1101的某些配置发出来
把基本配置上传上来先
寄存器配置:
static const unsigned char CC1101InitData[30][2]=
{
{CC1101_IOCFG0, 0x06}, //这里是GDO0的收到数据就产生中断的配置
{CC1101_FIFOTHR, 0x47},
{CC1101_PKTCTRL0, 0x05},
{CC1101_CHANNR, 0x01},
{CC1101_FSCTRL1, 0x0B},
{CC1101_FSCTRL0, 0x00}, // Frequency synthesizer control.
{CC1101_FREQ2, 0x10},
{CC1101_FREQ1, 0xA7},
{CC1101_FREQ0, 0x62},
{CC1101_MDMCFG4, 0x7B}, //这里比较重要的是 MDMCFG4 - 0,这几个寄存器,其实我不知道这是什么意思,但是这样配置的话,发送端发送周期会下降至5ms
{CC1101_MDMCFG3, 0x83}, //按照其他文章配置的话,发送周期将会到达100ms,发送周期太长的话,接收端不好接收数据
{CC1101_MDMCFG2, 0x93}, //这里的“发送周期”不是指连续发送,而是每次只发几个字节,用来唤醒CC1101。(这里表述不清楚,真是不好意思)
{CC1101_MDMCFG1, 0x23}, // Modem configuration. //其余的和网上的配置差不多
{CC1101_MDMCFG0, 0xA4}, // Modem configuration.
{CC1101_DEVIATN, 0x15},
{CC1101_FREND1, 0x56}, // Front end RX configuration.
{CC1101_FREND0, 0x10}, // Front end RX configuration.
{CC1101_MCSM0, 0x18},
{CC1101_FOCCFG, 0x16},
{CC1101_BSCFG, 0x6C}, // Bit synchronization Configuration.
{CC1101_AGCCTRL2, 0x43}, // AGC control.
{CC1101_AGCCTRL1, 0x40}, // AGC control.
{CC1101_AGCCTRL0, 0x91}, // AGC control.
{CC1101_FSCAL3, 0xA9},
{CC1101_FSCAL2, 0x0A},
{CC1101_FSCAL1, 0x00},
{CC1101_FSCAL0, 0x11},
{CC1101_TEST2, 0x81},
{CC1101_TEST1, 0x35},
{CC1101_MCSM1, 0x3B},
初始化函数: //以下是初始化函数的操作,值得注意的是这里配置了地址。一般CC1101选择信道就可以了。我也是跟着别人配置的
void cc1101Init(void)
{
unsigned char i;
SPI_GPIO_Init();
Reset();
for(i=0;i<0xff;i++);
for(i=0;i<0xff;i++);
for( i = 0; i < 30; i++ ) //28
{
WriteReg(CC1101InitData
[0],CC1101InitData
[1]);
}
//cc1101_mode(RX_MODE);
CC1101SetAddress( 0x05, BROAD_0AND255 );
CC1101SetSYNC( 0x8799 );
WriteReg(CC1101_MDMCFG1, 0x72); //Modem Configuration
WriteMultiReg(CC1101_PATABLE, PaTabel, 8 );
i = ReadStatus( CC1101_PARTNUM );//for test, must be 0x80
i = ReadStatus( CC1101_VERSION );//for test, refer to the datasheet
CC1101SetTRMode(RX_MODE);
}
unsigned char PaTabel[8] = { 0xc0, 0xC8, 0x84, 0x60, 0x68, 0x34, 0x1D, 0x0E};
加载中...
1
2
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
1、说到WOR配置时,详细说明了开发步骤。
其实,这个开发步骤并不是必要的,或者不是一定要遵循的。我们开发产品的,第一个考虑的时低功耗问题,如果你的产品做得再牛,体验感再好,
只要功耗没有将下来,都没用,除非你的产品能毁灭地球。
所以我们先确定的是占空比,为了达到最低功耗,占空比选择0.195%。发送周期并不关心,目前发送周期最短5ms。
显然,根据上文给出的链接介绍,接收周期要比发送周期小很多。
2、现在说一下WriteReg(CC1101_MCSM2, 0x13);的伏笔
如果这里填0x06的话,功耗还是会在40uA左右。和链接的文章计算的差不多。
我觉得仍然很大,于是又寻找了各种文章,各种人,供应商,或者淘宝卖家。这里重点批评淘宝卖家,我把程序发给他,让他看一下配置,结果我怀疑他根本
没看,来来回回一直和我说是不是哪里漏电。拜托,我的单片机连接模块的引脚都模拟输入了(除了CS,和GDO0),只接了CC1101,其它什么都没接,哪来的漏电。
问我哪里买的模块,我说另一家的,然后就不停攻击那家公司。把自己的产品说得很NB。其实都一样。
好了,对不起,不废话了。
我在数据手册找到了CC1101电气特性。
画红框的那里,8.8uA。
具体我不翻译了,根据提示,我将MCSM2.RX_TIME_RSSI 置1。这里简单解释一下,当8个电磁波周期内没有接收到数据,那么判断为接收超时(翻译不准确),这个位是在WOR功能下,
变相地,极限地 缩短接收时间,所以功耗才能降到8uA。选择配置为0x13,纯属是应为体验了一下接收效果,0x13是最佳的。(后面这一句话不是很精确)
这里再次批评淘宝卖家,还说什么,正品的芯片功耗能到达5uA,我休眠模式下还1uA不到呢?数据手册写明是8uA,蒙谁呢?话说,我还真被他蒙了,让我私下给他转30,两个CC1101,包邮。
结果我到他店里看的时候,是另一个版本的模块,两个模块加起来,把运费也加起来,也不过20块。哼,坑货。
原子哥,为什么你帮顶后又把我的贴子删掉?
不好意思没看到。。。
对不起,晚了点。
首先:由于篇幅的原因,我只把CC1101的某些配置发出来
把基本配置上传上来先
寄存器配置:
static const unsigned char CC1101InitData[30][2]=
{
{CC1101_IOCFG0, 0x06}, //这里是GDO0的收到数据就产生中断的配置
{CC1101_FIFOTHR, 0x47},
{CC1101_PKTCTRL0, 0x05},
{CC1101_CHANNR, 0x01},
{CC1101_FSCTRL1, 0x0B},
{CC1101_FSCTRL0, 0x00}, // Frequency synthesizer control.
{CC1101_FREQ2, 0x10},
{CC1101_FREQ1, 0xA7},
{CC1101_FREQ0, 0x62},
{CC1101_MDMCFG4, 0x7B}, //这里比较重要的是 MDMCFG4 - 0,这几个寄存器,其实我不知道这是什么意思,但是这样配置的话,发送端发送周期会下降至5ms
{CC1101_MDMCFG3, 0x83}, //按照其他文章配置的话,发送周期将会到达100ms,发送周期太长的话,接收端不好接收数据
{CC1101_MDMCFG2, 0x93}, //这里的“发送周期”不是指连续发送,而是每次只发几个字节,用来唤醒CC1101。(这里表述不清楚,真是不好意思)
{CC1101_MDMCFG1, 0x23}, // Modem configuration. //其余的和网上的配置差不多
{CC1101_MDMCFG0, 0xA4}, // Modem configuration.
{CC1101_DEVIATN, 0x15},
{CC1101_FREND1, 0x56}, // Front end RX configuration.
{CC1101_FREND0, 0x10}, // Front end RX configuration.
{CC1101_MCSM0, 0x18},
{CC1101_FOCCFG, 0x16},
{CC1101_BSCFG, 0x6C}, // Bit synchronization Configuration.
{CC1101_AGCCTRL2, 0x43}, // AGC control.
{CC1101_AGCCTRL1, 0x40}, // AGC control.
{CC1101_AGCCTRL0, 0x91}, // AGC control.
{CC1101_FSCAL3, 0xA9},
{CC1101_FSCAL2, 0x0A},
{CC1101_FSCAL1, 0x00},
{CC1101_FSCAL0, 0x11},
{CC1101_TEST2, 0x81},
{CC1101_TEST1, 0x35},
{CC1101_MCSM1, 0x3B},
初始化函数: //以下是初始化函数的操作,值得注意的是这里配置了地址。一般CC1101选择信道就可以了。我也是跟着别人配置的
void cc1101Init(void)
{
unsigned char i;
SPI_GPIO_Init();
Reset();
for(i=0;i<0xff;i++);
for(i=0;i<0xff;i++);
for( i = 0; i < 30; i++ ) //28
{
WriteReg(CC1101InitData[0],CC1101InitData[1]);
}
//cc1101_mode(RX_MODE);
CC1101SetAddress( 0x05, BROAD_0AND255 );
CC1101SetSYNC( 0x8799 );
WriteReg(CC1101_MDMCFG1, 0x72); //Modem Configuration
WriteMultiReg(CC1101_PATABLE, PaTabel, 8 );
i = ReadStatus( CC1101_PARTNUM );//for test, must be 0x80
i = ReadStatus( CC1101_VERSION );//for test, refer to the datasheet
CC1101SetTRMode(RX_MODE);
}
unsigned char PaTabel[8] = { 0xc0, 0xC8, 0x84, 0x60, 0x68, 0x34, 0x1D, 0x0E};
一周热门 更多>