Re: 如何讀取6個 ADC channel
|
||||
---|---|---|---|---|
初級會員
|
謝謝 已經解決
小弟目前用的方法是以單數次進interrupt就讀AN0-AN3 雙數次進interrupt就讀AN4-AN5-AN2-AN3的折衷方式來做 因為在INTERRUPT裡面取完AN0-AN3之後馬上切ADCHS到AN4-AN5的話是會讀不到值的
發表於: 2007/8/1 12:54
|
|||
|
Re: 如何讀取6個 ADC channel
|
||||
---|---|---|---|---|
版主
|
ADCHS 暫存器是否忘了設定Group A~D 為 01 以選擇AN4 & AN5 為輸入。
發表於: 2007/7/31 10:20
|
|||
|
Re: 如何讀取6個 ADC channel
|
||||
---|---|---|---|---|
版主
|
1. 先考慮到你的應用程式是否一定要使用到同時取樣的應用,如果不需要的話那多久須轉換一個 AD Channel?
2. 如果不需同時取樣且每一 AD Channel 轉換的時間都一樣的話,而且相隔的AD轉換時間不是很緊的話可以考慮底下的方式 : 設定一Timer的中斷時間等於相鄰AD轉換的間隔時間,每次中斷就轉換AD並儲存(18F4431 的 AD 轉換速度很快所以在中斷裡轉應該可以) 到 ADC 相對應的Buffer(n) 裡。如此一來 ADC 的轉換就會在 Background完成,主程式就可以隨時讀取 ADC Buffer(n) 的值來用。 3. 如果一定要使用同時取樣的設計,就必須同時取樣完成後一一轉換換 AN0到AN3後,再對 AN4取樣在轉換完成後再對AN5取樣後轉換,當然這中間取樣的設定是要從設的。
發表於: 2007/7/30 11:37
|
|||
|
如何讀取6個 ADC channel
|
||||
---|---|---|---|---|
初級會員
|
小弟目前使用p18f4331,擁有9個adc channel,我想要使用其中的六個an0-an5,但我知道可以一次讀取4個channel AN0-AN3(group ABCD),但讀取完之後,要如何再去讀取AN4-AN5這兩個channel呢(group AB)? 是否group ABCD讀完以後,把ADCHS切到AN4 (groupA) AN5 (groupB),再重新GO=1讀取一次呢?這個方式似乎沒有用,以下是小弟程式碼,請各位前輩指教!
ADCHS=0x00; //groupABCD=AN0-AN3 ANSEL0=00111111; ADIF=0; ADIE=1; GIE=1; ADON=1; GO=1; void READ_ADC(void) { if(ADIF==1) { ACC_STEP=ADRESH; //an0 DEC_STEP=ADRESH; //an1 SPEED_STEP=ADRESH/4; //an2 VOLT_H=ADRESH; //an3 } ADIF=0; ADCHS=00010001; //AN4 (groupA) AN5(groupB), GO=1; if(ADIF==1) { OC=ADRESH; //an4 OT=ADRESH; //an5 } ADCHS=0x00; ADIF=0; GO=1; }
發表於: 2007/7/30 10:20
|
|||
|