Hi PRATIBHA,
When #ifdef _EXTERNAL_CLOCK
fREF = fOSC/(REFDIV + 1) = 20MHz/(3+1) = 5MHz
fVCO = 2 * fREF * (SYNDIV + 1) = 2*5MHz*(4+1)=50MHz
fPLL = fVCO/(POSTDIV + 1) = 50MHz/(1+1) = 25MHz
fBUS = fPLL/2 = 25MHz/2 = 12.5MHz
else
fREF = fIRC1M = 1MHz //incorrect REFFRQ value
fVCO = 2 * fREF * (SYNDIV + 1) = 2*1MHz*(4+1)=10MHz //invalid fVCO, it has to be at least 32MHz
fPLL = fVCO/(POSTDIV + 1) = 10MHz/(1+1) = 5MHz
fBUS = fPLL/2 = 5MHz/2 = 2.5MHz
So, the #ifdef _EXTERNAL_CLOCK condition may be dangerous in your code. I would like to recommend add #else with PLL parameters for internal IRC clock as source.
Now, I let’s assume that you have fBUS = 12.5MHz.
Maximum fATDCLK is 8.33MHz
The ADC prescaler value is zero at your code (ADC0TIM=0;).
So, fATDCLK= fbus / (2x(reg.value + 1)) = 6.25MHz
Per your commands, the sample time is 4 ADC clocks
The ADC Conversion Period for 12bit is 19~39 ADC clocks, where we will calculate with 19 due to shortest sample time.
ADC Conversion Period = 19/fATDCLK = 3.04us.
I hope it helps you.
Have a great day,
Radek
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------