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.

MSP430FR2111: 1.5-V on-chip reference power down fail

Part Number: MSP430FR2111
Other Parts Discussed in Thread: MSP430FR5949,

Hi:

I refer to the image.When i enable internal reference, the ADC sample resault correctly,but the current consumption as higi as 60uA.

when i disable internal reference,the ADC sample resault error(10bit ADC :1023),the current consumption as low as 13uA.

void Init_ADC(void)
{
  P1SEL0 = BIT0 + BIT1;
  P1SEL1 = BIT0 + BIT1;
  
  ADCCTL0  &= ~(ADCENC);
  ADCCTL0 |= ADCON | ADCMSC | ADCSHT_2;                                // ADCON
  ADCCTL1 |= ADCSHP | ADCSHS_2 | ADCCONSEQ_1|ADCSSEL_1;   //  repeat single channel; TB1.1 trig sample start
  //ADCCTL2 |= ADCRES;                                        // 10-bit conversion results
  ADCMCTL0 |= ADCINCH_1 | ADCSREF_1;                        // A1 ADC input select; Vref=1.5V
  ADCIE |= ADCIE0;      
  
  PMMCTL0_H = PMMPW_H;                                      // Unlock the PMM registers
  PMMCTL2 |= INTREFEN;                                      // Enable internal reference
  __delay_cycles(400);                                      // Delay for reference settling    
   
   PMMCTL2 &=~ INTREFEN;  //disable internal reference: 13uA
                          //Comment  the statement   60uA
   
  ADCCTL0 |= ADCENC;                                        // ADC Enable
  // ADC conversion trigger signal - TimerB0.1 (32ms ON-period)
  TB0CCR0 = t1-1;                                         // PWM Period
  TB0CCR1 = t1-1;                                          // TB1.1 ADC trigger
  TB0CCTL1 = OUTMOD_3|CCIS_1;                                      // TB1CCR0 toggle
  TB0CTL = TBSSEL__ACLK | MC_1 | TBCLR;                     // ACLK, up mode
  ADC_num=1;
}


#pragma vector=ADC_VECTOR
__interrupt void ADC_ISR(void)
{
    switch(__even_in_range(ADCIV,ADCIV_ADCIFG))
    {        
        case ADCIV_ADCIFG:
        {
            ADC_Result[ADC_num] = ADCMEM0;
            if(ADC_num==0)
            {
                LPM3_EXIT;         
                ADCCTL0 &=~ ADCENC;  
                ADC_num=1; 
                ADCCTL0 |= ADCENC;
            }
            else
            {
                ADC_num--;
            }   
        }break;
        default:break;
    }  
}

  • Hi Shang,

    Please provide more details about your configuration when disable internal ref.

  • The following configuration:

    void Init_ADC(void)
    {
    P1SEL0 = BIT0 + BIT1;
    P1SEL1 = BIT0 + BIT1;
    
    ADCCTL0 &= ~(ADCENC);
    ADCCTL0 |= ADCON | ADCMSC | ADCSHT_2; // ADCON
    ADCCTL1 |= ADCSHP | ADCSHS_2 | ADCCONSEQ_1|ADCSSEL_1; // repeat single channel; TB1.1 trig sample start
    //ADCCTL2 |= ADCRES; // 10-bit conversion results
    ADCMCTL0 |= ADCINCH_1 | ADCSREF_1; // A1 ADC input select; Vref=1.5V
    ADCIE |= ADCIE0;
    
    ADCCTL0 |= ADCENC; // ADC Enable
    // ADC conversion trigger signal - TimerB0.1 (32ms ON-period)
    TB0CCR0 = t1-1; // PWM Period
    TB0CCR1 = t1-1; // TB1.1 ADC trigger
    TB0CCTL1 = OUTMOD_3|CCIS_1; // TB1CCR0 toggle
    TB0CTL = TBSSEL__ACLK | MC_1 | TBCLR; // ACLK, up mode
    ADC_num=1;
    }

  • Hi,

    As you code your REF source is selected as VREF1.5, but you didn't turn on the internal REF module in PMM register. Selected the AVCC and AVSS for ADCSREFx bit in ADCCTL0 register.

  • Hi,

    《MSP430FR4xx and MSP430FR2xx family User's Guide》21.2.4 Automatic Power Down describe:

    When the variable on-chip reference is selected, the internal reference is always on if INTREFEN = 1. If
    INTREFEN = 0, the reference is turned on only when an ADC conversion is triggered.

    also 《MSP430FR58xx, MSP430FR59xx, and MSP430FR6xx Family User's Guide》34.2.4 Auto Power Down describe:

    If REFON=1, the internal reference is on continually; otherwise, it is only requested when an ADC conversion is triggered.

       When i use MSP430FR5949,my REF source is selected as VREF(2.5V).The ADC sample resault correctly.the current consumption as low as 16uA.

    but when i use MSP430FR2111, the same effect was not achieved.

    FR5949 adc configuration:

    void ADC_init(void)
    {    
        P1SEL1 |= BIT1+BIT2+BIT4; //bat电池  DINT电流超大通道
        P1SEL0 |= BIT1+BIT2+BIT4;
            
        P2SEL1 |= BIT4; //取电电压C+
        P2SEL0 |= BIT4;
        
        P3SEL1 |= (BIT0+BIT1+BIT2);//电流通道2 电流通道1 电场采样
        P3SEL0 |= (BIT0+BIT1+BIT2);//+BIT3
        
        while(REFCTL0 & REFGENBUSY);
        REFCTL0 = REFVSEL_2;// | REFON;
        //while(REFCTL0 & REFGENRDY);//Reference voltage output is ready to be used
        
        ADC12CTL0 &= ~ADC12ENC;
        ADC12CTL0 |= ADC12ON|ADC12MSC; //          // Turn on ADC12, set sampling time
        ADC12CTL1 |= ADC12SHP|ADC12SHS_1| ADC12CONSEQ_1; //CSTARTADD_0++                // Use sampling timer, single sequence
        ADC12CTL2 |= ADC12RES_2|ADC12PWRMD;                 // 12-bit conversion results
        //ADC_ui();
       
        ADC12CTL3 &=~ ADC12TCMAP;
        ADC12CTL0 |=ADC12SHT0_1;
        ADC12MCTL0 = ADC12VRSEL_1+ADC12INCH_12;  //0001b = VR+ = VREF buffered, VR- = AVSS
        ADC12MCTL1 = ADC12VRSEL_1+ADC12INCH_14;
        ADC12MCTL2 = ADC12VRSEL_1+ADC12INCH_4+ADC12EOS;
        ADC12IER0 = 0x04;                              
        ADC12CTL0 |= ADC12ENC;
        
        TA0CCR0 = TIME_SAMPLE;//TIME_1MS;                         // PWM Period
        TA0CCR1 = TIME_SAMPLE;//TIME_1MS;                           // TACCR1 PWM Duty Cycle
        TA0CCTL1 = OUTMOD_3;//CCIE;// |                       // TACCR1 set/reset
        TA0CTL = TASSEL__ACLK | MC__UP;//|TAIE;           // ACLK, up mode     
    }
    

  • Hi Shang du,

    Check your PMMCTL2.INTREFEN should be set when you use internal 1.5V for ADC. You can check in debug mode when 3FF whether the INTREFEN is cleared.

**Attention** This is a public forum