This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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.
}

 谢谢

  • 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呢?

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

  • Hi George,

    默认来说,输入引脚被配置成带上拉,因此P0_4在输入状态会有点电流也有可能,

    可以尝试设置P2INP的第5bit(PDUP0)为1,配置P0_4为带下拉的输入。

    从P0DIR来看,你的P0_4设置为输入方向,因此执行P0_4=1或P0_4=0是无效的。

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

  • 你好Martin,这个问题已经解决了,原来用了不同的万能表精度不同。并且确实是需要执行一次输入前的上拉。谢谢。