2013-08-17 36 views
0

我正在PIC16F887,我的任務主要是基於adc讀數(8位)。 有10個不同的模擬輸入,所以逐個讀取它們需要相當長的時間。 時鐘是20Mhz,adc的唯一允許設備頻率是Fosc/32(對於20mhz時鐘當然),其中TAD = 1.6us的測試結果在TAD = 1.6us使用較短的延遲來讀取PIC ADC模塊(PIC C)

準確的ADC讀數應該需要10個TAD(由於8位讀數) ,簡要16us。

問題出在這裏; 如果我使用10us,會發生什麼情況。我想要更小的延遲。我認爲PIC的ADC模塊採用逐次逼近。這是否意味着最重要的位首先被讀取?我認爲前4位的準確度對我的計算已經足夠了。但剩餘的位的價值是什麼?他們會是零嗎?或身份不明,可能是任何級別?

在此先感謝

+0

「如果我使用10us會發生什麼情況」 - 使用10us做什麼,具體是什麼? –

+0

我在我的項目中錯誤地使用了較小的延遲,結果讀取了最低有效位,最重要的位保持不變(取決於設備和連接方案)級別。所以我懷疑較小的延遲是一個好主意。 – kipar

回答

2

閱讀PIC16F887手冊的ADC部分。查找有關如何使用ADC端口的具體信息。通常,在運行時不需要使用輪詢ADC端口的代碼。也就是說,您可以激活一個ADC端口,並且硬件將執行逐次逼近,當硬件完成後,會在寄存器中發送一些您的程序可以參考的內容。

這意味着您的代碼可以複用多個ADC端口,並且只有在爲您的代碼準備好樣本時才擔心處理來自ADC的數據。在這一點上,您的考慮將是您自己的代碼使用ADC數據的效率。

該手冊會告訴你,如果你可以中斷一個ADC來獲得前四位等,它還會告訴你如何將ADC端口的時鐘設置爲不同的頻率。

最後,你最好自己讀一下。如果您有特定的問題,請重新提供手冊,頁碼和您特別關注的鏈接。