【发布时间】:2013-10-31 03:48:39
【问题描述】:
我有一个非常简单的代码,可以在终端上打印一些内容,然后直接进入睡眠状态。
由于某种原因,设备在睡眠模式下消耗更多电流。它正在绘制 0.24 mA 但我知道它应该小于这个值。如果没有睡眠,它会消耗 4.32 mA。我已经运行了最基本的软件,而且肯定缺少一些东西。
请问影响功耗的因素有哪些?我真的需要降低功耗,但我不知道是什么导致它这么高。为了您的方便,这里是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;的问题
【问题讨论】:
-
要查找的常见内容(不是 PIC 特定的)包括仍以高频运行的振荡器、不需要的外围设备上电以及由上拉/下拉电阻驱动的信号。此外,浮动输入可能比完全高或低的输入消耗更多的功率。最后请注意,您的测量方案可能会因电流通过编程器接口的数据引脚、串行数据连接等泄漏或泄漏而失真。
标签: embedded sleep microcontroller pic