MSP430G2433 Timer interrupt 테스트

[MSP430]/MSP430-S | 2016.03.20 01:43
Posted by nexp

MSP430G2433 Timer interrupt 테스트


MSP430 시리즈는 종류가 많아서 시리즈마다 약간씩 설정 부분이 다른데... 기록해 둘 필요가 있는것 같다.

(개인적으로 TI는 통합해서 설정할 수 있도록 코드를 정리 해 줬으면 좋겠다. 출시 될때마다 조금씩 바껴서 불편한점이 많다.)



MSP430G 타이머 초기화 코드

#define enable()                            __bis_SR_register(GIE)


#define TIMER0_VALUE                        8000 //@ 8Mhz -> 1ms

#define Timer0Set(Value)     (CCR0  +=  Value)  


void InitTimer0(void)

{

    //타이머 초기화

    TACTL = TASSEL_2 + MC_2;                  // SMCLK, Contmode


    CCR0 = 8000;

    CCTL0 = CCIE;                  // CCR0 toggle, interrupt enabled    

}





MSP430G 타이머 인터럽트 핸들러

//------------------------------------------------------------------------------

// Timer_A  -  Interrupt Handler

//------------------------------------------------------------------------------

#pragma vector = TIMER0_A0_VECTOR

__interrupt void Timer_A0_ISR(void)

{

    //Led1Toggle();


    gTimeTick++;

    Timer0Set(TIMER0_VALUE);

}






MSP430i - SD24 내장 온도센서 테스트 (휴대폰 블루투스를 이용한 온도 그래프표시)





MSP430i 시리즈는 저가격의 스마트 미터링 분야에 적용하기 좋은 MCU이다. 

이러한 특징에 맞게 MSP430i2041과 블루투스를 이용하여 온도를 측정 하고 스마트폰으로 확인할 수 있는 예제를 작성해 보았다.


MSP430i 시리즈에는 자체 내부 온도 센서가 내장되어 있다. 이를 이용하면 좀더 간단하게 온도 데이터를 획득할 수 있다.



MSP430 내부 온도 센서 특성 그래프



  Vsensor = 1.32mV * DegK + Vsensor_offset (assuming 0mv for offset)

  Vsensor = (SD24MEM0)/32767 * Vref(mV)


  DegK = (SD24MEM0 * 1200)/32767/2.158 = (SD24MEM0 * 1200)/70711

  DegC =  DegK - 273

  DegF = (DegC * 9/5) + 32





MSP430 내부 온도 센서 초기화 코드

A0.6+           A0.6-




void ADC_Init(void)

{

    SD24CTL = SD24REFS;                         // Internal ref

    SD24CCTL0  |= SD24SNGL | SD24DF | SD24IE;   // Enable interrupt

    SD24INCTL0 |= SD24INCH_6;                   // Internal temp sensor

}





MSP430i 온도센서 테스트 동영상

MSP430i 내장온도센서의 온도데이터를 블루투스를 통해 스마트폰으로 전송하고 그래프로 표시하는 테스트





MSP430i SD24 내장 온도센서 테스트 코드
void main(void)
{
unsigned int cnt = 0;
    SystemInit();

Led1Init();
Led1On();

U0_Init(BAUD_57600);
DebugPrint("MSP430 ADC Test\r\n");
    
    
    ADC_Init();

        
    __delay_cycles(3200);                          // Delay ~200us for 1.2V ref to settle

    while(1) {
        SD24CCTL0 |= SD24SC;                    // Set bit to start conversion
        __bis_SR_register(LPM0_bits | GIE);     // Enter LPM0 w/ interrupts
        __no_operation();                       // For debugger

        // Calculate Temperatures in different scales
        results[1] = ((unsigned long)results[0] * 1200)/70711;
        results[2] = results[1] - 273 + TEMP_OFFSET;
        DebugPrint("%d\n", results[2]);
        Delay(1000); 
        __no_operation();                       // SET BREAKPOINT HERE
    }
}



MSP430i SD24 - ADC24 테스트

[MSP430]/MSP430i | 2015.06.07 22:30
Posted by nexp

MSP430i SD24 - ADC24 테스트




MSP430i 시리즈는 산업용 스펙을 만족하면서 저렴하게 구현할 수 있는 24bit ADC를 내장하고 있다.   MSP430AFE 시리즈의 ADC24 제어와 거의 유사하게 제어 가능하다.


- 24비트 ADC Second-order sigma-delta architecture

- 최대 7채널 연속 샘플링 ADC

- Fixed 1.024-MHz modulator input frequency

- 내부/외부 레퍼런스 선택 ?oftware selectable internal or external voltage reference

- 내부 온도센서



MSP430i ADC24 블록도

내부 레퍼런스 1.2V가 내장되어 있고 PGA16까지 가능하며 diff 로 입력 가능하다.




24bit ADC 결과값 저장 레지스터

ADC24 결과 레지스터는 16비트 레지스터로 SD24MEMx 레지스터에 저장된다. MSP430코어 자체가 16비트 이므로 16트로 된것 같다.

결국 16비트 레지스터를 두번 읽어서 24비트로 만들 수 있다. SD24CCTLx 레지스터의 SD24LSBACC (bit 6)에 의해 상위 16 bits 또는 하위 16 bits의 데이터를 읽을 수 있다.

아날로그 디바이스사의 24bit ADC 내장 MCU Adum360 과 비교 (ADucM360 24bit ADC 테스트) 하면 ADC 버퍼라던지 32bit 레지스터와 같이 부족한것이 많이 있지만 가격대 성능비로 봐야 할것 같다.


아래 그림과 같이 OSR 설정에 따라 30bit 범위에서 두번 읽어 24bit ADC값을 취할수 있다.

그리고 LSBTOG = 1, LSBACC = 0으로 설정하면 SD24MEMx을 읽을 때마다 MSB 측 데이터와 LSB 측 데이터가 교대로 읽어 낼 수 있다.






 


MSP430i ADC24 테스트 동영상

가변저항(VR)의 전압 변화 값을 블루투스 모듈을 이용하여 핸드폰으로 전송하고 그래프로 출력 하는 테스트





한가지 아쉬운점은 유니폴러 지원을 하지 않는다. 에너지 미터링 쪽으로 특화 되서 그런지 기존 AFE 시리즈에서 제공하던 유니폴러 모드가 더이상 지원되지 않는다. 단전원 측정시에는 절반 밖에 측정이 안되기 때문에 해상도 면에서 불리하다고 할 수 있다.







MSP430i 24bit ADC(ADC24) 초기화 코드

void ADC_Init(void)

{

unsigned char i;

/*

    SD24CTL = SD24REFS;                            // Internal ref

    SD24CCTL0  |= SD24GRP | SD24DF;                // Group with CH1

    SD24CCTL1  |= SD24GRP | SD24DF;                // Group with CH2

    SD24CCTL2  |= SD24IE | SD24DF;                 // Enable interrupt

    */

    SD24CTL = SD24REFS;                         // Internal ref

    SD24CCTL0  |= SD24DF | SD24IE;              // Enable interrupt


    __delay_cycles(3200);                       // Delay ~200us for 1.2V ref to settle


    SD24CCTL0 |= SD24SC;                        // Set bit to start conversion

    __bis_SR_register(LPM0_bits | GIE);         // Enter LPM0 w/ interrupts

}




MSP430i 24bit ADC(ADC24) 결과 처리 인터럽트 코드

SD24MEMx 레지스터에서 16비트 결과값을 가져와 처리할 수 있다.

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

#pragma vector=SD24_VECTOR

__interrupt void SD24_ISR(void) {

#elif defined(__GNUC__)

void __attribute__ ((interrupt(SD24_VECTOR))) SD24_ISR (void)

#else

#error Compiler not supported!

#endif


    unsigned int val;

    unsigned int val2;

    

    switch (__even_in_range(SD24IV,SD24IV_SD24MEM3)) {

        case SD24IV_NONE: break;

        case SD24IV_SD24OVIFG: break;

        case SD24IV_SD24MEM0: break;

        case SD24IV_SD24MEM1: break;

        case SD24IV_SD24MEM2:

                   Cbi(SD24CCTL0, SD24LSBACC);

                   gAdch_Ch0 += SD24MEM0;

                   gAdch_Ch1 += SD24MEM1;

                   gAdch_Ch2 += SD24MEM2;


                   //하위 16비트 데이터

                   Sbi(SD24CCTL0, SD24LSBACC);

                   gAdcl_Ch0 += SD24MEM0 & 0xFF;

                   gAdcl_Ch1 += SD24MEM1&0xFF;

                   gAdcl_Ch2 += SD24MEM2&0xff;

                   index++;

                   




MSP430i 24bit ADC 성능 테스트

레퍼런스 전압을 고정하고 데이터 수집한 결과를 보면 2비트 정도 흔들리는것 같다. 저렴한 가격에 이정도 성능이라면 상당히 훌륭한것 같다.

64로 평균필터 돌리니 거의 안정적이다. 16비트모드에서 1~2정도 흔들린다.

다만 리니어리티가 좀 떨어지는것 같다.



MSP430i2041 - 시리얼 통신 테스트




MSP430i 시리즈의 코어는 MSP430코어 이므로 전체 코드에서는 크게 달라질 사항이 없지만 테스를 위해 가장 먼저 시리얼 통신부터 연결해서 테스트 해 보도록 하자.


MSP430i시리즈이 UART는 MSP430AFE 시리즈와 거의 유사 하지만 새로운라인업이 추가되고 컴파일러가 업그레이드 되면서 레지스터 명이 많이 변경되어 코드 자체는 호환이 안되는것 같다. 





약간의 수정을 하면 기존 코드와 호환해서 사용가능하다.


MSP430i2041 UART 초기화 코드

void U0_Init(unsigned char baud)

{

    P1SEL0 |=   BIT2 | BIT3;            // P1.2/3 eUSCI_A Function

    P1SEL1 &= ~(BIT2 | BIT3);


    UCA0CTL1 |= UCSWRST;                // Hold eUSCI in reset

    UCA0CTL1 |= UCSSEL_2;               // SMCLK

    UCA0BR0   = 142;                    // 115200 baud

    UCA0BR1   = 0;

    UCA0MCTLW = 0x2200;                 // 16.384MHz/115200 = 142.22 (See UG)

    UCA0CTL1 &= ~UCSWRST;               // Release from reset

}





MSP430i2041 UART 송수신 코드

#define TXBUF0          UCA0TXBUF  

#define RXBUF0          UCA0RXBUF



void U0_PutByte(unsigned char Data)

{

    

    //while (!(U0TCTL & TXEPT));

    while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?

    TXBUF0 = Data;

}


unsigned char U0_GetByte(void)

{

    //while(!(IFG1 & URXIFG0));

    while (!(UCA0IFG&UCRXIFG));

    return RXBUF0;

}




MSP430i2041 UART 테스트 예제 코드

#include "system.h"

#include "serial.h"


void main(void)

{

unsigned int cnt = 0;

    SystemInit();

Led1Init();

Led1On();


U0_Init(BAUD_115200);

DebugPrint("MSP430i Serial Test\r\n");

while(1)

{

if(U0_IsGetByte())

{

  switch(U0_GetByte())

  {

  case '+':

  DebugPrint("Cnt=%d\r\n", cnt++);

  break;

 

case '-':

DebugPrint("Cnt=%d\r\n", cnt--);

break;  

  }

}

Led1Toggle();

Delay(200);

}








MSP430i - 개발환경설정 (IAR Embedded Workbench Kickstart)





MSP430i 시리즈를 사용하려면 최신의 컴파일러가 필요하다. CCS, IAR 모두 가능하고 IAR의 경우 TI에서 제공하는 무료 버전을 이용하면 8kByte 까지 지원 가능하다.


IAR-KICKSTART:
IAR-KICKSTART FOR MSP430

http://supp.iar.com/Download/SW/?item=EW430-EVAL



최신의 IAR(Version 6.30.2)은 기존의 IAR설정 방법과 동일하며 디바이스 타입에서 MSP430i2041 로 설정 해 주면 된다.

(참고로 예전 버전에서는 다운로드가 되지 않는다. 특히 ez-430과 같은 USB-FET 에서 지원을 하지 하지 않고 있다.)




그리고 기존 코드에서 config.h에서 헤더파일만 수정해 주면 문제 없이 컴파일 가능하다.

#include  <MSP430i2041.h>

MSP430FR5739 EVM - ADC테스트 (전압값에 따라 게이지 그래프 표시 하기)

 


ADC10_B features include:

- Greater than 200-ksps maximum conversion rate

- Monotonic 10-bit converter with no missing codes

- REF Module 1.5V, 2V and 2.5V

- Sample-and-hold with programmable sampling periods controlled by software or timers

- Conversion initiation by software or different timers

- Software-selectable on chip reference using the REF module or external reference

- Twelve individually configurable external input channels

- Conversion channel for temperature sensor of the REF module

- Selectable conversion clock source

- Single-channel, repeat-single-channel, sequence, and repeat-sequence conversion modes

- Window comparator for low-power monitoring of input signals

- Interrupt vector register for fast decoding of six ADC interrupts (ADC10IFG0, ADC10TOVIFG,

ADC10OVIFG, ADC10LOIFG, ADC10INIFG, ADC10HIIFG)




MSP430FR5739 ADC 블록도




MSP430FR5739 ADC 초기화 함수

ADC에 사용할 포트를 설정하고 레퍼런스 및 해상도를 설정할 수 있다.

 // Sampling and conversion start

#define ADC_Start()               (ADC10CTL0 |= ADC10ENC + ADC10SC);       


void AdcInit()

{

    // Configure ADC

    P3SEL1 |= BIT0; 

    P3SEL0 |= BIT0; 

  

    ADC10CTL0 |= ADC10SHT_2 + ADC10ON;        // ADC10ON, S&H=16 ADC clks

    ADC10CTL1 |= ADC10SHP;                    // ADCCLK = MODOSC; sampling timer

    ADC10CTL2 |= ADC10RES;                    // 10-bit conversion results

    ADC10MCTL0 |= ADC10INCH_12;                // A1 ADC input select; Vref=AVCC

    ADC10IE |= ADC10IE0;                      // Enable ADC conv complete interrupt 

}


 

ADC 제어 레지스터 - 채널 설정


 

 

MSP430FR5739 ADC 테스트 동영상

 


MSP430FR5739 ADC 테스트 예제코드

unsigned int ADC_Result;


//-----------------------------------------------------------------------------

void main(void)

{

    unsigned int cnt = 0;


    SystemInit();

    

    Led1Init();

    Led1On();

//Serial Init

DebugInit(BAUD_115200);

DebugPrint("ADC Test Program.\r\n");


AdcInit();

    while(1)

    {

        __delay_cycles(5000);

        ADC_Start();        // Sampling and conversion start

        __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit

        __no_operation();


        DebugPrint("adc=%d\r\n", ADC_Result);

    }

}

//-----------------------------------------------------------------------------





// ADC10 interrupt service routine

#pragma vector=ADC10_VECTOR

__interrupt void ADC10_ISR(void)

{

  switch(__even_in_range(ADC10IV,12))

  {

    case  0: break;                          // No interrupt

    case  2: break;                          // conversion result overflow

    case  4: break;                          // conversion time overflow

    case  6: break;                          // ADC10HI

    case  8: break;                          // ADC10LO

    case 10: break;                          // ADC10IN

    case 12: ADC_Result = ADC10MEM0;         

             __bic_SR_register_on_exit(CPUOFF);                                              

             break;                          // Clear CPUOFF bit from 0(SR)                         

    default: break; 

  }  

}



MSP430FR5739 EVM - eUSCI SPI 통신 테스트

 

 

MSP430FR5739의 SPI역시 기존과 약간의 변화가 있는것 같다.

설계 할때 잘 해둘필요가 있는데... 아무튼 다시 한번 정리해 본다.

 

 

MSP430FR5739 SPI 블록도
 




MSP430FR5739 SPI 핀맵 설정

SEL 레지스터를 이용하여 SPI기능을 할당할 수 있다. 다른 MSP430시리즈와 달리 SEL0, SEL1으로 두개의 레지스터가 있다.

//USCIA1 for MSP430FR5739

#define _SPI1_PxSEL   P2SEL0

#define _SPI1_PxSEL1   P2SEL1

#define _SPI1_PxDIR   P2DIR

#define _SPI1_PxIN   P2IN


#define _SPI1_SIMO   BIT5

#define _SPI1_SOMI   BIT6

#define _SPI1_UCLK   BIT4



//SPI Port Init

Cbi(_SPI1_PxSEL, (_SPI1_UCLK|_SPI1_SOMI|_SPI1_SIMO));

Sbi(_SPI1_PxSEL1, (_SPI1_UCLK|_SPI1_SOMI|_SPI1_SIMO));


// SPI option select

Sbi(_SPI1_PxDIR, (_SPI1_UCLK|_SPI1_SOMI|_SPI1_SIMO));






MSP430FR5739 SPI 초기화 함수


void SPI1_Init(void) // SPI 통신 초기화 함수

{

    // Initialize USART state machine

UCB0CTL1 &= ~UCSWRST;

//SPI Port Init

Cbi(_SPI1_PxSEL, (_SPI1_UCLK|_SPI1_SOMI|_SPI1_SIMO));

Sbi(_SPI1_PxSEL1, (_SPI1_UCLK|_SPI1_SOMI|_SPI1_SIMO));


// SPI option select

Sbi(_SPI1_PxDIR, (_SPI1_UCLK|_SPI1_SOMI|_SPI1_SIMO));

UCA1CTLW0 |= UCSWRST;                     // **Put state machine in reset**

UCA1CTLW0 |= UCMST+UCSYNC+UCCKPL+UCMSB;   // 3-pin, 8-bit SPI master

// Clock polarity high, MSB

UCA1CTLW0 |= UCSSEL__SMCLK;                    // SMCLK


UCA1CTLW0 &= ~UCSWRST;                    // **Initialize USCI state machine**

//UCA1IE |= UCRXIE;                         // Enable USCI_A0 RX interrupt

}





MSP430FR5739 송수신 함수

#define SPI1_WRITE_BYTE(x)                 UCA1TXBUF = (x);

#define SPI1_READ_BYTE() UCA1RXBUF

#define SPI1_WAIT_FOR_SEND()             while (!(UCA1IFG&UCTXIFG))

#define SPI1_WAIT_FOR_RX() while (!(UCA1IFG&UCRXIFG))



unsigned char SPI1_WriteReadByte(unsigned char Data)

{

//SPI TXBUF 데이터 있는가 확인

SPI1_WAIT_FOR_SEND();

//데이터 전송

SPI1_WRITE_BYTE(Data);


//SPI 데이터가 수신되면

SPI1_WAIT_FOR_RX();

return SPI0_READ_BYTE();

}






인터럽트로 처리할 경우

extern RINGBUFFER gUartBuffer;


#pragma vector=USCI_A0_VECTOR

__interrupt void USCI_A0_ISR(void)

{    

    switch(__even_in_range(UCA0IV,0x08))

    {

      case 0: break; // Vector 0 - no interrupt

      case 2:  // Vector 2 - RXIFG


SetRingBuffer(&gUartBuffer, UCA0RXBUF);

        break;

      default:

        break;

    }

}



MSP430FR5739 EVM - eUSCI UART테스트

MSP430F5739는 eUSCI(enhanced universal serial communication interface) 라고 하는 통신 인터페이스가 적용되었다고 한다.

새로운 기능으로 추가되는것은 좋지만 기존 코드를 좀 쓸수 있었으면 좋겠는데... 레지스터명이나 기능들이 또 바뀌어 있다.

설계 할때 잘 해둘필요가 있는데... 아무튼 다시 한번 정리해 본다.


 

 

MSP430FR5739 UART 블록도



 

MSP430FR5739 UART 초기화 함수

// Serial Prot0 Utility Fuction Routine
void U0_Init(unsigned char baud)

  U0_SetBaud(baud);
 //set Baudrate
 //---------------------------------------------------------

    UCA0CTL1 |= UCSWRST;    


    // Configure UART pins
    P2SEL1 |= BIT0 + BIT1;
    P2SEL0 &= ~(BIT0 + BIT1);

 


    UCA0CTL1 = UCSSEL__SMCLK;                 // UCSSEL__SMCLK = 32768 as UCBRCLK

 

   UCA0CTL1 &= ~UCSWRST;

}


 

MSP430FR5739 UART 송수신 함수

#define u0_WaitForReceive()     while((UCA0IFG&UCRXIFG) == 0)
#define u0_RxData()        (UCA0RXBUF)

#define u0_TxData(Data)      (UCA0TXBUF = (Data))
#define u0_WaitForSend()     while (!(UCA0IFG&UCTXIFG));

#define u0_IsReceiveData()     (UCA0IFG&UCRXIFG)
#define u0_RXINT_EN()      (IE2 |= UCA0RXIE)  

 

unsigned char U0_GetByte(void)
{
 u0_WaitForReceive();
 return u0_RxData();
}

 

void U0_PutByte(unsigned char Data)
{
 u0_WaitForSend();
 u0_TxData(Data);
}

 


 

[MSP430] Falsh Write - EEPOM 처럼 사용하기

 

MSP430은 EEPROM이 없고 대신 Flash 영역에 데이터를 저장할 수 있다. 실행 중에 Flash 영역에  저장할 수 있기 때문에 변경 될수 있는 설정 파라미터를 저장하기에 좋을것 같다.

 

#define _SEG_C_ADDR                     0x1040

 


void falsh_wrte(unsigned char *pBuf, int Size)
{
  char *Flash_ptr;                          // Flash pointer
  unsigned int i;

  Flash_ptr = (char *)_SEG_C_ADDR;              // Initialize Flash pointer
  FCTL2 = FWKEY + FSSEL0 + FN1;             // MCLK/3 for Flash Timing Generator
    
  FCTL1 = FWKEY + ERASE;                    // Set Erase bit
  FCTL3 = FWKEY;                            // Clear Lock bit
  *Flash_ptr = 0;                           // Dummy write to erase Flash segment

  FCTL1 = FWKEY + WRT;                      // Set WRT bit for write operation

  for (i=0; i<Size; i++)
  {
    *Flash_ptr++ = pBuf[i];                   // Write value to flash
  }

  FCTL1 = FWKEY;                            // Clear WRT bit
  FCTL3 = FWKEY + LOCK;                     // Set LOCK bit
}

 

void flash_read(unsigned char *pBuf, int Size)
{
  char *Flash_ptrC;                         // Segment C pointer
  unsigned int i;

  Flash_ptrC = (char *)_SEG_C_ADDR;             // Initialize Flash segment C pointer

  for (i=0; i<Size; i++)
  {
    pBuf[i] = *Flash_ptrC++;          // copy value segment C to segment D
  }

}

[MSP430AFE EVM] 24bit ADC테스트 - LCD에 ADC24 데이터 그래프 표시하기

 

 

MSP430AFE2xx 의 가장 큰 특징은 24bit ADC를 내장하고 저전력, 저가격의 MCU이다.

ADC특징을 보면 아래와 같다.

 

Features of the SD24_A include
-Up to three 24-bit second-order ΣΔ ADC
- Differential inputs o Simultaneous sampling
- Oversampling of up to 1024
- Integrated Programmable Gain amplifier of gains up to 32
- Integrated temperature and voltage sensor
- Integrated accurate 1.2V ADC reference with 18ppm/ ºC

 

 

MSP430AFE253은 DIFF 3채널의 24bit ADC가 있다.

 

 

 

 

MSP430AFE2xx ADC24블록도

 

 

 

 

MSP430 ADC24 출력 포멧

24bit ADC 이지만 출력레지스터 SD24MEMx는 16비트 레지스트 이고 24bit를 읽기 위해서는 SD24CCTLx의 SD24LSBACC비트를 설정해 주어야 한다.

SD24LSBACC = 0 -> 상위 16비트

SD24LSBACC = 1 -> 하위 16비트

 

 

 

MSP430 AFE ADC24 초기화

    SD24CTL = SD24REFON+SD24SSEL0;            // 1.2V ref, SMCLK
    SD24CCTL0 |= SD24IE + SD24DF;            // CH0, enable interrupt

 

    for (i = 0; i < 0x3600; i++);             // Delay for 1.2V ref startup

 

 

 

ADC 인터럽트 처리 코드

24bit로 데이터 받으면 값이 좀 이상하다.(아무래도 오버샘플링으로 비트수를 늘이는것 같은데, 이부분은 좀더 들여다 봐야 할것 같다.)

우선 상위 16비트만을 이용해 처리하도록 했다.

 #pragma vector=SD24_VECTOR
__interrupt void SD24AISR(void)
{
  switch (SD24IV)
  {
  case 2:                                   // SD24MEM Overflow
    break;

 

  case 4:                                   // SD24MEM0 IFG

      //하위 16비트 데이터
      Sbi(SD24CCTL0, SD24LSBACC);
      adc_value = SD24MEM0;

 

      //상위 16비트 데이터

      Cbi(SD24CCTL0, SD24LSBACC);
      //adc_value = (SD24MEM0<<16) | adc_value;

      adc_value = (SD24MEM0);
    break;


  case 6: 


    break;
  case 8:                                   // SD24MEM2 IFG
                       // Save CH2 results (clears IFG)
    break;
  }

   __bic_SR_register_on_exit(LPM0_bits);    // Exit LPM0
}

 

 

 

 

 

MSP430AEF ADC24 테스트 동영상

24bit ADC A0, A1에 연결되 VR값을 TFT LCD에 출력하는 예제를 테스트 했다.

 

블로그 이미지

nexp

카테고리

분류 전체보기 (1550)
[MyProject] (48)
[TI] (75)
[NXP] (51)
[ST_MICRO] (129)
[FreeScale] (31)
[MSP430] (139)
[Microchip] (131)
Cortex-M (36)
[ATMEL] (29)
[AnalogDevice] (22)
[Embedded] (2)
ARM9 (24)
[AVR] (80)
[DSP] (111)
[8051] (21)
[MCU] (50)
[INTERFACE] (210)
[AppBoard] (23)
[ROBOT] (25)
[MODULE] (127)
[SENSOR] (41)
[DATA] (21)
[FPGA] (29)
[EVB] (1)
[Proramming] (38)
[MyLog] (6)
[IDEA] (0)
[Utility] (19)
[Book] (24)
취미생활 (4)
[Link] (2)