我的代码有问题; 我的目标是创建一个代码,从ADC每秒需要8000 - 10000的值。 现在我写了一个测试代码来配置ADC,但根据我的计算,ADC转换时间应该是:
* Tad=Tcy*(adcs+1)=(1/40)*4 = 1.6us
* Tc = 14 * 1.6 = 22.4 us
,但在MPLAB中,当我使用StopWatch时,我发现1次转换需要将近5 ms。
配置:
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;}