본문 바로가기

[MSP430]/MSP430F5x

[MSP430F5510 EVM] ADC 테스트

[MSP430F5510 EVM] ADC 테스트




MSP430F55x 으로 오면서 몇가지 페리들이 변경되었는데.. ADC도 약간의 레지스터 및 기능상 변화가 있었다.


MSP430F55xx ADC구조




MSP430F5510 ADC 초기화 코드
//ADC Initialize
void AdcInit(void)
{
  // Configure ADC10 - Pulse sample mode; ADC10SC trigger
  ADC10CTL0 = ADC10SHT_2 + ADC10ON;         // 16 ADC10CLKs; ADC ON
  ADC10CTL1 = ADC10SHP + ADC10CONSEQ_0;     // s/w trig, single ch/conv
  ADC10CTL2 = ADC10RES;                     // 10-bit conversion results
  ADC10MCTL0 = ADC10SREF_1 + ADC10INCH_0;  // AVcc/2 
 
  // Configure internal reference
  while(REFCTL0 & REFGENBUSY);              // If ref generator busy, WAIT
  REFCTL0 |= REFVSEL_0+REFON;               // Select internal ref = 1.5V
}



MSP430F5510 ADC Read함수
//Read ADC Value
unsigned int AdcRead(unsigned char port)
{
 unsigned int value = 0;
 
    ADC10MCTL0 = ADC10SREF_1 + (ADC10INCH_0 + port);  // AVcc/2 
 
 
    ADC10CTL0 |= ADC10ENC + ADC10SC;        // Sampling and conversion start
    while (ADC10CTL1 & ADC10BUSY);
   
    value = ADC10MEM0;

 return value;
}



MSP430F5510 ADC테스트 예제 소스코드
[EXP_DSP EVM] 확장 보드에 연결되어 있는 VR을 이용하여 MSP430의 10bit ADC출력 값을 시리얼 포트로 출력 하는 예제이다.
void main(void)
{
    unsigned int adc = 0;
    SystemInit();
   
    Led1Init();
    Led1On();

   //Serial Init
   DebugInit(BAUD_115200);
   DebugPrint("Serial Test Program.\r\n");
   
    //Init ADC
    AdcInit();
    
      while(1)
    {
        adc = AdcRead(0);
        DebugPrint("adc=%d\r\n", adc);

        Led1Toggle();
        Delay(300);
    }
}

반응형