21ic问答首页 - ADC轉換問題, CORE0是正常的, SHARE使用AN3腳輸入, 結果是錯誤的
ADC轉換問題, CORE0是正常的, SHARE使用AN3腳輸入, 結果是錯誤的
edison吴2023-10-09
我的芯片是dspic33ck32mp105, 使用MCC產生代碼,
我使用了AN0(可以正常使用了), AN3,AN4(這兩個有問題)
我看讀取結果時是有正確讀取正確的BUFER值, 但是結果不對?
今天下午依照您的建議, 關掉CORE0的AN0, 及SHARE的AN4, 只保留了使用SHARE的AN3,
重新用MCC產生新的代碼, 結果仍然是錯的.輸入電壓是0V, 但是讀值都是1000以上? 為什麼?
相關代碼如下:
main中:
while(1)
{
uint16_t Value_ADC=0;
DO_ADC( channel_AN3); // 只使用SHARE的AN3,
Value_ADC=resultADC;
}
函數:
//== ADC=====(MCC產生)
void DO_ADC(uint8_t CH )
{
uint32_t conversion,i=0;
uint8_t channel=0;
ADC1_Initialize();
ADC1_Enable();
channel=CH;
//ADC1_ChannelSelect(channel);
ADC1_SoftwareTriggerEnable();
d_ms(1);
ADC1_SoftwareTriggerDisable();
while(!ADC1_IsConversionComplete(channel));
conversion = ADC1_ConversionResultGet(channel);
resultADC=conversion;
ADC1_Disable();
conversion=0;
}
//讀取值====(MCC產生)
inline static uint16_t ADC1_ConversionResultGet( ADC1_CHANNEL channel )
{
uint16_t result;
switch(channel)
{
case channel_AN3:
result = ADCBUF3; //有道這裡來讀值, 但是結果是錯的
break;
case channel_AN4:
result = ADCBUF4;
break;
case channel_AN19:
result = ADCBUF19;
break;
case channel_AN20:
result = ADCBUF20;
break;
case channel_AN0:
result = ADCBUF0;
break;
default:
break;
}
return result;
}
我使用了AN0(可以正常使用了), AN3,AN4(這兩個有問題)
我看讀取結果時是有正確讀取正確的BUFER值, 但是結果不對?
今天下午依照您的建議, 關掉CORE0的AN0, 及SHARE的AN4, 只保留了使用SHARE的AN3,
重新用MCC產生新的代碼, 結果仍然是錯的.輸入電壓是0V, 但是讀值都是1000以上? 為什麼?
相關代碼如下:
main中:
while(1)
{
uint16_t Value_ADC=0;
DO_ADC( channel_AN3); // 只使用SHARE的AN3,
Value_ADC=resultADC;
}
函數:
//== ADC=====(MCC產生)
void DO_ADC(uint8_t CH )
{
uint32_t conversion,i=0;
uint8_t channel=0;
ADC1_Initialize();
ADC1_Enable();
channel=CH;
//ADC1_ChannelSelect(channel);
ADC1_SoftwareTriggerEnable();
d_ms(1);
ADC1_SoftwareTriggerDisable();
while(!ADC1_IsConversionComplete(channel));
conversion = ADC1_ConversionResultGet(channel);
resultADC=conversion;
ADC1_Disable();
conversion=0;
}
//讀取值====(MCC產生)
inline static uint16_t ADC1_ConversionResultGet( ADC1_CHANNEL channel )
{
uint16_t result;
switch(channel)
{
case channel_AN3:
result = ADCBUF3; //有道這裡來讀值, 但是結果是錯的
break;
case channel_AN4:
result = ADCBUF4;
break;
case channel_AN19:
result = ADCBUF19;
break;
case channel_AN20:
result = ADCBUF20;
break;
case channel_AN0:
result = ADCBUF0;
break;
default:
break;
}
return result;
}
您需要登录后才可以回复 登录 | 注册