协议栈:mesh1.0
芯片:CC2530
热释电传感器输出脚通过10k电阻接P06(检测到有人输出高电平,无人低电平),P06在hal_key.c中进行设置,开启中断。
现发现低功耗时,热释电传感器输出低电平功耗160uA,高电平功耗18ua。一直在来回转换。
目前我们的需求是,一分钟内检测到中断产生,便关闭中断,避免频繁的唤醒带来功耗增加。
可是现在关闭中断,也会发生上述的情况。
请问该如何做才能避免热释电传感器高低电平的变化而带来功耗异常。
user5032796:
回复 Alvin Chen:
谢谢,也就是说我需要自己做一个循环定时器去检测该引脚的电平。而不应该使用中断的方式?
Alvin Chen:
回复 user5032796:
中断方式时比较好的,当然你的说的定时去检查比较方便实现。
有一个问题: 你那个模块有人的时一直给高电平?还是说一直在电平转换? 如果一直给高电平也不会也只是触发一次中断呀。
user5032796:
回复 Alvin Chen:
您好,这个数字热释电传感器。有人触发会持续输出3s的高电平,然后进入封锁时间持续输出3s的低电平。如此循环。所以我这边看到的现象就是,一会电流高,一会电流低。
我这边是在触发后,就在应用层关闭中断,
if( keys & HAL_KEY_SW_7)//P0.6 热释电传感器
{P0IEN &= ~ 0x40;//关闭热释电中断 0-关闭
}
Alvin Chen:
回复 user5032796:
你设置的单边沿触发还是边沿 ,你设置为单边沿 上升沿触发。
user5032796:
回复 Alvin Chen:
是这么设置的
hal_key.c
#define HAL_KEY_SW_7_PORT P0
#define HAL_KEY_SW_7_BIT BV(6)
#define HAL_KEY_SW_7_SEL P0SEL
#define HAL_KEY_SW_7_DIR P0DIR
/* edge interrupt */
#define HAL_KEY_SW_7_EDGEBIT BV(0)
#define HAL_KEY_SW_7_EDGE HAL_KEY_RISING_EDGE
/* SW_7 interrupts */
#define HAL_KEY_SW_7_IEN IEN1 /* CPU interrupt mask register */
#define HAL_KEY_SW_7_IENBIT BV(5) /* Mask bit for all of Port_0 */
#define HAL_KEY_SW_7_ICTL P0IEN /* Port Interrupt Control register */
#define HAL_KEY_SW_7_ICTLBIT BV(6) /* P0IEN – P0.6 enable/disable bit */
#define HAL_KEY_SW_7_PXIFG P0IFG /* Interrupt flag at source */
hal_board_cfg.h
#define PUSH3_BV BV(6)#define PUSH3_SBIT P0_6#define PUSH3_POLARITY ACTIVE_HIGH
还有请问您一下。如果设置为普通IO,输入,该选择三态还是上下拉。
Alvin Chen:
回复 user5032796:
是否上拉下拉看你的传感器要求。
建议你自己去参考数据手册做一个关于你这个模块的驱动,不要使用HAL_Key这个接口了。
提供一下连接供你参考:
blog.csdn.net/…/42173957
user5032796:
回复 Alvin Chen:
嗯嗯,谢谢您