我的代码有问题;我的目标是创建一个每秒从 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;}