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출력
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 출력
{
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);
}
}
Delay(10);
}
}
반응형