This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

current draw question

Other Parts Discussed in Thread: MSP430F4132, MSP430F412


question, I have made a target board that able to place either  msp430F412 or msp430F4132 for different product application, but i have notices a different in current draw when running same code 

 msp430F412 in mode LPM3 and having MCLK set at 8M, 32,768 crystal and capture on, lcd display on and watchdog timer interval selected for 1 second interrupt. resistor network for the display 1M ohmo, current draw is at 1.6uA which is excellent

 with msp430F4132 in LPM3, MCLK at 8M, 32,768 crystal, capture on, lcd display on, Watchdog for 1second . charge pump selected, with 4.7uF cap , current draw is at 9uA

using fluke 189 multimeter, is this normal 

  • If you check the tables on the MCUs (not in datasheet only, right in the MCU page) you can see a difference.

    For the msp430F412,

    Active Power (uA/MHz):200  

    Standby Power (LPM3-uA): 0.7


    For the msp430F4132

    Active Power (uA/MHz):220  

    Standby Power (LPM3-uA): 0.9

    Well there's a difference, i assume your MCU isn't always at LPM3? So maybe the active power would explain the difference? 


  • thanks for the reply, that could be a small issue, but now removed GIE global interrupt  from  (__bis_sr_register(LPM3_bits) so no more interrupt

    the fluke meter has max, min and avg current reading, here is the reading  


    msp430F412   at  max = 2.12uA,  min = 1.64uA,  avg= 1.79uA

    msp430F4132  at  max = 16uA ,  min = 3.72uA,  avg= 8.07uA    


    i'll post the code shortly



  • here is the code im testing with the only section that is different is Initialize LCD, the rest is all the same


    //testing current msp430f412
    #include <msp430.h>
    #include <stdbool.h>
    #include "rpm_registor_ints.h"

    //////////////////////// main.c ///////////////////////////////////
    int main(void) {

    clock_startup_setting(); // test if 32768 crystal is on
    port_register_setting(); //set port
    lcd_setup(); //test lcd display on power up
    set_main_clock_8M(); //set doc to 8 mhz setting
    set_captuer_registor(); //setup capture registor
    smooth_rpm(); // reset all RPMreading array on power up

    WDTCTL = WDT_ADLY_1000; //enable 1 second interrupt
    IE1 = WDTIE; //enable watch dog interrupt

    while(1){ //////////////// this Infinite while loop
    __bis_SR_register(LPM3_bits);// + GIE); // wait here low power mode

    // more code here


    while(1); //Infinite loop
    return 0;

    ///////////////////// WATCH DOG_VECTOR ///////////////////////////////
    #pragma vector=WDT_VECTOR
    __interrupt void WDT_ISR(void){

    IFG1 &= ~WDTIFG; //reset watch dog interrupt flag

    void clock_startup_setting(void){
    FLL_CTL0 |= XCAP10PF; // Configure load caps
    IFG1 &= ~OFIFG; // Clear OSCFault flag
    for ( i = 10000; i > 0; i--); // Time for flag to set
    while (IFG1 & OFIFG);

    /////////////////////// Initialize LCD ///////////////////
    //this code is used for the MSP430F412 chip see below for the code when msp430f4132 is used
    void lcd_setup (void){
    P5SEL = 0X1C; // set LCD backplane

    LCDM1 = 0xff; // display segment on
    LCDM2 = 0xff;


    void port_register_setting(void){

    P1OUT = 0x00; //setup output low
    P1DIR = 0xfe; //capture pin CCI0A pin 1.0
    P1SEL = 0x01; //select capture CCI0A

    P2OUT = 0x00; // All P2.x reset
    P2DIR = 0xFF; // All P4.x outputs

    P3OUT = 0x00; //All P3.x reset
    P3DIR = 0xFF; //All P4.x outputs

    P4OUT = 0x00; // All P4.x reset
    P4DIR = 0xFF; // All P4.x outputs

    P5OUT = 0x00; // All P5.x reset
    P5DIR = 0xFF; // All P5.x outputs

    P6OUT = 0x00; // All P6.x reset
    P6DIR = 0xFF; // All P6.x outputs


    /////////////////////// clock setup //////////////////////////////////////
    void set_main_clock_8M(void){

    SCFI0 |= FN_2;

    /////////////////////// captuer_registor /////////////////////////////////
    void set_captuer_registor(void){

    TACCTL0 = CM_1 + CCIS_0 + SCS + CAP + CCIE;
    TACCTL0 &= ~COV;
    TACTL = TASSEL_1 + ID_0 + MC_2 + TACLR;

    void smooth_rpm(void){
    for ( i= 0; i<RPMsmooth; i++)
    RPMreading[i]= 0;

    this code is used for the MSP430F4132 chip
    /////////////////////// Initialize LCD ///////////////////
    void lcd_setup (void){
    LCDAPCTL0 = LCDS0 + LCDS4 + LCDS8 + LCDS12 + LCDS16 + LCDS20;
    P5SEL = 0XF0; //this set LCD backplane

    LCDM1 = 0xff; //display segment on
    LCDM2 = 0xff;

  • It seems on the first project, you are using a resistor network for the LCD voltage, while on the second, you use the charge pump. The charge pump, even if no current is required to actually drive an LCD, requires a few µA base current. You’ll have some leakage in the 4.7µ cap too, especially if it is an electrolytic type.

  • i'm using tantalum cap on pin #43 R33/LCDCAP

    question why I'm able to remove these 2 line from lcd function and still have good display contrast, but did notice with scope the lcd back plan com0,com1,com2,com3 have change shape , but getting better current draw at max.min. arg at 6uA, can you advise what does the charge pump for and why i need to activated, thanks        

    //LCDAVCTL1 = VLCD_2;

  • I didn’t work with the LCD module myself. So I can only rely on what I remember from reading the users guide chapters. But IIRC, the charge pump is required if you can’t provide a sufficient external voltage for a good contrast. Often, VCC isn’t enough. This depends on the LCD. Basically, a charge pump charges a capacitor with supply voltage, then switches its pins ‘on top’ of the supply, so the resulting combined voltage is twice as high. This is then used to power equipment that wasn’t content with the lower supply voltage. Like some LCD. It can also be used to invert a voltage.
    I also remember that wrong configuration (software and/or hardware) of the LCD supply section can lead to quite some unwanted cross-currents or leakage currents. (large compared to the plain LCD current).