[MSP430]/MSP430_FRAM2017. 3. 31. 05:11

MSP430FR2311 저전력 테스트

MSP430FR2311 저전력 테스트


CPU클럭을 1Mhz로 구동시키고 10bit ADC데이터를 300ms주기로 UART(115200bps)에 실어 보내는 예제를 테스트 해본 결과 320uA정도 전류를 소모한다.


UART로 전송할 때만 CPU를 깨우고 평소에는 LPM3 모드로 동작하도록 수정해 보았다.

이 상태에서도 280uA 정도 소비한다.


클럭을 낮추면 좀더 낮아지지 않을까? 하지만 UART를 115200로 구동하기 위해 1Mhz구동이 필요하다.



일반 MCU에 비교하면 특별한 처리 하지 않고도 상당히 낮은 전류 소모를 확인 할 수 있다.







MSP430G2553

1Mhz + UART -> 350uA - UART만 사용할 경우 

1Mhz + UART + ADC -> 650uA 

16Mhz 780uA



STM32F030

48Mhz 5800uA (레귤레이터 사용시 15mA)

8Mhz 5400uA

1Mhz 5000uA

Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430_FRAM2017. 3. 30. 00:42

[MSP430FR2311 EVM] FRAM 테스트

[MSP430FR2311 EVM] FRAM 테스트





MSP430FR2311 의 최대 장점은 FRAM이다. RAM의 장점인 쉽고 빠르게 Read/Write 하고, FLASH의 장점인 전원 Off시 데이터 유지하는 장점을 가지고 있어서 저전력의 데이터 로깅 시스템에 적용하기에 좋은것 같다.


이러한 MSP430의 FRAM에 읽고 쓰는 테스트 를 해 보았다.



MSP430F2311 FRAM 블록도





FRAM에 Write 하는 코드는 상당히 간단하다.


void FRAMWrite(unsigned long *FRAM_write_ptr, unsigned long Data)

{

    SYSCFG0 = FRWPPW;


    *FRAM_write_ptr = Data;


    SYSCFG0 = FRWPPW | PFWP;

}



void FRAMWriteBuffer(unsigned long *FRAM_write_ptr, unsigned long *pBuf, unsigned int Size)

{

    unsigned int i=0;


    SYSCFG0 = FRWPPW;

    for (i = 0; i < Size; i++)

    {

        *FRAM_write_ptr++ = pBuf[i];

    }

    SYSCFG0 = FRWPPW | PFWP;

}



MSP430FR2311의 FRAM 메모리 주소는 아래와 같이 FFFF-FF80, FFFF-FF100로 코드 메모리와 같이 사용할 수 있다. 예제에서는 FD00에서 테스트 했다.


Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430_FRAM2017. 3. 30. 00:42

[MSP430FR2311 EVM] ADC테스트 - 내장 온도 센서 테스트

[MSP430FR2311 EVM] ADC테스트 - 내장 온도 센서 테스트



MSP430FR2311 는 10bit, 12bit ADC가 8채널이 있다. 최대 200ksps 까지 변환 가능하기존 MSP430시리즈와 크게 차이는 없지만 FRAM을 사용하면 장점이 될만한 기능이 있는것 같다.



MSP430FR2311 ADC 블록도



MSP430FR2311 ADC 초기화 코드


    // Configure ADC - Pulse sample mode; ADCSC trigger

    ADCCTL0 |= ADCSHT_8 | ADCON;                                  // ADC ON,temperature sample period>30us

    ADCCTL1 |= ADCSHP;                                            // s/w trig, single ch/conv, MODOSC

    ADCCTL2 |= ADCRES;                                            // 10-bit conversion results

    ADCMCTL0 |= ADCSREF_1 | ADCINCH_12;                           // ADC input ch A12 => temp sense

    ADCIE |=ADCIE0;                                               // Enable the Interrupt request for a completed ADC_B conversion


    // Configure reference

    PMMCTL0_H = PMMPW_H;                                          // Unlock the PMM registers

    PMMCTL2 |= INTREFEN | TSENSOREN;                              // Enable internal reference and temperature sensor





MSP430FR2311 온도센서 특성 그래프



MSP430FR2311 ADC 인터럽트 핸들러

// ADC interrupt service routine

#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)

#pragma vector=ADC_VECTOR

__interrupt void ADC_ISR(void)

#elif defined(__GNUC__)

void __attribute__ ((interrupt(ADC_VECTOR))) ADC_ISR (void)

#else

#error Compiler not supported!

#endif

{

    switch(__even_in_range(ADCIV,ADCIV_ADCIFG))

    {

        case ADCIV_NONE:

            break;

        case ADCIV_ADCOVIFG:

            break;

        case ADCIV_ADCTOVIFG:

            break;

        case ADCIV_ADCHIIFG:

            break;

        case ADCIV_ADCLOIFG:

            break;

        case ADCIV_ADCINIFG:

            break;

        case ADCIV_ADCIFG:

            temp = ADCMEM0;

            // Temperature in Celsius

            // The temperature (Temp, C)=

            IntDegC = (temp-CALADC_15V_30C)*(85-30)/(CALADC_15V_85C-CALADC_15V_30C)+30;


            // Temperature in Fahrenheit

            // Tf = (9/5)*Tc | 32

            IntDegF = 9*IntDegC/5+32;

            //__bic_SR_register_on_exit(LPM3_bits);               // Exit LPM3


            break;

        default:

            break;

    }

}










Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430_FRAM2017. 3. 30. 00:38

[MSP430FR2311 EVM] UART 테스트

[MSP430FR2311 EVM] UART 테스트







MSP430FR2311 UART 초기화 코드

MSP430 UART Baudrate 설정 생성코드 참고


    // Configure UART pins

     P1SEL0 |= BIT6 | BIT7;                    // set 2-UART pin as second function



       // Configure UART

     UCA0CTLW0 |= UCSWRST;                     // Put eUSCI in reset

     UCA0CTLW0 |= UCSSEL__SMCLK;


     // Baud Rate calculation

     UCA0BR0 = 8;                              // 1000000/115200 = 8.68

     UCA0MCTLW = 0xD600;                 // 1000000/115200 - INT(1000000/115200)=0.68

                                                     // UCBRSx value = 0xD6 (See UG)

     UCA0BR1 = 0;

     UCA0CTLW0 &= ~UCSWRST;          // Initialize eUSCI



MSP430 에서 UART 보레이트 설정시 항상 문제가 되던 부분은 오차율인데... MCTLW 레지스터를 설정하면  보상 가능하다.


ex) 115200 @ 1Mhz 

1000000/115200 - INT(1000000/115200)=0.68

0.68 => 0.6667 -> 0xD6 





MSP430FR2311 UART 송수신 코드

unsigned char U0_GetByte(void)

{

while(!(UCA0IFG & UCRXIFG));

return UCA0RXBUF;

}


void U0_PutByte(unsigned char Data)

{

    UCA0TXBUF = Data;

    while(!(UCA0IFG & UCTXIFG));

}




참고로 CCS 에는 시리얼 포트 터미널창이 있어 간단히 UART 테스트를 해 볼수 있다.




Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430_FRAM2017. 3. 27. 13:47

[MSP430FR2311 EVM] 개발환경 설정 - CCS7 무료컴파일러 사용하기

[MSP430FR2311 EVM] 개발환경 설정 - CCS7 무료컴파일러 사용하기




MSP430FR2x 시리즈를 개발하기 위한 환경으로 IAR 최신 버전이 필요하다. 

MSP430 Kickstart 버전을 다운 받으려고 사이트 들어가니 CCSv7(Code Composer Studio V7) 가 무료(솔깃~)라고 한다.


이참에 CCS로 한번 테스트 해볼까?


우선 CCS를 다운 받자

Code Composer Studio V7Sv7     



프로그램 설치 후 MSP430FR2311 디바이스로 새로운 프로젝트를 생성한다. 특별히 설정할것 없이 그냥 간단하게 프로젝트 생성 가능하다.





간단히 LED제어 하는 예제 작성후 다운로드 해보자





다운로드 후 디버깅 환경으로 들어가고 문제 없이 디버깅 되는것을 확인할 수 있다.

예전 버전에서는 툴자체가 불안하고 느렸으며 설정도 복잡 했었는데..

상당히 깔끔하게 잘 동작 하는것 같다. 



앞으로 MSP430 개발에서는 CCS를 적극 활용하는 방향으로 진행해 봐야 할것 같다.



Posted by nexp

댓글을 달아 주세요