ADuC7020 ADC error

void Adc_Interrupt(void)
AdCnvDat[0] = (ADCDAT>>16) & 0xfff;

float GetADC(void)
return (float)AdCnvDat[0];

void application(void)
while (1)
   printf("RAW : %d\t VOLT : %4.2f\r\n",(int)GetADC(),Conv_hex_to_vot(GetADC())*2);
   TICK = 0;


Input : DC Supply

R1, R2 are various

Blue line in image(in excel) is measured by multi-meter and Red line is (printed) ADC value.

I wonder why 0 value at lower 30% ~ 40%.

Sorry for my poor English.

  • 0
    •  Analog Employees 
    on Mar 22, 2011 5:19 AM

    I assume your multi-meter has a high impedance input, the ADuC702x ADC not - you need to provide a good Op-AMP in front of it, as on the Evaluation-Boards you can i.e. use a AD8606 or the single AD8605. Please also read the data-sheet pages 41 to 46 - specifically page 45 "Analog Input Structure" carefully. Also you can improve the performance by increasing the acquisition-time of the ADC - Bit 8 & 9 in the ADCCON MMR. Further you may get best results with a "CALIBRATION" as explained on page 46.

  • Thanks for answer.

    My test was in 16 clock acquistion-time. (max)

    After read your answer, I tested with various calibration value (0x000 ~ 0x3ff). Graph had some change, but lower 30% was still zero.

    I will insert OP-Amp my circuit. I will leave result either solve or don't solve.

    Thanks for answer again.