會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





dspic ADC的問題
初級會員
註冊日期:
2016/03/20 17:01
所屬群組:
註冊會員
文章: 34
等級: 4; EXP: 59
HP : 0 / 89
MP : 11 / 372
離線
目前我要將ADC的值,顯示在LCD屏幕上,但是它的個位、十位數,明顯在跳動,以至於看不清楚,想請問一下 dspic 在算術平均上是否有特別算法?

我目前的寫法主要如下,不曉得出了甚麼問題:

AverageValue = 0;
for (i = 0; i < 8; i++)
{
AD1CHS0bits.CH0SA = channel;
_AD1IF = 0;

AD1CON1bits.SAMP = 0;
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
while (!_AD1IF);
AverageValue = AverageValue + ADC1BUF0;
}
AverageValue = AverageValue >> 3;

謝謝!

3月12日 21:46:00
轉換PDF檔 列印


Re: dspic ADC的問題
資深會員
註冊日期:
2010/06/30 16:18
來自 CAE, Microchip Technology Inc.
所屬群組:
站務管理者
註冊會員
文章: 1536
等級: 33; EXP: 35
HP : 161 / 808
MP : 512 / 16881
離線
Po一下ADC的設定吧, 初步判斷問題出在Channel的設定.

3月13日 10:22:20
轉換PDF檔 列印


Re: dspic ADC的問題
初級會員
註冊日期:
2016/03/20 17:01
所屬群組:
註冊會員
文章: 34
等級: 4; EXP: 59
HP : 0 / 89
MP : 11 / 372
離線
以下是我ADC的相關設定:

void ADCInit(void) // will set 12bit, 4.96us/sample or 202KS/sec
{
AD1CON1 = 0; // POR: 10-bit @4ch mode, ADC disabled, manual sample
AD1CON2 = 0; // POR: AVdd/Avss for Vref, do not scan, IRQ every sample
AD1CON3 = 0; // POR: Use system clock, TAD = 1Tcyc, SAMC = 0TAD
AD1CON4 = 0; // POR: no DMA

AD1CHS123 = 0; // not used in 12bit mode, as only 1 S/H available
AD1CON1bits.FORM = 0; // integer data format (unsigned)
AD1CON1bits.ASAM = 1; // continuous automatic sampling enabled

AD1CON3bits.ADCS = 8; // 9 Tcy = 1TAD (so TAD = 9*25ns = 225ns = 4.44MHz)
AD1CON3bits.SAMC = 8; // set auto sample time as 8TAD = 1.8us


AD1CON1bits.AD12B = 1; // 12-bit conversion, 14TAD convert time

AD1CON1bits.ADON = 1; // enable converter

//
// Turn on port RG8, which supplies +5V to pot
//
_TRISG8 = 0;
_LATG8 = 1;

//
// there is a delay time required from ADC ebable until application can begin converting
// 150us is sufficient. Also allows pot voltage to stabilize, charges up anti-aliasing filter
__delay_us(150);

AD1CON1bits.SAMP = 1; // begin continuous sampling/conversion

}

麻煩了!

3月14日 23:02:03
轉換PDF檔 列印


Re: dspic ADC的問題
資深會員
註冊日期:
2010/06/30 16:18
來自 CAE, Microchip Technology Inc.
所屬群組:
站務管理者
註冊會員
文章: 1536
等級: 33; EXP: 35
HP : 161 / 808
MP : 512 / 16881
離線
引用:

CHS 寫道:
目前我要將ADC的值,顯示在LCD屏幕上,但是它的個位、十位數,明顯在跳動,以至於看不清楚,想請問一下 dspic 在算術平均上是否有特別算法?

我目前的寫法主要如下,不曉得出了甚麼問題:

AverageValue = 0;
for (i = 0; i < 8; i++)
{
AD1CHS0bits.CH0SA = channel;
_AD1IF = 0;

AD1CON1bits.SAMP = 0;
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
while (!_AD1IF);
AverageValue = AverageValue + ADC1BUF0;
}
AverageValue = AverageValue >> 3;

謝謝!



初步空跑了一下程式碼,
您的設定是自動取樣, 手動轉換,
也就是轉換時間是由您自己控制的,
您的For迴圈, 沒有給AD足夠的時間去取樣,就進行下一次的轉換(AD1CON1bits.SAMP = 0),
取樣時間不足=AD結果不正確,
這樣的程式結構, 通常會有一個現象,
電壓越低, ADC數值越穩定..

3月16日 14:00:36
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
線上教學影片
網頁捷徑
2017 Summer Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project