|
|
View previous topic :: View next topic |
Author |
Message |
eleqtc
Joined: 20 Jan 2004 Posts: 5
|
PIC16F88 Current Consuption in Sleep mode |
Posted: Wed Jan 21, 2004 12:26 pm |
|
|
Hi,
Have a PIC16F88 in a 72mS WDT sleep loop, A/D disabled, Timer1 disabled, INT_RC osc at 2MHz, Port A set to O/P all at low state with no external connections except for RA3 A/D i/p (set to i/p) tied low via resistor. Port B set to output and high state with no connections to external devices. I'm reading 70uA operating current with 3 volt operation. WDT only takes a few uA according to datasheet so can I get it lower than 70uA ? What's taking all these microamps?
Thanks,
Tony
Just tried osc set to 1MHz , current down to 63uA. Still not good enough.
It would suggest something is enabled ..........somewhere |
|
|
Neutone
Joined: 08 Sep 2003 Posts: 839 Location: Houston
|
|
Posted: Wed Jan 21, 2004 1:22 pm |
|
|
And how much current while the WDT is disabled and it is in sleep mode? |
|
|
Guest
|
|
Posted: Wed Jan 21, 2004 1:23 pm |
|
|
Post your #fuses statement, and also post all peripherals that you use.
(I want to see if you have Brownout enabled, or the comparator,
or Vref, etc.) With regard to external connections, what circuit do
you have on the MCLR pin ? |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Jan 21, 2004 1:24 pm |
|
|
That post above was from me. Somehow, I got logged in as Guest.
I fixed that. |
|
|
Guest
|
|
Posted: Wed Jan 21, 2004 3:05 pm |
|
|
How bizzare. The reason I'm trying to get a lower consumption is that I got about 17uA with a PIC16LF84 in sleep mode.
// compiled with PCWH version 3.180
#include <16F88.H>
#fuses MCLR, NOBROWNOUT, NOLVP, WDT, NOCPD, NOPROTECT, INTRC_IO, PUT, NODEBUG
#device adc=8
#use fast_io(A)
#use fast_io(B)
#use delay(clock=2000000)
// rem'd out these two lines, no change.
#use rs232(baud=9600, rcv=PIN_B2,xmit=PIN_B5, parity=N, bits=8, errors, restart_wdt )
#use I2C(master, sda=PIN_B1, scl=PIN_B4, fast)
#byte adcon0 = 0x1f
/* As you can see I'm using RS232 and I2C but have commented out any such routines to try to
see what's going on. This is the only code compiled.
*/
main() {
setup_oscillator(OSC_2MHZ | OSC_INTRC);
disable_interrupts(GLOBAL);
setup_wdt(WDT_72MS) ;
set_tris_a(0x00); // RA4 for A/D input
porta = 0x00 ;
set_tris_b(0x00) ;
portb = 0xff ;
// Nothing physically connected to any port pins
adcon0 = 0x20 ; // turn adc off
port_b_pullups(true); // true or false, no difference to current consuption
setup_timer_1 ( T1_DISABLED );
while(true) {
// no difference with or without these two lines.
output_low(CS_DIGPOT); // like to see a pulse to measure actual WDT time.
//delay_ms(1); // did have this in to see pulse better on oscilloscope
output_high(CS_DIGPOT);
sleep();
} // end while loop
} // end main |
|
|
eleqtc
Joined: 20 Jan 2004 Posts: 5
|
16F88 Slep current |
Posted: Wed Jan 21, 2004 3:11 pm |
|
|
Yes I managed to post my code as Guest.
I forgot the reset circuit. It's the standard R-C as per the datasheet.
Tony |
|
|
eleqtc
Joined: 20 Jan 2004 Posts: 5
|
Problem solved |
Posted: Wed Jan 21, 2004 6:01 pm |
|
|
It's the internal oscillator. Clock switching now gives me 3.4uA if I don't wait for a stable oscillator. That matches the datasheet info for the WDT with my 3 volt supply.
If I do wait as in the code below I have to wait just over 4mS for stability with an average current of 16uA drawn.
I wish it only took me 4mS to wake up properly each morning !
Regards,
Tony
while(true) {
setup_oscillator(OSC_31kHZ | OSC_INTRC);
sleep();
setup_oscillator(OSC_2MHZ | OSC_INTRC);
output_low(pin_b3); // see time overhead
IOFS=false;
while(!IOFS) {}
output_high(pin_b3);
} |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|