1

我的代码有问题;我的目标是创建一个每秒从 ADC 获取 8000 - 10000 值的代码。现在我编写了一个测试代码来配置 ADC,但根据我的计算 ADC Time for Conversion 应该是:

* Tad=Tcy*(adcs+1)=(1/40)*4 = 1.6us
* Tc = 14 * 1.6 = 22.4 us

,但是在 MPLAB 中,当我使用 StopWatch 时,我发现 1 次转换需要将近 5 毫秒。

配置 :

DSPIC33FJ128MC802
FRC + PLL -> ~ 80 MHz
FCY 40 MHz

ADC配置功能

void adc_init(){

AD1CON1bits.ADON=0;
AD1CON1bits.AD12B = 1;
AD1CON1bits.FORM = 0; 
AD1CON1bits.SSRC = 0; //
AD1CON1bits.ASAM = 0; 
AD1CON2bits.CSCNA = 1;
AD1CON2bits.CHPS = 0; 
AD1CON2bits.SMPI = 0; 
AD1CON3bits.ADRC = 0;
AD1CON3bits.ADCS = 63; 
AD1CSSLbits.CSS3 = 1; 
AD1PCFGL=0xFFFF; 
AD1PCFGLbits.PCFG3 = 0;

IPC3bits.AD1IP = 6; 

AD1CON1bits.ADON = 1; }

读取 ADC 值的功能

unsigned int read_adc_value(void){
AD1CON1bits.SAMP = 1; // start 
//while(!AD1CON1bits.SAMP);
__delay_us(10);
AD1CON1bits.SAMP = 0; // stop 
while(!AD1CON1bits.DONE);
return ADCBUF0;}
4

0 回答 0