大家好。 之前在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.
}
谢谢
Martin:
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呢?
George Peter:
回复 Martin:
还是Martin,你好。 文字排版我刚改了下,不好意思。现在好看多了。过程在代码里应该比较清楚了。 目前我看P0_4在输入状态(睡眠模式里)居然还会消耗电,这个令我无法理解(传感器就三个脚:VCC,地,数据脚——接P0_4)。正因为它耗电,所以我想企图关闭P0_4(使类似常开电路),而设P0_4为0? 当然设P0_4为0的后果是下一个循环——醒来后,无论我是否再打开P0_4【P0_4=1;】。读数已经不正常了,好像无无法执行成功【P0_4=1;】一样。
George Peter:
回复 Martin:
你好Martin,刚才用你的办法做了实验,结果和之前的没分别,也就是多了2uA. 你的代码应该就是在睡眠前执行 P2INP |= (0x01 << (0+5)); 醒来后执行 P2INP &= ~(0x01 << (0+5)); 对吧?代码我根据hal.h 里模仿 顺便我也给你看看我的代码,就上边例子多了三行:结果除了头一次读数不正常,其他读数均正常,而且用电量很接近PM2指标。 NWK_DELAY(800); //貌似少于800左右读数都不正常了 P0_4 = 0; //省2uA左右 P0DIR &= ~0x02;
George Peter:
回复 Martin:
你好Martin,这个问题已经解决了,原来用了不同的万能表精度不同。并且确实是需要执行一次输入前的上拉。谢谢。