|
ADC(模/數轉換器ADC):顧名思義就是一個起轉換功能的器件了嘍。
一.首先了解一下對應的管腳:
我先直接用大白話說說我自己的理解吧,就是AVR上設了相應接口來接收外部輸進來的模擬信號量,但是MCU只會處理10010101這樣的數字量,所以需要ADC這樣一個東西進行中間的轉換(ATmega16內部是集成了一個10位逐次比較的ADC電路),然后你需要轉換些什么就把需要轉換的東西接在內個事先安排好的管腳上(PORTA上0~7都被安排了)
ADC1.jpg (117.68 KB, 下載次數: 125)
下載附件
2019-6-13 21:31 上傳
(圖片的書上有一些詳細的說明)
二.實際使用
在實際學習使用中,我還沒用到那么多功能,只用了最基礎的8路單端輸入電壓采樣中的其中一路(單端電壓輸入以0V:GND為參考)
ADC2.jpg (39.31 KB, 下載次數: 127)
下載附件
2019-6-13 21:38 上傳
ADC3.jpg (75.58 KB, 下載次數: 140)
下載附件
2019-6-13 21:38 上傳
(如圖就是我使用的學校的板子的原理圖)
實驗目的:
目的時使用PA7這一路的輸入(在按下不同按鈕是產生不同的電壓)通過ADC轉化,交給MCU進行處理,實現這部分按鍵的定位
如圖(KEY1:0 KEY2:(1/4)vcc KEY4:(2/5)vcc KEY3:(1/2)vcc KEY6:(4/7)vcc KEY5:(5/8)vcc ) VCC=3.3V
轉換數據處理:
ADC4.jpg (3.62 MB, 下載次數: 118)
下載附件
2019-6-13 21:55 上傳
ADC5.jpg (3.56 MB, 下載次數: 138)
下載附件
2019-6-13 21:58 上傳
(如圖,ADC多路復用器選擇寄存器ADMUX中的第5位ADLAR默認狀態時為0,所以默認就是右對齊嘍,這樣也好看一些,隨意吐槽一下,為什么還要設置左對齊這種東西,哈哈哈哈哈)
既然是10位,那么將二進制轉換為十進制的話,最大就是1024,如果只要定位按鍵的話可以不用得到具體的電壓值,直接獲得該電壓值下對應的一個十位二進制數就好了。就好比((你按下按鍵產生的壓值/參考的總電壓)==(該電壓下轉換后的十位數/1024))。然后通過獲取的是十位數所在的區間就可以定位按鍵了(這里之所以說區間,是因為總會有些誤差的嘛)。
ADC7.JPG (37.84 KB, 下載次數: 129)
下載附件
2019-6-13 22:13 上傳
ADC6.JPG (38.41 KB, 下載次數: 118)
下載附件
2019-6-13 22:13 上傳
(如圖是ADC使用初始化代碼,和按鍵定位的代碼,誤差我選擇了20)
關于轉換結果:我有兩種寫法
① result=ADCL; result=ADCH*256+result; //轉換結果
② result=ADCL;
result=(ADCH<<8) | result; //轉換結果
(result是自己定義的一個過渡變量)
|
評分
-
查看全部評分
|