在ADC實驗中,結合熱敏電阻,分別透過觸控晶片表面和熱敏電阻,引起A/D值變化,顯示晶片內部溫度和當前溫度。
程式程式碼
//主函式
int main(void)
{
uint16_t num_AD1;
uint16_t num_AD2;
uint16_t num_AD3;
uint32_t mMainLoopCount; //主迴圈次數變數
//關總中斷
DISABLE_INTERRUPTS;
mMainLoopCount=0; //主迴圈次數變數
adc_init(ADC_CHANNEL_1,AD_DIFF); //初始化ADC通道1,
adc_init(ADC_CHANNEL_15,AD_DIFF); //初始化ADC通道15
adc_init(ADC_CHANNEL_TEMPSENSOR,AD_SINGLE); //初始化ADC通道:內部溫度
ENABLE_INTERRUPTS;
printf("------------------------------------------------------\n");
printf("金葫蘆提示: \n");
printf("(1)目的:ADC單端輸入與差分輸入測試 \n");
printf("(2)單端:內部溫度感測器,通道號17,無需引腳對應 \n");
printf(" 差分:GEC引腳47、46(通道1、2) \n");
printf(" GEC引腳12、11(通道15、16) \n");
printf("(3)測試方法:單端:手摸晶片表面,A/D值增大,不要摸 \n");
printf(" 到引腳,靜電可能損壞晶片 \n");
printf(" 差分:將引腳47接地、46接3.3V,觀察通道1情況\n");
printf(" 將引腳46接地、47接3.3V,觀察通道1情況\n");
printf(" 類似方法,觀察通道15 \n");
printf("------------------------------------------------------\n");
for(;;)
{
//主迴圈次數變數+1
mMainLoopCount++;
//未達到主迴圈次數設定值,繼續迴圈
//延時1秒
if (mMainLoopCount<=30000000) continue;
//達到主迴圈次數設定值,執行下列語句,進行燈的亮暗處理
//清除迴圈次數變數
mMainLoopCount=0;
num_AD1 = adc_ave(ADC_CHANNEL_1,8);
num_AD2 = adc_ave(ADC_CHANNEL_15,8);
num_AD3 = adc_ave(ADC_CHANNEL_TEMPSENSOR,8);
printf("通道1(GEC47、46)的A/D值: %d\r\n",num_AD1);
printf("通道1(GEC47、46)的溫度值: %f\r\n",Regression_Ext_Temp(num_AD1));
printf("通道15(GEC12、11)的A/D值:%d\r\n",num_AD2);
printf("通道15(GEC12、11)的溫度值:%f\r\n",Regression_Ext_Temp(num_AD2));
printf("內部溫度感測器的A/D值:%d\r\n",num_AD3);
printf("內部溫度感測器的溫度值:%f\r\n\n",Regression_MCU_Temp(num_AD3));
}
}
執行效果
使熱敏電阻升溫:
使 mcu 升溫: