TI论坛
直播中

杨芳

7年用户 287经验值
私信 关注
[问答]

为什么CC1110睡眠模式下期间传感器数据口耗电很大?

大家好。     之前在Martin的帮助下,改写了用P0_1供电给传感器成功了。非常感谢,但是还有些小问题,可能是我对三太门逻辑还不够了解,虽然已经看了多次(个人不是电器专业)。     我在进入睡眠模式前想关闭两个IO,其中供电脚(P0_1)已经关闭成功,相比在没关闭前万能表读数很大的。另外一个是传感器的数据IO,假如不关闭的话万能表显示会多了2uA左右(我通过直接把数据脚拔出比较得到)。假如我把P0_4 置0来关闭的话,那无论醒来之后我是否再设置为1,读数都不会再正确了。     关键代码如下:
   P0SEL &= ~0x12;   //01 04 standard IO
while(1)[
     //开启供电
     P0_1 = 1;       //01 enable ?
    P0DIR |= 0x02;  //01 输出方向?
     //P0_4 = 1;
    //读取和传输数据
    //read and send to Uart
    //save up power consumption
     P0_1 = 0;     //将P0_1输出关闭
    P0INP = 0;    //移除所有三太?
     //P0_4 = 0;   //企图关闭,但失败。
    //go to sleep 20 seconds , meanwhile measure how much power consumpiton.
]
谢谢

回帖(5)

李子月

2019-9-11 12:44:56
Hi George,
很高兴听您说到用P0_1供电给传感器成功了。
您所说的传感器数据IO是指P0_4吗?
不太明白您所说的 “把P0_4 置0来关闭的话,那无论醒来之后我是否再设置为1,读数都不会再正确了” 是怎么样一个过程,能具体描述一下吗?
你所附的代码来说, P0DIR设置P0_1为输出方向,这个应该要放在P0_1 = 1之前;
另外既然P0DIR |= 0x02,那么P0_4口是仍然保留为输入状态,那么为何会有对P0_4口赋值的语句P0_4 = 1,P0_4 = 0呢?
举报

杨芳

2019-9-11 12:57:54
引用: 60user20 发表于 2019-9-11 12:44
Hi George,
很高兴听您说到用P0_1供电给传感器成功了。
您所说的传感器数据IO是指P0_4吗?

还是Martin,你好。
       文字排版我刚改了下,不好意思。现在好看多了。过程在代码里应该比较清楚了。
       目前我看P0_4在输入状态(睡眠模式里)居然还会消耗电,这个令我无法理解(传感器就三个脚:VCC,地,数据脚——接P0_4)。正因为它耗电,所以我想企图关闭P0_4(使类似常开电路),而设P0_4为0?
       当然设P0_4为0的后果是下一个循环——醒来后,无论我是否再打开P0_4【P0_4=1;】。读数已经不正常了,好像无无法执行成功【P0_4=1;】一样。
举报

李子月

2019-9-11 13:14:35
引用: chm6 发表于 2019-9-11 12:57
还是Martin,你好。
       文字排版我刚改了下,不好意思。现在好看多了。过程在代码里应该比较清楚了。
       目前我看P0_4在输入状态(睡眠模式里)居然还会消耗电,这个令我无法理解(传感器就三个脚:VCC,地,数据脚——接P0_4)。正因为它耗电,所以我想企图关闭P0_4(使类似常开电路),而设P0_4为0 ...

Hi George,
默认来说,输入引脚被配置成带上拉,因此P0_4在输入状态会有点电流也有可能,
可以尝试设置P2INP的第5bit(PDUP0)为1,配置P0_4为带下拉的输入。
从P0DIR来看,你的P0_4设置为输入方向,因此执行P0_4=1或P0_4=0是无效的。
举报

杨芳

2019-9-11 13:32:30
引用: 60user20 发表于 2019-9-11 13:14
Hi George,
默认来说,输入引脚被配置成带上拉,因此P0_4在输入状态会有点电流也有可能,
可以尝试设置P2INP的第5bit(PDUP0)为1,配置P0_4为带下拉的输入。

你好Martin,刚才用你的办法做了实验,结果和之前的没分别,也就是多了2uA.
        你的代码应该就是在睡眠前执行 P2INP |= (0x01 << (0+5));
                                        醒来后执行 P2INP &= ~(0x01 << (0+5)); 对吧?代码我根据hal.h 里模仿
         顺便我也给你看看我的代码,就上边例子多了三行:结果除了头一次读数不正常,其他读数均正常,而且用电量很接近PM2指标。
         NWK_DELAY(800);  //貌似少于800左右读数都不正常了
         P0_4 = 0;           //省2uA左右
         P0DIR &= ~0x02;
        
举报

更多回帖

发帖
×
20
完善资料,
赚取积分