Dear Supporter,
如提, 芯片是dsPIC33CK32MP105, 這個芯片我第一次使用ADC, 好複雜, 我看了Datashet一周了, 還是搞不定.請求協助.
我的基本設定: 使用ADC中斷, 使用腳位AN0腳(如附圖), 代碼是MCC產生的.已經執行了ADC相關的代碼了。
我在方案中加入了一個AD 0_ENABLE()的測試代碼(如下方的while(1)中, 我在DEBUG模式中等待中斷發生,然後在中斷中發現ADC的結果都是0,
請問哪裡錯了? 因為無法附上我的方案, 所以我只能提問.
SYSTEM_Initialize();
ADC1_Initialize();
ADC1_Core0PowerEnable ( );
ADC1_SharedCorePowerEnable ( );
IO_Iintialize(); /* Initial set I/O */
//======================================================================
INTERRUPT_Initialize ();
INTCON1bits.NSTDIS = 0; /* Interrupt nesting enabled here */
INTCON2bits.GIE = 1; /*INTERRUPT_GlobalEnable();=INTCON2bits.GIE = 1;*/
while(1)
{
DISC=1;//放電
d_ms(10);
DISC=0;//充電到3.3v, 已經電阻1k焊接到3.3v
ADC1_ChannelSelect(channel_AN0);//選擇ADC的輸入腳位
ADC0_ENABLE();//開啟ADC
d_ms(1000); //在這裡等待ADC中斷產生, 並且已經在中斷設置了暫停點, 也有成功產生了中斷, 但是讀值永遠是0。
}
adc1.c代碼
void __attribute__ ( ( __interrupt__ , auto_psv, weak ) ) _ADCAN0Interrupt ( void )
{
uint16_t valchannel_AN0;
//Read the ADC value from the ADCBUF
valchannel_AN0 = ADCBUF0;
if(ADC1_channel_AN0DefaultInterruptHandler)
{
ADC1_channel_AN0DefaultInterruptHandler(valchannel_AN0);
}
V_AN0=valchannel_AN0; //中斷服務程序, 在這裡暫停檢查轉換的結果
//clear the channel_AN0 interrupt flag
IFS5bits.ADCAN0IF = 0;
}
//ADC的中斷服務程式
//================================================
void __attribute__ ( ( __interrupt__ , auto_psv, weak ) ) _ADCAN0Interrupt ( void )
{
uint16_t valchannel_AN0;
//Read the ADC value from the ADCBUF
valchannel_AN0 = ADCBUF0;
valchannel_AN0 = ADCBUF2;
valchannel_AN0 = ADCBUF3;
valchannel_AN0 = ADCBUF19;
valchannel_AN0 = ADCBUF20;
if(ADC1_channel_AN0DefaultInterruptHandler)
{
ADC1_channel_AN0DefaultInterruptHandler(valchannel_AN0);
}
V_AN0=valchannel_AN0;
//clear the channel_AN0 interrupt flag
IFS5bits.ADCAN0IF = 0;
}
|
你这个过程也有充放电过程,是也在做时间电压转换吗?