본문 바로가기

[Microchip]/dsPIC33-SM

dsPIC33 DAC 테스트

dsPIC33 DAC 테스트


dsPIC33 에는 DAC모듈이 있다. Audio DAC라는 이름으로 거의 Audio전용의 DAC모듈이라 생각하면 된다.
이 모듈 이용하면 여러가지 활용도가 많을것 같아 테스트 하면서 정리해 본다.

Audio Digital-to-Analog Converter (DAC) 특징
• 16-bit resolution (14-bit accuracy)
• Second-Order Digital Delta-Sigma Modulator
• 256 X Over-Sampling Ratio
• 128-Tap FIR Current-Steering Analog Reconstruction Filter
• 100 KSPS Maximum Sampling Rate
• User controllable Sample Clock
• Input Frequency 45 kHz max
• Differential Analog Outputs
• Signal-To-Noise: 90 dB
• 4-deep input Buffer
• 16-bit Processor I/O, and DMA interfaces

dsPIC33 DAC블록도


DAC 출력 특성
16비트 DAC이므로 DSC1RDAT 레시스터에 값을 쓰면 아래와 같은 출력된다. 일반 DAC용도로 쓰려면 외부에 신호 변환 소자가 필요할것 같다.



[dsPIC33-SM EVM] 모듈의 핀맵
dsPIC33FJ128M804를 사용한 dsPIC-33 EVM모듈은 CN2의 RB11, RB12, RB13, RB14에 각각 연결되어 있다.





dsPIC DAC출력 테스트 동영상



dsPIC33 DAC 모듈 초기화 함수

void initDac(void)
{
 Sbi(AD1PCFGL, BIT6|BIT7);

 //Initiate DAC Clock
 ACLKCONbits.SELACLK = 0;  // FRC w/ Pll as Clock Source
 ACLKCONbits.AOSCMD = 0;  // Auxiliary Oscillator Disabled
 ACLKCONbits.ASRCSEL = 0;  // Auxiliary Oscillator is the Clock Source
 ACLKCONbits.APSTSCLR = 7;  // FRC divide by 1 

 DAC1STATbits.ROEN = 1;   // Right Channel DAC Output Enabled 
 DAC1STATbits.RMVOEN= 1;  // Right Channel DAC Output Enabled  

 DAC1STATbits.LOEN = 1;   // Left Channel DAC Output Enabled 
 DAC1STATbits.LMVOEN= 1;  // Left Channel DAC Output Enabled  
 DAC1DFLT = 0x8000;   // DAC Default value is the midpoint 
 
 // 103.16KHz   // 8.038KHz  // 44.211KHz // 25KHz
 DAC1CONbits.DACFDIV = 5;       //76;    //13;       // 23; //  // Divide High Speed Clock by DACFDIV+1
 
 // DAC1CONbits.FORM = 1;   // Data Format is signed integer
 DAC1CONbits.FORM = 0;   // Data Format is signed integer
 DAC1CONbits.AMPON = 0;   // Analog Output Amplifier is enabled during Sleep Mode/Stop-in Idle mode

 DAC1CONbits.DACEN = 1;   // DAC1 Module Enabled
}

//DAC 테이터 출력
#define DAC1Out(Data)                         while(DAC1STATbits.REMPTY != 1; DAC1RDAT = (Data);


dsPIC DAC 테스트 소스코드 - VR의 ADC값에 따라 DA출력
int main(void)
{
 int flag = 0;
 unsigned int adc_val = 0;
 SystemInit();

//Init LED
 Led1Init();
 Led2Init();

 DebugInit(BAUD_115200);
 DebugPrint("dsPIC33 DAC test Program\r\n");
 
 Led1On();
 Led2Off();

 //adc init
 AdcInit();
 initDac();

 while(1)
 {
  if(flag)
  {
   adc_val = AdcRead(0);
   printf("%d\r\n", adc_val);

   //DAC 출력
   DAC1Out(adc_val<<4);

   Delay(10);
  }

}

반응형