[DSP]/PICCOLO2011. 5. 4. 21:30

[TMS320F28069 EVM] ADC테스트 - TFT LCD에 VR값 표시

[TMS320F28069 EVM] ADC테스트 - TFT LCD에 VR값 표시



[TMS320F28069 EVM]에는 7개의 12비트 ADC를 할당해 두었다.
새로운 PICCOLO시리즈는 ADC쪽 기능이 향상되었다고 하는데.. 좀더 깊이 있는내용은 추후에 진행 하도록 하고 일단 기존 TMS320F2808 EVM예제를 포팅해서 간단한 테스트를 진행 해 보려고 한다.

TMS320F28069 ADC블록도



ADC부분은 기존 TMS320F2808 과 비교해 변화된 부분이 있으므로 수정이 필요하다. 레지스터명도 달라지고.. 구조 자체도 변경되었기 때문에 ADC.c 에 있는 초기화 함수를 수정해 주었다.

void AdcInit(void)
{
       InitAdc();

// Configure ADC
 EALLOW;
    AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1; // Enable non-overlap mode
 AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //ADCINT1 trips after AdcResults latch
 AdcRegs.INTSEL1N2.bit.INT1E     = 1; //Enabled ADCINT1
 AdcRegs.INTSEL1N2.bit.INT1CONT  = 0; //Disable ADCINT1 Continuous mode
    AdcRegs.INTSEL1N2.bit.INT1SEL  = 1;    // setup EOC1 to trigger ADCINT1 to fire
    AdcRegs.ADCSOC0CTL.bit.CHSEL  = 4;    // set SOC0 channel select to ADCINA4
    AdcRegs.ADCSOC1CTL.bit.CHSEL  = 2;    // set SOC1 channel select to ADCINA2
    AdcRegs.ADCSOC0CTL.bit.TRIGSEL  = 5;    // set SOC0 start trigger on EPWM1A, due to round-robin SOC0 converts first then SOC1
    AdcRegs.ADCSOC1CTL.bit.TRIGSEL  = 5;    // set SOC1 start trigger on EPWM1A, due to round-robin SOC0 converts first then SOC1
 AdcRegs.ADCSOC0CTL.bit.ACQPS  = 6; //set SOC0 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)
 AdcRegs.ADCSOC1CTL.bit.ACQPS  = 6; //set SOC1 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)
 EDIS;
}


ADC 읽기 함수
//Read ADC Value
unsigned int AdcRead(unsigned char Channel)
{
 AdcChanSelect(Channel);

 //Force start of conversion on SOC0
 AdcRegs.ADCSOCFRC1.all = 0x01;

 //Wait for end of conversion.
 while(AdcRegs.ADCINTFLG.bit.ADCINT1 == 0){}  //Wait for ADCINT1
 AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;        //Clear ADCINT1

    asm(" RPT #11 || NOP");
    return (AdcResult.ADCRESULT0);
}



TMS320F28069 EVM ADC테스트 동영상
[EXP-DSP EVM]  ADC0에 연결되어 있는 VR을 가변하여 ADC값을 측정하고 이값을 TFT-LCD에 출력하는  테스트를 해 보았다.



Posted by nexp

댓글을 달아 주세요