EmbeddedRelated.com
Forums

MSP430 LPM3 power consumption

Started by rothe957 October 23, 2002
Hi!

I am trying to (re)build a digital watch based on the MSP430F149:
http://www.sigma957.org/uc2000.html
I am using the FET evalkit from TI with a 32kHz watch quartz,
powered from 2 AA cells. 
I am still at the very beginning, I just made a simple program
that uses TimerA to generate interrupts for wakeup at 1s interval.
The mainloop updates the display (takes about 5ms) and then enters 
LPM3 again. The program seems to work as intended.
I am using the latest MSPGCC windows build. 
However, the current consumption is about 50uA for the MSP alone,
which is far too much. The display adds another 8uA which is ok.
I already checked that ADC,  VRef and CompA is switched off, 
I set all unused ports to 0 output, but I can't seem to get 
down to the 2uA that I expected for LPM3.
Any ideas what I am doing wrong?



Beginning Microcontrollers with the MSP430

Can you put in a temporary I/O bit output that is set when the F149 is in
its INT - or running
in the foreground, and that ONLY clears that I/O line when the F149 indeed is in
LPM3 ?

It seems, by the looks of your current that you might have the CPU executing all
the time...... ?
Check that relevant INT flags are cleared before exit of your ISR (otherwise it
will re-enter the ISR all the time)
Obviously you've made sure all other INTs can't be accidentally
entered, or at least make sure that execption is
handled properly.
(Check that DCO is off too, and not clocking something it shouldn't in LPM3
for example)

Another one to look at is your JTAG.
The F149 has its JTAG properly pulled up though, so I've never seen
excessive currents caused by the JTAG.
Is it a "steady" 50 uA - or does it "float" around a bit ?
Have you tried the good old "finger test" ? Poke around the I/O, and
see if you missed an I/O pin/port somehow..

The only other one would be a static state on I/O port that interfaces with the
display, like a clock or data line.
A typical mistake is eg. not to ensure a defined state of the outputted data bit
after bit testing on the TXd data
to the I/F.
Eg. try making sure you set data and clock lines (is it Sync I/F ?) LOW after
bit bashing to the display etc.
(You probably did so if it is sync I/F, but you never know)


  ----- Original Message ----- 
  From: rothe957 
  To: msp430@msp4... 
  Sent: Wednesday, October 23, 2002 8:53 PM
  Subject: [msp430] MSP430 LPM3 power consumption


  Hi!

  I am trying to (re)build a digital watch based on the MSP430F149:
  http://www.sigma957.org/uc2000.html
  I am using the FET evalkit from TI with a 32kHz watch quartz,
  powered from 2 AA cells. 
  I am still at the very beginning, I just made a simple program
  that uses TimerA to generate interrupts for wakeup at 1s interval.
  The mainloop updates the display (takes about 5ms) and then enters 
  LPM3 again. The program seems to work as intended.
  I am using the latest MSPGCC windows build. 
  However, the current consumption is about 50uA for the MSP alone,
  which is far too much. The display adds another 8uA which is ok.
  I already checked that ADC,  VRef and CompA is switched off, 
  I set all unused ports to 0 output, but I can't seem to get 
  down to the 2uA that I expected for LPM3.
  Any ideas what I am doing wrong?



        
             
       
       

  .



   






If you haven't already tried, unplug the JTAG and measure the current.
Our 
FET tool takes lots of uA.

 > I am using the FET evalkit from TI with a 32kHz watch quartz,
 > powered from 2 AA cells.
 > I am still at the very beginning, I just made a simple program
 > that uses TimerA to generate interrupts for wakeup at 1s interval.
 > The mainloop updates the display (takes about 5ms) and then enters
 > LPM3 again. The program seems to work as intended.
 > I am using the latest MSPGCC windows build.
 > However, the current consumption is about 50uA for the MSP alone,
 > which is far too much. The display adds another 8uA which is ok.
 > I already checked that ADC,  VRef and CompA is switched off,
 > I set all unused ports to 0 output, but I can't seem to get
 > down to the 2uA that I expected for LPM3.
 > Any ideas what I am doing wrong?


Hi!

Thank you for your suggestions.
I think I found the problem.

> It seems, by the looks of your current that you
might have the CPU executing all the time...... ?

I checked it - no, the CPU is in LPM3 most of the time.

> Another one to look at is your JTAG.

JTAG interface connected or not - no difference.

> Is it a "steady" 50 uA - or does it
"float" around a bit ?

Steady.

> Have you tried the good old "finger
test" ? 

No effect, except when I touch the crystal pins.

> The only other one would be a static state on I/O
port that 
> interfaces with the display, like a clock or data line.

And here it dawned to me... Let me explain:
The display (40 char 5x7 alphanumeric LCD with controller) 
is powered by two symmetric voltages of + and - Vcc/2. 
I connected + to Vcc and - to Vss, and use a micropower
opamp to generated Vcc/2 for the display's logic ground level.
To drive the signals (8 data bits, 2 control lines, clock),
I used 1M 'pull-down' resistor to Vcc/2, and switched the
I/O-pins between active 1 drive and input state (=tristate).
This works, but of course if the I/O pin is switched to input
(display logic 0 output), the I/O sees Vcc/2... which causes
the excess current. The only way I see is putting a diode
in very I/O line and use active drive all the time, like I
do already with the clock, but space is VERY limited. 
The whole PCB with controller, quartz, and all other parts, 
like the opamp, resistors and diodes must fit on a 17x21mm 
2-layer 0.5mm FR4 PCB, and the overall height must not exceed
1.7mm... Does anyone know another solution than diodes? 
Or does anyone know ultraminiature diodes, say 0402?



> Does anyone know another solution than diodes? 

I thought about it a little and tried a single diode in
the connection from vcc/2 to the 11 pull-down resistors.
This way, the inputs see Vcc/2 + Vf, but the 0 level for
the display also goes up by Vf. The display still works,
and the total current went down to about 25uA. 
Then it occured to me that if I leave the data lines 
at active high, I'll have no input problems (except for
the few microseconds when I actually have to generate a 0),
but the steady current from the 8 pull-downs instead.
Give it a try - we are down to 15uA now. 
Maybe I should try 2M for the data pull downs, this could
win me another 4 or 5 uA...



I've been reading along with you on this.  It looks like you're
using 
an external LCD module.  To get that kind of stand-by power I'm 
guessing that you're switching the LCD VCC off?  Also, is this a 5V 
or 3V LCD/LCD Controller? On-board parts or Off-the-Shelf module?

CP


--- In msp430@y..., "rothe957" <rothe@d...> wrote:
> > Does anyone know another solution than
diodes? 
> 
> I thought about it a little and tried a single diode in
> the connection from vcc/2 to the 11 pull-down resistors.
> This way, the inputs see Vcc/2 + Vf, but the 0 level for
> the display also goes up by Vf. The display still works,
> and the total current went down to about 25uA. 
> Then it occured to me that if I leave the data lines 
> at active high, I'll have no input problems (except for
> the few microseconds when I actually have to generate a 0),
> but the steady current from the 8 pull-downs instead.
> Give it a try - we are down to 15uA now. 
> Maybe I should try 2M for the data pull downs, this could
> win me another 4 or 5 uA...


This is a really interesting problem .........

Do you think the display uses a "floating Vcc/2 GND" to create the
bias
voltages for the LCD, having possibly 2 backplanes ?

Is there a state on the controller that leaves the 8 data lines as
"input", so
you can define your I/O as outputs when they're static in LPM3 ?

Probably sounds nuts, but the LCD segment outputs of a F4XX part could
"mimic" a GND - Vcc/2 - Vcc output state.
Leaving it static would be the trick of course, along with creating the right 8
bit settings
out of the 8 LCD segment I/O lines.......

What actually constitues a logic "1" and logic "0" on the 8
data lines ?
The only other way would be for the F14X to actually have its own GND at the
Vcc/2, but then
the CPU would run at say 3.3 V / 2 = 1.65 Volts.
At such a low clock, you can easily use the lowest core voltage, but < 1.8
Volts of course is
not guaranteed... (Then again, I aasume you're not planning on making
100,000 of these units.

Still a good challenge.. !
There's other solutions, but they won't fit becuase of form factor.

  ----- Original Message ----- 
  From: rothe957 
  To: msp430@msp4... 
  Sent: Friday, October 25, 2002 2:12 AM
  Subject: [msp430] Re: MSP430 LPM3 power consumption


  > Does anyone know another solution than diodes? 

  I thought about it a little and tried a single diode in
  the connection from vcc/2 to the 11 pull-down resistors.
  This way, the inputs see Vcc/2 + Vf, but the 0 level for
  the display also goes up by Vf. The display still works,
  and the total current went down to about 25uA. 
  Then it occured to me that if I leave the data lines 
  at active high, I'll have no input problems (except for
  the few microseconds when I actually have to generate a 0),
  but the steady current from the 8 pull-downs instead.
  Give it a try - we are down to 15uA now. 
  Maybe I should try 2M for the data pull downs, this could
  win me another 4 or 5 uA...



        
             
       
       

  .



   






--- In msp430@y..., "Kris De Vos" <microbit@c...> wrote:
> This is a really interesting problem .........

> Do you think the display uses a "floating
Vcc/2 GND" 
> to create the bias voltages for the LCD, having 
> possibly 2 backplanes ?

Could be. The problem is, I have very little data.
The display is part of a Seiko watch from around 1983.
All I know about the display is what I could measure on
the original watch. 
See here: http://www.sigma957.org/uc_pinout.html
The original CPU generated Vbatt/2 with a switched capacitor. 
The CPU itself probably ran from Vbatt/2. 
The interface to the display controller (a 3 chip solution) 
consists of a 8bit data bus, 2 strobes and a 32768 Hz clock feed. 
The L-level on all these lines is Vbatt/2, the H-level is Vbatt. 
I used a digital scope and a logic analyzer to figure 
out how the CPU talks to the display. 
Because I know nothing about the display controller 
(the protocol is very different from common LCD controllers, 
see here: http://www.sigma957.org/uc_lcd.html),
I want to reproduce the behavior of the original CPU as
good as possible. This means generating Vbatt/2 and using
this as logic L-level.
Vbatt in a watch starts at about 3.4V with a fresh battery,
and goes down to 2.2V when the battery is almost empty.
Running the MSP430F149 from Vbatt/2 is therefore not a viable
option. Using a DC/DC converter is also no option, because
the overall power consumption must be less than 20uA in order
to get a decent battery life from a 165mAh CR2325 cell.
Because ACLK output is the module function of Pin 2.0,
it is always active H or L. I tried driving the display clock 
with MSP430 L-level (-Vbatt/2 for the display) via a 1M series
resistor, but the display controller has clamp diodes at the 
inputs and malfunctions with a 'negative' input voltage.
So I used a serial diode and a 1M pull-down to Vbatt/2, and
this works, but driving H means 1.5uA current trough the
resistor.
For the 8 data lines and 2 strobes, I had the idea of using
only the pull-downs, and switch the I/Os to 'H-out' for H-level
and 'input' (=tristate, I thought) for L-level (via pull-down).

> Is there a state on the controller that leaves the
8 data 
> lines as "input", so you can define your I/O as outputs 
> when they're static in LPM3?

All lines of the controller are always inputs.
The strobes are L active, so I have to keep them at H level
most of the time. Another 3uA. Maybe I should try 2M here,
but the H-L edge would become an even slower slope... 
But still worth a try. 
For the data lines, their level is unimportant while the
strobe lines are H. So I thought setting them to tristate/input
would be the best idea, but this turned out to be a mistake.
Setting them to H-output means another 8 x Ipulldown.
But with 2MOhms this should be bearable.

> Probably sounds nuts, but the LCD segment outputs
of a F4XX part could
> "mimic" a GND - Vcc/2 - Vcc output state.
> Leaving it static would be the trick of course, along with creating the
right 8 bit settings
> out of the 8 LCD segment I/O lines.......

Nice idea. But I don't think this is feasible. Because they
cannot be programmed to only assume Vcc and Vcc/2 level and
never GND level. And -Vbatt/2 on any logic input will generate
clamp currents and probably latch-up in the display controller.

> The only other way would be for the F14X to
actually have its own GND at the Vcc/2, but then
> the CPU would run at say 3.3 V / 2 = 1.65 Volts.

When the battery is full. If it is near empty: 2.2V/2 = 1.1V.
No, I think I'll stick to running the uC on Vbatt, generating
Vbatt/2 via a micropower opamp (MAX4470, 0.75uA, works down to 1.8V),
and putting a few 0804 (4 x 0402) size resistor arrays on the PCB.

Oh, BTW, are there any current figures for flash selfprogramming?



--- In msp430@y..., "CP" <cp8071@y...> wrote:
> I've been reading along with you on this.  It
looks like you're using 
> an external LCD module.  To get that kind of stand-by power I'm 
> guessing that you're switching the LCD VCC off?  Also, is this a 5V 
> or 3V LCD/LCD Controller? On-board parts or Off-the-Shelf module?

The LCD is always on (it's a wrist watch, after all).
The LCD controller is a 1983 Seiko (?) custom 3-chip solution,
See here: http://www.sigma957.org/dissect.html , 
more specific: http://www.sigma957.org/bilder/UC2000_8.jpg
and here: http://www.sigma957.org/uc_lcd.html
My project page is this: http://www.sigma957.org/uc2000.html
There is also a pic of my humble development board:
http://www.sigma957.org/bilder/UC2000_E.jpg



HI rothe957,

r> Using a DC/DC converter is also no option, because
r> the overall power consumption must be less than 20uA in order
r> to get a decent battery life from a 165mAh CR2325 cell.
look at this DC/DC from TI

TPS60210,Regulated 3.3-V 100-mA Low-Ripple Charge Pump with Ultra Low Operating
Current
FEATURES
*Regulated 3.3-V Output Voltage From a 1.8-V to 3.6-V Input Voltage Range
*UltraLow Operating Current in Snooze Mode, Typical 2 uA With up to 2-mA Output
Current
*Less Than 5-mV(PP) Output Voltage Ripple Achieved With Push-Pull Topology
*Integrated Low-Battery and Power-Good Detector
*Switching Frequency Can Be Synchronized to External Clock Signal
*Extends Battery Usage With up to 90% Efficiency and 35-uA Quiescent Current
*Easy-To-Design, Low Cost, Low EMI Power Supply Since No Inductors Are Used
*Compact Converter Solution in UltraSmall 10-Pin MSOP With Only Four External
Capacitors Required



-- 
Valeriy