欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: STC8A8K單片機雙通道ADC結果一樣的問題! [打印本頁]

作者: echowilson    時間: 2019-7-10 21:29
標題: STC8A8K單片機雙通道ADC結果一樣的問題!
單通道ADC結果沒有問題,現在需要“同時”采集兩路ADC,發現結果總是驚人的一致!甚至一個通道加電壓,另一個通道不加電壓,兩者得到的結果都是一樣的!
在論壇中發現一個類似的帖子:http://www.raoushi.com/bbs/dpj-153743-1.html
該網友提到“把原通道清零”可以解決,但是我沒太懂,請哪位高人指點一下~

這是初始化和ADC函數:我使用的是P0.4和P0.5兩通道。
uchar ADCch_dz=0x0C; //P0.4
uchar ADCch_gd=0x0D; //P0.5



這是在主函數中調用的ADC函數,這里執行完,DZ_Data和GD_Data結果保持一致。
500ms查詢一次。





作者: yzwzfyz    時間: 2019-7-11 09:49
ADC采樣時,為了防止“彈動”,會用一只電容采樣輸入的電壓。
當你下達起動命令后,電容就與輸入分離,這樣電容上的電壓就不再受輸入影響了(彈動),再對電容上的電壓進行對分處理。
這個電容在ADC內部。
多路采樣時,多路切換開關在電容的前端,當你切換之后,需要保持一段時間,因為電容上的電壓是不能躍變的!否則電容上的電壓就與上一次的一樣!
明白這個道理正確的做法如下:
1、起動本次采樣,等待采樣結束(這期間去做其它事,不要呆等浪費CPU時間)。
2、采樣結束了,立即切換到下個通道(不要急于分析處理數據),這樣最節省采樣時間。
3、處理分析本次采樣到的數據。
4、估計切換有了一段時間了(自己按實際情況評估這段時間的長短),再起動采樣測量下個通道的電壓,這時電壓采樣也OK了(采樣電容有了足夠的充電時間)。
這樣你的問題就解決了,而且數據穩定!
不是高手注意不到這個細節,也不一定明白其中的道理。
作者: yzwzfyz    時間: 2019-7-11 09:51
這個書上有(需要看原理圖),但你不一定注意到。你的師傅也未必能講透,師傅也未必注意到。
作者: echowilson    時間: 2019-7-11 09:56
解決了!
uint GetADCresults(uchar adcch)
{
        ADC_RES   = 0;
        ADC_RESL  = 0;
        ADC_CONTR = ADC_POWER|ADC_START|adcch;
        Delay(10);
        while(!(ADC_CONTR & ADC_FLAG));             //等待ADC完成
        ADC_CONTR &= ~ADC_FLAG;                     //清零ADC_FLAG
        ADC_CONTR &= ~ADC_START;                    //關閉ADC
       
        return (ADC_RES<<8 | ADC_RESL);
}

最重要的是這一句。初始化的時候不要上電。在采樣函數中每切換一次通道就上一次電就可以了。
ADC_CONTR = ADC_POWER|ADC_START|adcch;
作者: qq1182560902    時間: 2019-12-12 20:34
echowilson 發表于 2019-7-11 09:56
解決了!
uint GetADCresults(uchar adcch)
{

這等與開啟ad電源,轉換第一個端口ad值,然后再次開啟電源,轉換下一個端口ad值???
作者: o19930615    時間: 2020-10-6 22:59
能分享下編程么,小白學習下,謝謝
作者: huagq8888    時間: 2023-12-6 22:17
echowilson 發表于 2019-7-11 09:56
解決了!
uint GetADCresults(uchar adcch)
{

謝謝

作者: coody_sz    時間: 2023-12-7 00:27
用STC官方的例程一試就好。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1