我有一个非常简单的代码,可以打印到终端然后直接进入睡眠状态。
由于某种原因,设备在睡眠模式下消耗更多电流。它绘制的是0.24 mA,但我知道它应该小于0.24 mA。没有睡眠,它消耗4.32毫安。我已经运行了最基本的软件,但必须遗漏一些东西。
请问影响功耗的因素有哪些?我真的需要降低功耗,但我不知道是什么导致它如此之高。为了您自己的方便,这是Datasheet。
/*
File: main.c
Date: 2011-SEP-4
Target: PIC18F87J11
IDE: MPLAB 8.76
Compiler: C18 3.40
*/
#include <p18cxxx.h>
#include <usart.h>
#pragma config FOSC = HSPLL, WDTEN = OFF, WDTPS = 4096, XINST = OFF
#define FOSC (4000000UL)
#define FCYC (FOSC/4UL)
#define BAUD 9600UL
#define SPBRG_INIT (FOSC/(16UL*BAUD) - 1)
void main(void)
{
/* set FOSC clock to 4MHZ */
OSCCON = 0x70;
/* turn off 4x PLL */
OSCTUNE = 0x00;
/* make all ADC inputs digital I/O */
ANCON0 = 0xFF;
ANCON1 = 0xFF;
/* test the simulator UART interface */
Open1USART(USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, SPBRG_INIT);
putrs1USART("PIC MICROCONTROLLERS\r\n");
Close1USART();
/* sleep forever */
Sleep();
}
提前致谢!
更新1:我注意到添加以下代码将其降低到0.04 mA
TRISE = 0;
PORTE = 0x0C;
如果我要将PORTE
改为以下,则增加到0.16 mA。
PORTE = 0x00;
但我真的不明白所有这些意味着什么......或者功耗如何下降。我必须在代码中遗漏一些内容,但我不知道它是什么。
更新2:此代码为我提供了不稳定的电流消耗。有时2.7 mA其他时间0.01 mA。我怀疑WDTCONbits.REGSLP = 1;
答案 0 :(得分:3)
当OP更改端口输出设置时,电流消耗从0.24 mA下降到0.04 mA。
这在典型设计中是预期的,输出控制各种电路。示例:通过驱动高输出可以打开LED(1),再增加0.20 mA。在另一种设计中,通过驱动低输出可以打开LED。在第3种设计中,不能驾驶可能会打开LED。
OP需要咨询原理图或设计人员,以确定哪些设置会导致低功耗。此外,在低功率模式期间可能/可能不允许某些组合。
最后,降低各种设计元素的功率,禁用等的序列可能很重要。关闭事物的顺序通常会在将它们重新联机时逆转。
@Chris Stratton在发布的评论中有很好的想法。
(1)低供电的LED。