久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6492|回復(fù): 24
收起左側(cè)

STC8A8K單片機(jī)多路ADC采集得到的結(jié)果一模一樣,可能會(huì)是什么問題?

  [復(fù)制鏈接]
ID:898834 發(fā)表于 2021-7-25 15:37 | 顯示全部樓層 |閱讀模式
單片機(jī)程序如下,求大神指導(dǎo)
  1. #include  <stc8.h>
  2. #include  <delay.h>
  3. #include  <uart.h>
  4. #include  <adc12.h>
  5. #include  <adc13.h>        
  6. #include  <adc14.h>

  7. //float R;

  8. void main()
  9. {
  10.         P3M1 &= 0xFE;        P3M0 &= 0xFE;                          //設(shè)置P3.0為準(zhǔn)雙向口
  11.         P3M1 &= 0xFD;        P3M0 |= 0x02;                          //設(shè)置P3.1為推挽輸出
  12.                
  13.         ADC12_config();         
  14.         ADC13_config();
  15.   ADC14_config();                             //ADC初始化

  16.         Uart1_Init();                                 //串口1初始化         
  17.         EA = 1;                                       //使能總中斷
  18.   Delay10ms();                                  //初始化后延時(shí)
  19.         
  20. //        R=(HandleADC13()*3000)/(2*HandleADC12()-HandleADC13());  //輸入電阻計(jì)算
  21.         
  22.   while (1)
  23.         {
  24.                  printf("\r\n P0.4上的電壓: %.3f\r\n",HandleADC12());      //輸入電壓1        
  25.                  printf("\r\n P0.5上的電壓: %.3f\r\n",HandleADC13());      //輸入電壓2        
  26.                  printf("\r\n P0.6上的電壓: %.3f\r\n",HandleADC14());      //輸出電壓               
  27. //                  printf("\r\n 電壓增益: %.3f\r\n",HandleADC14()/HandleADC13());     //串口打印上傳的采集的電壓值
  28. //           printf("\r\n 輸入電阻: %.1f\r\n",R);        
  29.      Delay1000ms();
  30.         }
  31. }

復(fù)制代碼


差分放大電路電壓放大倍數(shù)ADC測(cè)量.zip

89.73 KB, 下載次數(shù): 40

回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2021-7-25 23:38 | 顯示全部樓層
你看一下你的ADC程序里面有沒有這個(gè)查詢ADC完成標(biāo)志位的我是沒有在你程序里找到
ADC是要一個(gè)過程的,啟動(dòng)ADC之后,如果是查詢方式的話,是要一直等待ADC完成才能正確的得到ADC結(jié)果的
51hei截圖20210725233503.png

回復(fù)

使用道具 舉報(bào)

ID:898834 發(fā)表于 2021-7-26 09:12 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-7-25 23:38
你看一下你的ADC程序里面有沒有這個(gè)查詢ADC完成標(biāo)志位的我是沒有在你程序里找到
ADC是要一個(gè)過程的,啟動(dòng)AD ...

但是我在實(shí)際測(cè)試中,ADC已經(jīng)發(fā)揮作用了,也能得到端口檢測(cè)到的值,只是多路使用的時(shí)候無法實(shí)現(xiàn)
回復(fù)

使用道具 舉報(bào)

ID:170318 發(fā)表于 2021-7-26 09:40 | 顯示全部樓層
貼上來的程序不完整,不好分析原因,可以肯定地說是程序的問題
回復(fù)

使用道具 舉報(bào)

ID:898834 發(fā)表于 2021-7-26 09:48 | 顯示全部樓層
jhczy 發(fā)表于 2021-7-26 09:40
貼上來的程序不完整,不好分析原因,可以肯定地說是程序的問題

ADC初始化及采集程序如下
void        ADC_config(void)   //ADC 初始化
{       
        ADC_CONTR|=0x80;              //開AD轉(zhuǎn)換電源
        delay_ms(10);           //適當(dāng)延時(shí)等待AD轉(zhuǎn)換供電穩(wěn)定
        ADC_CONTR|=0x0E;                          //選擇P0.6作為模擬功能AD使用
        ADC_CONTR&=0xFE;                          //選擇P0.6作為模擬功能AD使用
       
        ADCCFG&=0xFC;             //AD轉(zhuǎn)換速度為416個(gè)時(shí)鐘數(shù)轉(zhuǎn)換一次
        ADCCFG|=0x0C;             //AD轉(zhuǎn)換速度為416個(gè)時(shí)鐘數(shù)轉(zhuǎn)換一次
        ADC_CONTR&=0xDF;          //清AD轉(zhuǎn)換完成標(biāo)志
               
        EADC=0;                   //禁止ADC轉(zhuǎn)換中斷
        ADCCFG|=0x20;             //ADC轉(zhuǎn)換結(jié)果ADC_RES存高4位,ADC_RESL存低8位

}

uint16        Get_ADC12bitResult(void)        //得到ADC12位結(jié)果
{       
        ADC_CONTR|=0x40;          //啟動(dòng)AD轉(zhuǎn)換,ADC_START=1
        delay_ms(10);
        while(!(ADC_CONTR&0x20));    //查詢ADC完成標(biāo)志
  ADC_CONTR&=0xDF;              // 將ADC_FLAG完成標(biāo)志清0
        ADC_CONTR&=0xBF;        //關(guān)閉AD轉(zhuǎn)換,ADC_START=0
        //12位AD結(jié)果的高4位放ADC_RES的低4位,低8位在ADC_RESL
        AD_Dat = ADC_RES;                       //將ADC_RES低4位移到應(yīng)在的第9位至第12位
        AD_Dat <<= 8;
        AD_Dat|= ADC_RESL;               //將ADC_RESL的8位移到應(yīng)在的低8位
       
  ADC_CONTR|=0x40;           //啟動(dòng)AD轉(zhuǎn)換,ADC_START=1
        return        AD_Dat;       
}
回復(fù)

使用道具 舉報(bào)

ID:170318 發(fā)表于 2021-7-26 10:00 | 顯示全部樓層
本帖最后由 jhczy 于 2021-7-26 10:07 編輯
zqz1345444061 發(fā)表于 2021-7-26 09:48
ADC初始化及采集程序如下
void        ADC_config(void)   //ADC 初始化
{        

這個(gè)程序確實(shí)有問題,STC8與STC15的ADC程序有點(diǎn)小區(qū)別,請(qǐng)?jiān)敿?xì)看STC8的手冊(cè)
回復(fù)

使用道具 舉報(bào)

ID:898834 發(fā)表于 2021-7-26 10:07 | 顯示全部樓層
jhczy 發(fā)表于 2021-7-26 10:00
這個(gè)程序確實(shí)有問題,STC8與STC15的ADC程序有點(diǎn)小區(qū)別,請(qǐng)?jiān)敿?xì)看STC8G的手冊(cè)

可是它的確也能實(shí)現(xiàn)ADC的功能
回復(fù)

使用道具 舉報(bào)

ID:170318 發(fā)表于 2021-7-26 10:10 | 顯示全部樓層
zqz1345444061 發(fā)表于 2021-7-26 10:07
可是它的確也能實(shí)現(xiàn)ADC的功能

采集的數(shù)據(jù)可能就是某一個(gè)通道上的
回復(fù)

使用道具 舉報(bào)

ID:898834 發(fā)表于 2021-7-26 10:12 | 顯示全部樓層
jhczy 發(fā)表于 2021-7-26 10:10
采集的數(shù)據(jù)可能就是某一個(gè)通道上的

確實(shí)是,我這個(gè)程序是選擇固定通道,我的問題就在于不知道如何選擇多個(gè)通道
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2021-7-26 10:14 | 顯示全部樓層
在AD的硬件中,有一個(gè)采樣電容,當(dāng)你下達(dá)采樣命令后,會(huì)經(jīng)歷如下的過程:
1、將這個(gè)電容與端口連通,并保持若干個(gè)時(shí)鐘。目的讓電容上得到與端口一樣的電壓。
2、再切斷與端口的連接,防止在進(jìn)行電壓比較時(shí),電壓有波動(dòng),影響、絞亂逐次逼近的邏輯。
3、接下來才進(jìn)行真正的AD轉(zhuǎn)換(逐次逼近),需要N個(gè)時(shí)鐘周期,得到AD值。
所以,采樣時(shí)要注意(這是精華):
切換端口后,要過一段時(shí)間再下達(dá)采樣命令,因?yàn)閯偳袚Q后,采樣電容上是上一個(gè)通道的電壓,需要有一個(gè)充放電的過程,才能變?yōu)樾峦ǖ蓝丝谏系碾妷骸_@一點(diǎn)相當(dāng)重要!!!新手一般不會(huì)考慮到這一點(diǎn),許多高手也吃它的苦。表現(xiàn)為采樣電壓的數(shù)據(jù)不穩(wěn)定,其實(shí)是部分地受上個(gè)通道的電壓“殘余”影響了。
解決的方案很簡(jiǎn)單:估計(jì)樓主想到了……
回復(fù)

使用道具 舉報(bào)

ID:170318 發(fā)表于 2021-7-26 10:17 | 顯示全部樓層
zqz1345444061 發(fā)表于 2021-7-26 10:07
可是它的確也能實(shí)現(xiàn)ADC的功能

我的STC8G的某一個(gè)端口的ADC程序(STC8G1K08的),12MHz
void W1_ADC()                                                //P3.4檢測(cè)
{
//        TR0=0;
        P3M1=0x10;                          //P3.4高阻輸入模式,P3.0-3.1-3.3為準(zhǔn)雙向
        P3M0=0x04;
        P_SW2|=0x80;
        ADCTIM=0x3f;
        P_SW2&=0x7f;
        ADCCFG=0x0f;                  //設(shè)置ADC時(shí)鐘為系統(tǒng)頻率的/2/16
        ADC_CONTR=0x80;               //使能ADC模塊
        _nop_();
        _nop_();
        ADC_RES=0;                           //清除結(jié)果
        ADC_CONTR|=0x0c;               // 設(shè)定轉(zhuǎn)換的通道,P3.4是1100(0x0c)
        ADC_CONTR|=0x40;                     // 開始AD轉(zhuǎn)換,即ADC_START=1
        _nop_();
        _nop_();
        while(!(ADC_CONTR & 0x20));    //  等待轉(zhuǎn)換完成 ,即ADC_FLAG=1
        ADC_CONTR&=~0x20;              //  清零 即D3位start清零,D4位轉(zhuǎn)換結(jié)束標(biāo)志位ADC_flag清零
        shuj=ADC_RES;                  //  取高八位
//        TR0=1;
        P3M1=0x00;
        P3M0=0x04;
}
回復(fù)

使用道具 舉報(bào)

ID:170318 發(fā)表于 2021-7-26 10:18 | 顯示全部樓層
zqz1345444061 發(fā)表于 2021-7-26 10:12
確實(shí)是,我這個(gè)程序是選擇固定通道,我的問題就在于不知道如何選擇多個(gè)通道

一個(gè)通道一個(gè)程序,端口狀態(tài)要設(shè)置改變的
回復(fù)

使用道具 舉報(bào)

ID:898834 發(fā)表于 2021-7-26 10:23 | 顯示全部樓層
jhczy 發(fā)表于 2021-7-26 10:17
我的STC8G的某一個(gè)端口的ADC程序(STC8G1K08的),12MHz
void W1_ADC()                                                //P3.4檢測(cè)
{

好的,謝謝,我再試一下
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2021-7-26 12:17 | 顯示全部樓層
ADC用中斷比較好,不用一直等待,程序也可以做其它的事
STC8A4k不需要設(shè)定轉(zhuǎn)換時(shí)鐘個(gè)數(shù)的,ADC時(shí)鐘用最慢的時(shí)鐘頻率就可以了
我這個(gè)是自己寫的,可以在有字庫的12864上顯示
你參考一下
STC8A4K_12864.rar (1.92 KB, 下載次數(shù): 90)

回復(fù)

使用道具 舉報(bào)

ID:898834 發(fā)表于 2021-7-26 14:43 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-7-26 12:17
ADC用中斷比較好,不用一直等待,程序也可以做其它的事
STC8A4k不需要設(shè)定轉(zhuǎn)換時(shí)鐘個(gè)數(shù)的,ADC時(shí)鐘用最慢的時(shí) ...

好的,感謝幫助
回復(fù)

使用道具 舉報(bào)

ID:898834 發(fā)表于 2021-7-26 14:50 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-7-26 12:17
ADC用中斷比較好,不用一直等待,程序也可以做其它的事
STC8A4k不需要設(shè)定轉(zhuǎn)換時(shí)鐘個(gè)數(shù)的,ADC時(shí)鐘用最慢的時(shí) ...

好的感謝幫助
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2021-7-26 16:49 | 顯示全部樓層
zqz1345444061 發(fā)表于 2021-7-26 10:12
確實(shí)是,我這個(gè)程序是選擇固定通道,我的問題就在于不知道如何選擇多個(gè)通道

對(duì)ADC_CONTR寄存器低4位賦值選擇ADC通道。 無標(biāo)題.jpg

回復(fù)

使用道具 舉報(bào)

ID:382454 發(fā)表于 2021-7-27 16:43 | 顯示全部樓層
按我的經(jīng)驗(yàn),8系列分時(shí)復(fù)用IO口檢測(cè)ADC, 剛打開IO口的時(shí)候也要延時(shí)1-2ms的,不然測(cè)出來也不準(zhǔn)
回復(fù)

使用道具 舉報(bào)

ID:229375 發(fā)表于 2021-12-11 17:41 | 顯示全部樓層
兄弟,請(qǐng)問這個(gè)問題解決了嗎?
我按照之前10樓大佬說的解決辦法,延遲采集似乎沒有效果...
回復(fù)

使用道具 舉報(bào)

ID:229375 發(fā)表于 2021-12-11 17:52 | 顯示全部樓層
河邊洗腳人 發(fā)表于 2021-12-11 17:41
兄弟,請(qǐng)問這個(gè)問題解決了嗎?
我按照之前10樓大佬說的解決辦法,延遲采集似乎沒有效果...

是我切換通道時(shí)設(shè)置錯(cuò)了。

回復(fù)

使用道具 舉報(bào)

ID:906597 發(fā)表于 2021-12-24 21:47 | 顯示全部樓層
同問,我也是這個(gè)問題,我配置了2個(gè)ADC初始化,選的不同的口,但是還是只顯示1個(gè)的值
回復(fù)

使用道具 舉報(bào)

ID:382454 發(fā)表于 2021-12-29 10:15 | 顯示全部樓層
你的邏輯步驟很重要,STC8A8K系列ADC有幾種工作方式的,中斷是比較實(shí)用的。因?yàn)橹袛嗖灰狢PU去等待,判斷。你要先把單個(gè)口的ADC代碼寫OK才行,測(cè)好單個(gè)口的ADC代碼沒問題之后,再擴(kuò)展多個(gè)IO口,那么這多個(gè)口怎么分時(shí)復(fù)用去掃描也是很簡(jiǎn)單的,可以定義一個(gè)掃描完成的標(biāo)志位FLAG ,再定義一個(gè)多口數(shù)字變量,幾個(gè)標(biāo)志一起參寫判斷。簡(jiǎn)單的來就就是第一個(gè)口掃描完志成了,CPU自動(dòng)進(jìn)入第二個(gè)口掃描,掃完第二個(gè),自動(dòng)描掃第三個(gè),以此反復(fù)循環(huán),在寫碼的時(shí)候是很靈活的。重點(diǎn)是你要把小個(gè)的函數(shù)寫好,把小個(gè)的湊成一個(gè)整體。小的局部沒寫好,大的找起來就一頭亂。
回復(fù)

使用道具 舉報(bào)

ID:382454 發(fā)表于 2021-12-29 10:18 | 顯示全部樓層
還有一個(gè)就是CPU硬件AVCC這個(gè)ADC供電接口 接了沒有?我以前試過畫板時(shí)沒有接上,找了我一個(gè)星期。
回復(fù)

使用道具 舉報(bào)

ID:936755 發(fā)表于 2022-10-14 15:02 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-7-26 12:17
ADC用中斷比較好,不用一直等待,程序也可以做其它的事
STC8A4k不需要設(shè)定轉(zhuǎn)換時(shí)鐘個(gè)數(shù)的,ADC時(shí)鐘用最慢的時(shí) ...

ganx,,
回復(fù)

使用道具 舉報(bào)

ID:1051062 發(fā)表于 2022-11-9 15:03 | 顯示全部樓層
采集到的數(shù)值是不變的嗎,不變可能采集不到,變了的話就是所有采集到的數(shù)據(jù)都在一個(gè)通道里
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美国产一区二区三区 | 中文字幕av一区 | 91在线视频免费观看 | 成人av久久 | 亚洲人人舔人人 | 婷婷桃色网 | 97精品国产97久久久久久免费 | 天天插天天操 | 久久九九网站 | 粉嫩一区二区三区国产精品 | 国产精品99免费视频 | 久草新在线 | 日韩精品免费在线观看 | 精品久久av | 久久99精品视频 | 天天综合天天 | 久久精品小短片 | 99亚洲| 久久不卡 | 日韩欧美视频在线 | 91色视频在线观看 | 综合久久综合久久 | a毛片视频网站 | 韩国av一区二区 | 黄a大片 | 7799精品视频天天看 | 天天天操 | 国产网站在线播放 | 97人人澡人人爽91综合色 | 男女啪啪高潮无遮挡免费动态 | 日韩在线免费视频 | 国产视频福利一区 | 亚洲国产精品一区二区三区 | 999国产视频 | 日本xx视频免费观看 | 欧美一区二区在线观看视频 | 国产超碰人人爽人人做人人爱 | 四虎永久在线精品免费一区二 | 久久精品视频在线播放 | 国产精品资源在线 | 国产精品欧美一区二区 |