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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1943|回復(fù): 19
打印 上一主題 下一主題
收起左側(cè)

STC15單片機(jī)ADC-10bit數(shù)字量問(wèn)題很奇怪

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:232366 發(fā)表于 2024-7-8 17:32 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
先上程序:





uint ADC_DATA;

void delay(uchar ms)
{
        uchar i;
        while(ms--)
        for(i=0;i<220;i++);
}

void ADC_init()//初始化ADC
{
        //ADD采樣輸入口模式設(shè)置
        P1M1|=0x0C;//P1^2-P1^3設(shè)置位高阻模式 0000 1100
        P1M0&=0xF3;//P1^2-P1^3設(shè)置位高阻模式 1111 0011

        //P1口模擬控制功能寄存器 "P1AFS"
        P1ASF|=0x0C;//設(shè)置為P1^2-P1^3為ADC采樣輸入  0000 1100
        
        CLK_DIV&=0xDF;//采樣數(shù)據(jù)左對(duì)齊ADRJ=0
        ADC_RES=0; //默認(rèn)高字節(jié)高8位
        ADC_RESL=0;//默認(rèn)低字節(jié)低2位
        
        ADC_CONTR|=0x80; //首先要開(kāi)AD 轉(zhuǎn)換電源 1000 0000
        delay(10);
}

unsigned int ADC()
{
        unsigned int ADC_DATA ;   
        unsigned char ADC_H,ADC_L;
        
        ADC_DATA=0;//清除轉(zhuǎn)換結(jié)果
        /*
                ADC_CONTR寄存器
                第7位:電源開(kāi)啟
                第6,5:保持轉(zhuǎn)換速度
                第4位:轉(zhuǎn)換結(jié)束位標(biāo)志
                第3位:設(shè)置開(kāi)始
                最后三位:選擇為轉(zhuǎn)換位(P1.7)
                所以1110 0111
        */
        ADC_CONTR|=0xE2;
        
        delay(3);//延時(shí)3MS
        
        ADC_CONTR|=0xEA ; //轉(zhuǎn)換開(kāi)關(guān) ,轉(zhuǎn)換位置1開(kāi)始轉(zhuǎn)換: 1110 1010
        
        delay(2);//延時(shí)3MS
        
        while(ADC_CONTR&0x10==0); //查詢轉(zhuǎn)換是否結(jié)束,結(jié)束后讀取結(jié)果
        
        ADC_CONTR&=0xE5;//清除轉(zhuǎn)換結(jié)果標(biāo)志位,關(guān)閉轉(zhuǎn)換
        
        ADC_H=ADC_RES; //默認(rèn)高字節(jié)高8位。
        ADC_L=ADC_RESL;//默認(rèn)低字節(jié)低2位。
        
        //ADC_L=ADC_L&0x03; // 屏蔽無(wú)關(guān)位

        ADC_DATA=ADC_H;
        ADC_DATA=ADC_DATA<<2;
        
        ADC_DATA|=ADC_L;
        
        ADC_CONTR=0x00;
        
        return(ADC_DATA);// 返回轉(zhuǎn)化結(jié)果
}





問(wèn)題描述:
1:按照官方首冊(cè)記載STC15單片機(jī)支持10位ADC數(shù)據(jù)存儲(chǔ)位置為“ADC_RES和ADC_RESL"中。
2:按照上面程序各個(gè)寄存器配置ADC也可工作但是不正常,
(1):10位ADC數(shù)值正常應(yīng)該是0-1023才對(duì)目前AD值顯示為2-1023,可以排除采樣電壓等問(wèn)題因?yàn)椴蓸佣丝谖沂侵苯訉?duì)地了仍然顯示2就是不為


不知道哪里設(shè)置出問(wèn)題還是我的數(shù)據(jù)讀出后處理問(wèn)題又或者是數(shù)據(jù)左右對(duì)齊問(wèn)題還請(qǐng)朋友們指教。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1109793 發(fā)表于 2024-7-8 18:21 | 只看該作者
這要求蠻高的好像
回復(fù)

使用道具 舉報(bào)

板凳
ID:624769 發(fā)表于 2024-7-8 20:13 | 只看該作者
飛線到 單片機(jī)的 GND 引腳就出0了
回復(fù)

使用道具 舉報(bào)

地板
ID:232366 發(fā)表于 2024-7-8 20:55 | 只看該作者
188610329 發(fā)表于 2024-7-8 20:13
飛線到 單片機(jī)的 GND 引腳就出0了

您肯定理解錯(cuò)我的問(wèn)題了。
回復(fù)

使用道具 舉報(bào)

5#
ID:624769 發(fā)表于 2024-7-8 22:46 | 只看該作者
SHANWAZI 發(fā)表于 2024-7-8 20:55
您肯定理解錯(cuò)我的問(wèn)題了。

你肯定理解錯(cuò)GND的定義了。
回復(fù)

使用道具 舉報(bào)

6#
ID:232366 發(fā)表于 2024-7-9 07:43 來(lái)自觸屏版 | 只看該作者
xiaobendan001 發(fā)表于 2024-7-8 18:21
這要求蠻高的好像

沒(méi)有啊  就是一個(gè)ADC采樣   15單片機(jī)是支持10位ADC的當(dāng)我只讀8位數(shù)據(jù)時(shí)AD輸出可以0-255。當(dāng)我讀10位數(shù)據(jù)時(shí)就不正常了AD值是從2-1023變化的!


正常不應(yīng)該是從0-1023嗎?
回復(fù)

使用道具 舉報(bào)

7#
ID:232366 發(fā)表于 2024-7-9 07:45 | 只看該作者
188610329 發(fā)表于 2024-7-8 22:46
你肯定理解錯(cuò)GND的定義了。

不知道是?
回復(fù)

使用道具 舉報(bào)

8#
ID:401564 發(fā)表于 2024-7-9 12:42 | 只看該作者
你要先搞明白ADC的原理
它一定是有誤差和浮動(dòng)的,在ADC電氣規(guī)格中是有說(shuō)明的,一般來(lái)說(shuō),5個(gè)位的整體誤差都是正常的
也就是說(shuō),當(dāng)輸入電壓為0V時(shí),它的數(shù)字量可能是0,也可能是5,當(dāng)然,是2也就是正常的了
假設(shè)VCC就是ADC的參考電壓,以5V為例,你可以試一下,ADC端口電壓為2.5V時(shí),ADC的數(shù)字量一定是跳來(lái)跳去的
這就是ADC為什么濾波的原因了
回復(fù)

使用道具 舉報(bào)

9#
ID:1109793 發(fā)表于 2024-7-9 12:53 | 只看該作者

他的意思是有底線噪音。
回復(fù)

使用道具 舉報(bào)

10#
ID:232366 發(fā)表于 2024-7-9 14:03 | 只看該作者
Y_G_G 發(fā)表于 2024-7-9 12:42
你要先搞明白ADC的原理
它一定是有誤差和浮動(dòng)的,在ADC電氣規(guī)格中是有說(shuō)明的,一般來(lái)說(shuō),5個(gè)位的整體誤差都是 ...

首先非常感謝您的盛情回復(fù)。。


以上問(wèn)題我剛剛做實(shí)驗(yàn)使用STC8G1K08單片機(jī)讀取ADC十位數(shù)據(jù)使用同種方法如下:
1:讀取ADC10位數(shù)據(jù)對(duì)齊方式為右對(duì)齊
2:數(shù)據(jù)處理方法為

unsigned int adc_once()
{       
        static unsigned int ADC_VALUE;//存放采樣值

        ADC_RES=0;//結(jié)果高2位
        ADC_RESL=0;//結(jié)果低8位
       
        ADC_CONTR|=0x40;// 啟動(dòng) AD 轉(zhuǎn)換
        _nop_();_nop_();
        while(!(ADC_CONTR&0x20));//查詢 ADC 完成標(biāo)志       
        _nop_();_nop_();
        ADC_VALUE=ADC_RES;//存儲(chǔ) ADC 的 10 位結(jié)果的高 2 位
        ADC_VALUE<<=8;
        ADC_VALUE|=ADC_RESL;//存儲(chǔ) ADC 的 10 位結(jié)果的低 8 位
        ADC_CONTR&=~0x20;//清完成標(biāo)志
        delay_ms(1);
        //adc_value&=0x03FF;//確保adc_value不大于1024
       
        return ADC_VALUE;
}

同樣通過(guò)外部電位器對(duì)5V電壓進(jìn)行分壓供給ADC采樣調(diào)節(jié)電位器可使ADC值0-1023變化。。!


同種方法數(shù)據(jù)右對(duì)齊同種外部電路同種數(shù)據(jù)處理函數(shù)使用STC15單片機(jī)卻不行AD值始終要么就是1-1023
要么就是2-1023變化!。。。。!

不知為何
回復(fù)

使用道具 舉報(bào)

11#
ID:232366 發(fā)表于 2024-7-9 14:04 | 只看該作者
xiaobendan001 發(fā)表于 2024-7-9 12:53
他的意思是有底線噪音。

請(qǐng)看樓上
回復(fù)

使用道具 舉報(bào)

12#
ID:744809 發(fā)表于 2024-7-9 15:07 | 只看該作者

2-1023是正,F(xiàn)象,MCU生產(chǎn)的時(shí)候,基準(zhǔn)電壓就有誤差,不同mcu個(gè)體測(cè)出來(lái)有誤差太正常了
回復(fù)

使用道具 舉報(bào)

13#
ID:232366 發(fā)表于 2024-7-9 16:12 | 只看該作者
123156fsadf 發(fā)表于 2024-7-9 15:07
2-1023是正,F(xiàn)象,MCU生產(chǎn)的時(shí)候,基準(zhǔn)電壓就有誤差,不同mcu個(gè)體測(cè)出來(lái)有誤差太正常了

但是只讀取八位時(shí)又正常
回復(fù)

使用道具 舉報(bào)

14#
ID:1034262 發(fā)表于 2024-7-9 17:28 | 只看該作者
SHANWAZI 發(fā)表于 2024-7-9 07:43
沒(méi)有啊  就是一個(gè)ADC采樣   15單片機(jī)是支持10位ADC的當(dāng)我只讀8位數(shù)據(jù)時(shí)AD輸出可以0-255。當(dāng)我讀10位數(shù)據(jù) ...

你要多了解一下ADC的一些參數(shù)。
ADC有好幾個(gè)誤差參數(shù),其中一個(gè)是“0點(diǎn)誤差”,即輸入電壓為0時(shí),讀數(shù)的誤差,比如讀到2,那0點(diǎn)誤差就是2個(gè)字。你讀8位能到0,因?yàn)橐驗(yàn)?0位時(shí)是2,去掉低2位就是0了。
回復(fù)

使用道具 舉報(bào)

15#
ID:232366 發(fā)表于 2024-7-9 18:44 | 只看該作者
coody_sz 發(fā)表于 2024-7-9 17:28
你要多了解一下ADC的一些參數(shù)。
ADC有好幾個(gè)誤差參數(shù),其中一個(gè)是“0點(diǎn)誤差”,即輸入電壓為0時(shí),讀數(shù)的 ...

哦原來(lái)如此。。。!看來(lái)我還是功課做少了,感謝感謝
回復(fù)

使用道具 舉報(bào)

16#
ID:401564 發(fā)表于 2024-7-9 21:48 | 只看該作者
SHANWAZI 發(fā)表于 2024-7-9 14:03
首先非常感謝您的盛情回復(fù)。。

我把我上面的回復(fù)復(fù)制了,請(qǐng)你再認(rèn)真看一下,我個(gè)人感覺(jué),我已經(jīng)解釋得很明白了
如果還不明白,我再給你注釋
回復(fù)

使用道具 舉報(bào)

17#
ID:232366 發(fā)表于 2024-7-10 14:05 | 只看該作者
Y_G_G 發(fā)表于 2024-7-9 12:42
你要先搞明白ADC的原理
它一定是有誤差和浮動(dòng)的,在ADC電氣規(guī)格中是有說(shuō)明的,一般來(lái)說(shuō),5個(gè)位的整體誤差都是 ...

感謝朋友的耐心解答,按照您的意思我已做實(shí)驗(yàn)確實(shí)如此。。!
回復(fù)

使用道具 舉報(bào)

18#
ID:688692 發(fā)表于 2024-7-11 12:56 | 只看該作者
模電功底穩(wěn)步提升中
回復(fù)

使用道具 舉報(bào)

19#
ID:232366 發(fā)表于 2024-7-11 16:53 | 只看該作者
cnos 發(fā)表于 2024-7-11 12:56
模電功底穩(wěn)步提升中

是的共同學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

20#
ID:1123773 發(fā)表于 2024-7-11 17:20 | 只看該作者
大家說(shuō)的意思是不是就是讀8位精度低了,掩蓋了0時(shí)的誤差,精度高了誤差就被讀出了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表