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.

[参考译文] MSP430FR4133:借助 LCD 和 RTC 在数据表中实现电流消耗

Guru**** 1830940 points
Other Parts Discussed in Thread: MSP430FR4133, ENERGYTRACE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1033549/msp430fr4133-achieving-current-consumption-in-datasheet-with-lcd-and-rtc

器件型号:MSP430FR4133
主题中讨论的其他器件: ENERGYTRACE

我目前正在 LaunchPad 开发板上与 MSP430fr4133 (首次使用 MSP430用户)合作、并尝试通过 LCD、电荷泵和 RTC 实现 LPM3.5数据表中公布的电流消耗。  

ILPM3.5、LCD、CP 低功耗 μA 3.5、不包括 SVS (4) 3V 0.90 0.94 1.27 μ A

上面没有明确提到 RTC、但由于它是 LMP3.5、这是否意味着 RTC 正在运行? 我使用示例代码测量的电流约为3uA。  我基本上希望获得待机状态下的电流消耗、因此我每10秒左右对 RTC 进行一次计数、并查看这10秒间隔内的电流。 示例也使用了  

#define LPM3_BITS             (SCG1+SCG0+CPUOFF)

将器件置于 LPM3.5模式时。  但是、用户指南说也要设置 OSCOFF 位。  如果您不使用 XT1晶振、您是否只想设置 OSCOFF 位?

我还尝试将 RTC 和 LCD 参考时钟从 XT1切换为 VLO、但这没什么区别。  我已断开开发套件板上的所有连接、因此我连接的唯一跳线是 GND、因此无法与仿真器芯片通信。  作为测试、我创建了代码、仅将 GPIO 设置为输出/低电平、然后放入 LPM4.5、仅消耗0.03uA (不包括 SVS)、这符合数据表。  我试图查看开发板上的某个器件是否已连接并消耗了过多电流、但该测试似乎证明了这一理论。

我使用的代码在很大程度上是一个经过一些细微修改的示例。  我在这里有什么问题吗? 此代码仅在液晶屏上显示1234。  

 

#define pos1 4                                               // Digit A1 - L4
#define pos2 6                                               // Digit A2 - L6
#define pos3 8                                               // Digit A3 - L8
#define pos4 10                                              // Digit A4 - L10
#define pos5 2                                               // Digit A5 - L2
#define pos6 18                                              // Digit A6 - L18

const char digit[10] =
{
    0xFC,                                                    // "0"
    0x60,                                                    // "1"
    0xDB,                                                    // "2"
    0xF3,                                                    // "3"
    0x67,                                                    // "4"
    0xB7,                                                    // "5"
    0xBF,                                                    // "6"
    0xE4,                                                    // "7"
    0xFF,                                                    // "8"
    0xF7                                                     // "9"
};

void Init_GPIO(void);
void main (void)
{
    WDTCTL = WDTPW | WDTHOLD;                                  // Stop watchdog timer

    if (SYSRSTIV == SYSRSTIV_LPM5WU)                        // If LPM3.5 wakeup
        {

            PMMCTL0_H = PMMPW_H;                                // Open PMM Registers for write
            PMMCTL0_L |= PMMREGOFF_L;                           // and set PMMREGOFF
            //PMMCTL0_L &=  ~SVSHE_L;
            __bis_SR_register(LPM3_bits | GIE);                 // Re-enter LPM3.5
        }
    else
    {
        // Initialize GPIO pins for low power
        Init_GPIO();


        // Configure XT1 oscillator
        P4SEL0 |= BIT1 | BIT2;                              // P4.2~P4.1: crystal pins
        do
        {
            CSCTL7 &= ~(XT1OFFG | DCOFFG);                  // Clear XT1 and DCO fault flag
            SFRIFG1 &= ~OFIFG;
        }while (SFRIFG1 & OFIFG);                           // Test oscillator fault flag
        CSCTL6 = (CSCTL6 & ~(XT1DRIVE_3)) | XT1DRIVE_2;     // Higher drive strength and current consumption for XT1 oscillator



        // Disable the GPIO power-on default high-impedance mode
        // to activate previously configured port settings
        PM5CTL0 &= ~LOCKLPM5;

        // Configure RTC
        RTCCTL |= RTCSS__XT1CLK | RTCIE |RTCPS__10 ;                    // Initialize RTC to use XT1 and enable RTC interrupt

        RTCMOD = 32768;                                     // Set RTC modulo to 32768 to trigger interrupt each second

        // Configure LCD pins
        SYSCFG2 |= LCDPCTL;                                 // R13/R23/R33/LCDCAP0/LCDCAP1 pins selected



        // Just enabled A1-A4 for 4 digits
        LCDPCTL0 = 0x330F;
        LCDPCTL1 = 0x0033;
        LCDPCTL2 = 0x0000;


        LCDCTL0 = LCDSSEL_0 | LCDDIV_7;                     // flcd ref freq is xtclk

        // LCD Operation - Mode 3, internal 3.08v, charge pump 256Hz
        LCDVCTL = LCDCPEN | LCDREFEN | VLCD_6 | (LCDCPFSEL0 | LCDCPFSEL1 | LCDCPFSEL2 | LCDCPFSEL3);

        LCDMEMCTL |= LCDCLRM;                               // Clear LCD memory

        LCDCSSEL0 = 0x000F;                                 // Configure COMs and SEGs
        LCDCSSEL1 = 0x0000;                                 // L0, L1, L2, L3: COM pins
        LCDCSSEL2 = 0x0000;

        LCDM0 = 0x21;                                       // L0 = COM0, L1 = COM1
        LCDM1 = 0x84;                                       // L2 = COM2, L3 = COM3

        LCDCTL0 |= LCD4MUX | LCDON;                         // Turn on LCD, 4-mux selected (LCD4MUX also includes LCDSON)

        // Display 1 2 3 4
        LCDMEM[pos1] = digit[1];
        LCDMEM[pos2] = digit[2];
        LCDMEM[pos3] = digit[3];
        LCDMEM[pos4] = digit[4];


        PMMCTL0_H = PMMPW_H;                                // Open PMM Registers for write
        PMMCTL0_L |= PMMREGOFF_L;                           // and set PMMREGOFF
        //PMMCTL0_L &=  ~SVSHE_L;

        __bis_SR_register(LPM3_bits | GIE);                 // Enter LPM3.5
        __no_operation();                                   // For debugger


    }


}
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = RTC_VECTOR
__interrupt void RTC_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(RTC_VECTOR))) RTC_ISR (void)
#else
#error Compiler not supported!
#endif
{
    switch(__even_in_range(RTCIV, RTCIV_RTCIF))
    {
        case RTCIV_NONE :
            break;

        case RTCIV_RTCIF:
            break;

        default:
            break;
    }
}


void Init_GPIO()
{
    // Configure all GPIO to Output Low
    P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00;P4OUT = 0x00;
    P5OUT = 0x00;P6OUT = 0x00;P7OUT = 0x00;P8OUT = 0x00;

    P1DIR = 0xFF;P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;
    P5DIR = 0xFF;P6DIR = 0xFF;P7DIR = 0xFF;P8DIR = 0xFF;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alex:

    [引用 userid="497611" url="~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1033549/msp430fr4133-achieving-current-consumption-in-datasheet-with-lcd-and-rtc "]

    ILPM3.5、LCD、CP 低功耗 μA 3.5、不包括 SVS (4) 3V 0.90 0.94 1.27 μ A

    [/报价]

    这是不使用 RTC 时的功耗。 在 LPM 3.5模式下、RTC 和 LCD 是可选的

    示例代码具有 IRS、规范中的功耗处于待机模式。 每次进入 IRS 时、CPU 都会唤醒。 它将增加功耗。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、感谢您的回复和澄清。  另一个规格仅适用于 RTC、25摄氏度时的典型值为0.77uA。 因此、使用 RTC 和 LCD 时、我可以做的最好的事情可能低于2uA。  我确实调整了 LCD 的一些设置(对比度降至最低、 设置 LCDLP 和 LCDREFMODE)、EnergyTrace 显示的平均值为1.5uA。  我必须将其放在实际的仪表上进行确认。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Alex,

    是否有任何更新?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我一直无法将其降低到1.7uA 左右、但我认为它将适合我们的情况。  该 MCU 是我们可以大量找到的器件、因此我要确保它适用于各种产品。  我仍然希望在数据表中进一步说明用于获得数据表特性部分中列出的待机电流的设置:

    待机 μA:实时时钟(RTC)小于1 μ A
    计数器和液晶显示器(LCD)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alex:

     您能否发布测试代码? 因此、我可以在我的一侧进行测试。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Allen、

    这里是我的测试代码、这是经过一些细微修改的示例代码。  EnergyTrace 的平均值为1.6uA。。

    #include "driverlib.h"
    #include "board.h"
    //******************************************************************************
    //!
    //!   Empty Project that includes driverlib
    //!
    //******************************************************************************
    
    #define pos1 4                                               // Digit A1 - L4
    #define pos2 6                                               // Digit A2 - L6
    #define pos3 8                                               // Digit A3 - L8
    #define pos4 10                                              // Digit A4 - L10
    #define pos5 2                                               // Digit A5 - L2
    #define pos6 18                                              // Digit A6 - L18
    
    const char digit[10] =
    {
        0xFC,                                                    // "0"
        0x60,                                                    // "1"
        0xDB,                                                    // "2"
        0xF3,                                                    // "3"
        0x67,                                                    // "4"
        0xB7,                                                    // "5"
        0xBF,                                                    // "6"
        0xE4,                                                    // "7"
        0xFF,                                                    // "8"
        0xF7                                                     // "9"
    };
    
    void Init_GPIO(void);
    
    void main (void)
    {
        WDTCTL = WDTPW | WDTHOLD;                                  // Stop watchdog timer
    
        if (SYSRSTIV == SYSRSTIV_LPM5WU)                        // If LPM3.5 wakeup
            {
    
                PMMCTL0_H = PMMPW_H;                                // Open PMM Registers for write
                PMMCTL0_L |= PMMREGOFF_L;                           // and set PMMREGOFF
                PMMCTL0_L &=  ~SVSHE_L;
                __bis_SR_register(LPM3_bits | GIE);                 // Re-enter LPM3.5
            }
        else
        {
            // Initialize GPIO pins for low power
            Init_GPIO();
    
    
    
    
    
            // Configure XT1 oscillator
            // XT1 oscillator recommended for lowest power
            P4SEL0 |= BIT1 | BIT2;                              // P4.2~P4.1: crystal pins
            do
            {
                CSCTL7 &= ~(XT1OFFG | DCOFFG);                  // Clear XT1 and DCO fault flag
                SFRIFG1 &= ~OFIFG;
            }while (SFRIFG1 & OFIFG);                           // Test oscillator fault flag
    
            // CHECK THIS TO SEE IF WE CAN RUN XT1 LOWER AND HOW IT WORKS
            //CSCTL6 = (CSCTL6 & ~(XT1DRIVE_3)) | XT1DRIVE_2;     // Higher drive strength and current consumption for XT1 oscillator
    
    //        SYSCFG2 |= ADCPCTL4;
    //        PMMCTL0_H = PMMPW_H;
    //        PMMCTL2 |= EXTREFEN;
    
            // Disable the GPIO power-on default high-impedance mode
            // to activate previously configured port settings
            PM5CTL0 &= ~LOCKLPM5;
    
            // Configure RTC
            RTCCTL |= RTCSS__XT1CLK | RTCIE |RTCPS__10 ;                    // Initialize RTC to use XT1 and enable RTC interrupt
    
            RTCMOD = 32768;                                     // Set RTC modulo to 32768 to trigger interrupt every 10 seconds
    
            // Configure LCD pins
            SYSCFG2 |= LCDPCTL;                                 // R13/R23/R33/LCDCAP0/LCDCAP1 pins selected
    
    
    
            // Just enabled A1-A4 for 4 digits
            LCDPCTL0 = 0x330F;
            LCDPCTL1 = 0x0033;
            LCDPCTL2 = 0x0000;
    
    
            LCDCTL0 = LCDSSEL_0 | LCDDIV_7 | LCDLP;                     // flcd ref freq is xtclk
    
            // LCD Operation - Mode 3, internal 3.08v, charge pump 256Hz
            // Mode 3 is recommended for lowest power
            // VLCD_0 for lowest contrast
            LCDVCTL = LCDCPEN | LCDREFEN | VLCD_0 | LCDREFMODE |  (LCDCPFSEL0 | LCDCPFSEL1 | LCDCPFSEL2 | LCDCPFSEL3);
            //LCDVCTL = LCDCPEN | LCDREFEN | VLCD_3 | (LCDCPFSEL0 | LCDCPFSEL1 | LCDCPFSEL2 | LCDCPFSEL3);
    
            LCDMEMCTL |= LCDCLRM;                               // Clear LCD memory
    
            LCDCSSEL0 = 0x000F;                                 // Configure COMs and SEGs
            LCDCSSEL1 = 0x0000;                                 // L0, L1, L2, L3: COM pins
            LCDCSSEL2 = 0x0000;
    
            LCDM0 = 0x21;                                       // L0 = COM0, L1 = COM1
            LCDM1 = 0x84;                                       // L2 = COM2, L3 = COM3
    
            LCDCTL0 |= LCD4MUX | LCDON;                         // Turn on LCD, 4-mux selected (LCD4MUX also includes LCDSON)
    
            // Display 1 2 3 4
            LCDMEM[pos1] = digit[1];
            LCDMEM[pos2] = digit[2];
            LCDMEM[pos3] = digit[3];
            LCDMEM[pos4] = digit[4];
    
    
            PMMCTL0_H = PMMPW_H;                                // Open PMM Registers for write
            PMMCTL0_L |= PMMREGOFF_L;                           // and set PMMREGOFF
            PMMCTL0_L &=  ~SVSHE_L;
    
            __bis_SR_register(LPM3_bits | GIE);                 // Enter LPM3.5
            __no_operation();                                   // For debugger
    
    
        }
    
    
    }
    
    #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
    #pragma vector = RTC_VECTOR
    __interrupt void RTC_ISR(void)
    #elif defined(__GNUC__)
    void __attribute__ ((interrupt(RTC_VECTOR))) RTC_ISR (void)
    #else
    #error Compiler not supported!
    #endif
    {
        switch(__even_in_range(RTCIV, RTCIV_RTCIF))
        {
            case RTCIV_NONE :
                break;
    
            case RTCIV_RTCIF:
                break;
    
            default:
                break;
        }
    }
    
    
    void Init_GPIO()
    {
        // Configure all GPIO to Output Low
        P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00;P4OUT = 0x00;
        P5OUT = 0x00;P6OUT = 0x00;P7OUT = 0x00;P8OUT = 0x00;
    
        P1DIR = 0xFF;P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;
        P5DIR = 0xFF;P6DIR = 0xFF;P7DIR = 0xFF;P8DIR = 0xFF;
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alex:

    您无需在 LCD 上显示任何内容。 如果您屏蔽了显示1234的句子。 禁用 RTC 中断。 功耗小于1uA。

    #include "msp430.h"
    //#include "board.h"
    //******************************************************************************
    //!
    //!   Empty Project that includes driverlib
    //!
    //******************************************************************************
    
    #define pos1 4                                               // Digit A1 - L4
    #define pos2 6                                               // Digit A2 - L6
    #define pos3 8                                               // Digit A3 - L8
    #define pos4 10                                              // Digit A4 - L10
    #define pos5 2                                               // Digit A5 - L2
    #define pos6 18                                              // Digit A6 - L18
    
    const char digit[10] =
    {
        0xFC,                                                    // "0"
        0x60,                                                    // "1"
        0xDB,                                                    // "2"
        0xF3,                                                    // "3"
        0x67,                                                    // "4"
        0xB7,                                                    // "5"
        0xBF,                                                    // "6"
        0xE4,                                                    // "7"
        0xFF,                                                    // "8"
        0xF7                                                     // "9"
    };
    
    void Init_GPIO(void);
    
    void main (void)
    {
        WDTCTL = WDTPW | WDTHOLD;                                  // Stop watchdog timer
    
        if (SYSRSTIV == SYSRSTIV_LPM5WU)                        // If LPM3.5 wakeup
            {
    
                PMMCTL0_H = PMMPW_H;                                // Open PMM Registers for write
                PMMCTL0_L |= PMMREGOFF_L;                           // and set PMMREGOFF
                PMMCTL0_L &=  ~SVSHE_L;
                __bis_SR_register(LPM3_bits | GIE);                 // Re-enter LPM3.5
            }
        else
        {
            // Initialize GPIO pins for low power
            Init_GPIO();
    
    
    
    
    
            // Configure XT1 oscillator
            // XT1 oscillator recommended for lowest power
            P4SEL0 |= BIT1 | BIT2;                              // P4.2~P4.1: crystal pins
            do
            {
                CSCTL7 &= ~(XT1OFFG | DCOFFG);                  // Clear XT1 and DCO fault flag
                SFRIFG1 &= ~OFIFG;
            }while (SFRIFG1 & OFIFG);                           // Test oscillator fault flag
    
            // CHECK THIS TO SEE IF WE CAN RUN XT1 LOWER AND HOW IT WORKS
            //CSCTL6 = (CSCTL6 & ~(XT1DRIVE_3)) | XT1DRIVE_2;     // Higher drive strength and current consumption for XT1 oscillator
    
    //        SYSCFG2 |= ADCPCTL4;
    //        PMMCTL0_H = PMMPW_H;
    //        PMMCTL2 |= EXTREFEN;
    
            // Disable the GPIO power-on default high-impedance mode
            // to activate previously configured port settings
            PM5CTL0 &= ~LOCKLPM5;
    
            // Configure RTC
       //     RTCCTL |= RTCSS__XT1CLK | RTCIE |RTCPS__10 ;                    // Initialize RTC to use XT1 and enable RTC interrupt
            RTCCTL |= RTCSS__XT1CLK | RTCPS__10 ;                    // Initialize RTC to use XT1 and enable RTC interrupt
            RTCMOD = 32768;                                     // Set RTC modulo to 32768 to trigger interrupt every 10 seconds
    
            // Configure LCD pins
            SYSCFG2 |= LCDPCTL;                                 // R13/R23/R33/LCDCAP0/LCDCAP1 pins selected
    
    
    
            // Just enabled A1-A4 for 4 digits
    //        LCDPCTL0 = 0x330F;
    //        LCDPCTL1 = 0x0033;
    //        LCDPCTL2 = 0x0000;
    
    
            LCDCTL0 = LCDSSEL_0 | LCDDIV_6 | LCDLP|LCD4MUX;                     // flcd ref freq is xtclk
    
            // LCD Operation - Mode 3, internal 3.08v, charge pump 256Hz
            // Mode 3 is recommended for lowest power
            // VLCD_0 for lowest contrast
            LCDVCTL = LCDCPEN | LCDREFEN | VLCD_0 | LCDREFMODE |  (LCDCPFSEL0 | LCDCPFSEL1 | LCDCPFSEL2 | LCDCPFSEL3);
            //LCDVCTL = LCDCPEN | LCDREFEN | VLCD_3 | (LCDCPFSEL0 | LCDCPFSEL1 | LCDCPFSEL2 | LCDCPFSEL3);
    
            LCDMEMCTL |= LCDCLRM;                               // Clear LCD memory
    
    //        LCDCSSEL0 = 0x000F;                                 // Configure COMs and SEGs
    //        LCDCSSEL1 = 0x0000;                                 // L0, L1, L2, L3: COM pins
    //        LCDCSSEL2 = 0x0000;
    
    //        LCDM0 = 0x21;                                       // L0 = COM0, L1 = COM1
    //        LCDM1 = 0x84;                                       // L2 = COM2, L3 = COM3
    
            LCDCTL0 |= LCDON;                         // Turn on LCD, 4-mux selected (LCD4MUX also includes LCDSON)
    
            // Display 1 2 3 4
    //        LCDMEM[pos1] = digit[1];
    //        LCDMEM[pos2] = digit[2];
    //        LCDMEM[pos3] = digit[3];
    //        LCDMEM[pos4] = digit[4];
    
    
            PMMCTL0_H = PMMPW_H;                                // Open PMM Registers for write
            PMMCTL0_L |= PMMREGOFF_L;                           // and set PMMREGOFF
            PMMCTL0_L &=  ~SVSHE_L;
    
            __bis_SR_register(LPM3_bits | GIE);                 // Enter LPM3.5
            __no_operation();                                   // For debugger
    
    
        }
    
    
    }
    
    #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
    #pragma vector = RTC_VECTOR
    __interrupt void RTC_ISR(void)
    #elif defined(__GNUC__)
    void __attribute__ ((interrupt(RTC_VECTOR))) RTC_ISR (void)
    #else
    #error Compiler not supported!
    #endif
    {
        switch(__even_in_range(RTCIV, RTCIV_RTCIF))
        {
            case RTCIV_NONE :
                break;
    
            case RTCIV_RTCIF:
                break;
    
            default:
                break;
        }
    }
    
    
    void Init_GPIO()
    {
        // Configure all GPIO to Output Low
        P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00;P4OUT = 0x00;
        P5OUT = 0x00;P6OUT = 0x00;P7OUT = 0x00;P8OUT = 0x00;
    
        P1DIR = 0xFF;P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;
        P5DIR = 0xFF;P6DIR = 0xFF;P7DIR = 0xFF;P8DIR = 0xFF;
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、谢谢。  是的、在 LCD、CP 和 RTC 运行的情况下、我不能比1.6uA 做得更好。  我认为我的应用应该仍然很好…

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Alex:

    如果您没有其他问题、我可能会关闭此 TT。

    谢谢。