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에 출력하는 예제를 테스트 했다.