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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1559|回復: 19
收起左側

STC15單片機ADC-10bit數字量問題很奇怪

[復制鏈接]
ID:232366 發表于 2024-7-8 17:32 | 顯示全部樓層 |閱讀模式
先上程序:





uint ADC_DATA;

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

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

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

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

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





問題描述:
1:按照官方首冊記載STC15單片機支持10位ADC數據存儲位置為“ADC_RES和ADC_RESL"中。
2:按照上面程序各個寄存器配置ADC也可工作但是不正常,
(1):10位ADC數值正常應該是0-1023才對目前AD值顯示為2-1023,可以排除采樣電壓等問題因為采樣端口我是直接對地了仍然顯示2就是不為


不知道哪里設置出問題還是我的數據讀出后處理問題又或者是數據左右對齊問題還請朋友們指教。

回復

使用道具 舉報

ID:1109793 發表于 2024-7-8 18:21 | 顯示全部樓層
這要求蠻高的好像
回復

使用道具 舉報

ID:624769 發表于 2024-7-8 20:13 | 顯示全部樓層
飛線到 單片機的 GND 引腳就出0了
回復

使用道具 舉報

ID:232366 發表于 2024-7-8 20:55 | 顯示全部樓層
188610329 發表于 2024-7-8 20:13
飛線到 單片機的 GND 引腳就出0了

您肯定理解錯我的問題了。
回復

使用道具 舉報

ID:624769 發表于 2024-7-8 22:46 | 顯示全部樓層
SHANWAZI 發表于 2024-7-8 20:55
您肯定理解錯我的問題了。

你肯定理解錯GND的定義了。
回復

使用道具 舉報

ID:232366 發表于 2024-7-9 07:43 來自手機 | 顯示全部樓層
xiaobendan001 發表于 2024-7-8 18:21
這要求蠻高的好像

沒有啊  就是一個ADC采樣   15單片機是支持10位ADC的當我只讀8位數據時AD輸出可以0-255。當我讀10位數據時就不正常了AD值是從2-1023變化的!


正常不應該是從0-1023嗎?
回復

使用道具 舉報

ID:232366 發表于 2024-7-9 07:45 | 顯示全部樓層
188610329 發表于 2024-7-8 22:46
你肯定理解錯GND的定義了。

不知道是?
回復

使用道具 舉報

ID:401564 發表于 2024-7-9 12:42 | 顯示全部樓層
你要先搞明白ADC的原理
它一定是有誤差和浮動的,在ADC電氣規格中是有說明的,一般來說,5個位的整體誤差都是正常的
也就是說,當輸入電壓為0V時,它的數字量可能是0,也可能是5,當然,是2也就是正常的了
假設VCC就是ADC的參考電壓,以5V為例,你可以試一下,ADC端口電壓為2.5V時,ADC的數字量一定是跳來跳去的
這就是ADC為什么濾波的原因了
回復

使用道具 舉報

ID:1109793 發表于 2024-7-9 12:53 | 顯示全部樓層

他的意思是有底線噪音。
回復

使用道具 舉報

ID:232366 發表于 2024-7-9 14:03 | 顯示全部樓層
Y_G_G 發表于 2024-7-9 12:42
你要先搞明白ADC的原理
它一定是有誤差和浮動的,在ADC電氣規格中是有說明的,一般來說,5個位的整體誤差都是 ...

首先非常感謝您的盛情回復!!!


以上問題我剛剛做實驗使用STC8G1K08單片機讀取ADC十位數據使用同種方法如下:
1:讀取ADC10位數據對齊方式為右對齊
2:數據處理方法為

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

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

同樣通過外部電位器對5V電壓進行分壓供給ADC采樣調節電位器可使ADC值0-1023變化!!!!


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

不知為何
回復

使用道具 舉報

ID:232366 發表于 2024-7-9 14:04 | 顯示全部樓層
xiaobendan001 發表于 2024-7-9 12:53
他的意思是有底線噪音。

請看樓上
回復

使用道具 舉報

ID:744809 發表于 2024-7-9 15:07 | 顯示全部樓層

2-1023是正常現象,MCU生產的時候,基準電壓就有誤差,不同mcu個體測出來有誤差太正常了
回復

使用道具 舉報

ID:232366 發表于 2024-7-9 16:12 | 顯示全部樓層
123156fsadf 發表于 2024-7-9 15:07
2-1023是正常現象,MCU生產的時候,基準電壓就有誤差,不同mcu個體測出來有誤差太正常了

但是只讀取八位時又正常
回復

使用道具 舉報

ID:1034262 發表于 2024-7-9 17:28 | 顯示全部樓層
SHANWAZI 發表于 2024-7-9 07:43
沒有啊  就是一個ADC采樣   15單片機是支持10位ADC的當我只讀8位數據時AD輸出可以0-255。當我讀10位數據 ...

你要多了解一下ADC的一些參數。
ADC有好幾個誤差參數,其中一個是“0點誤差”,即輸入電壓為0時,讀數的誤差,比如讀到2,那0點誤差就是2個字。你讀8位能到0,因為因為10位時是2,去掉低2位就是0了。
回復

使用道具 舉報

ID:232366 發表于 2024-7-9 18:44 | 顯示全部樓層
coody_sz 發表于 2024-7-9 17:28
你要多了解一下ADC的一些參數。
ADC有好幾個誤差參數,其中一個是“0點誤差”,即輸入電壓為0時,讀數的 ...

哦原來如此!!!!!看來我還是功課做少了,感謝感謝
回復

使用道具 舉報

ID:401564 發表于 2024-7-9 21:48 | 顯示全部樓層
SHANWAZI 發表于 2024-7-9 14:03
首先非常感謝您的盛情回復!!!

我把我上面的回復復制了,請你再認真看一下,我個人感覺,我已經解釋得很明白了
如果還不明白,我再給你注釋
回復

使用道具 舉報

ID:232366 發表于 2024-7-10 14:05 | 顯示全部樓層
Y_G_G 發表于 2024-7-9 12:42
你要先搞明白ADC的原理
它一定是有誤差和浮動的,在ADC電氣規格中是有說明的,一般來說,5個位的整體誤差都是 ...

感謝朋友的耐心解答,按照您的意思我已做實驗確實如此!!!!
回復

使用道具 舉報

ID:688692 發表于 2024-7-11 12:56 | 顯示全部樓層
模電功底穩步提升中
回復

使用道具 舉報

ID:232366 發表于 2024-7-11 16:53 | 顯示全部樓層
cnos 發表于 2024-7-11 12:56
模電功底穩步提升中

是的共同學習
回復

使用道具 舉報

ID:1123773 發表于 2024-7-11 17:20 | 顯示全部樓層
大家說的意思是不是就是讀8位精度低了,掩蓋了0時的誤差,精度高了誤差就被讀出了。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久国产精品免费免费狐狸 | 一区二区三区高清不卡 | 最新日韩在线 | 国产精品色 | 91在线精品一区二区 | 日本理论片好看理论片 | 99热精品国产 | 欧美成人视屏 | 日屁视频 | 91在线看 | 欧美日韩久久久 | 国产亚洲精品久久久久动 | 五月婷婷丁香婷婷 | 欧美日韩中文在线 | 日韩精品专区在线影院重磅 | 欧美性网 | 99riav3国产精品视频 | 欧美中文在线 | 午夜影视网 | 精品99久久久久久 | 在线观看视频91 | 伊人网在线综合 | 韩国成人在线视频 | 亚洲一区二区三区在线 | 国产精品亚洲一区二区三区在线观看 | 天天干天天草 | 免费看黄视频网站 | 久久亚洲视频网 | 亚洲视频在线观看 | 国产一区二区三区欧美 | 国产一区二 | 亚洲二区视频 | 国产成人免费在线 | 欧美激情精品久久久久久免费 | 欧美综合视频 | 国产一区二区成人 | 国产精品一区二区欧美黑人喷潮水 | 色视频网站 | 欧美久操网 | 亚洲字幕在线观看 | 久久艹免费视频 |