對於adc0809這種基礎的模擬轉數字的晶元,在現實生活中是很常用的,所以本人再此講一講自己做的心得體會。
首先我們的框架圖如下:
接下來我們需要了解adc0809,其引腳圖如下:
其中1.in(0~7):代表的是模擬輸號輸入通道,可以選擇(0~7腳)進行採集;
2.add(a~c):這3個腳是用來選擇模擬通道輸入口的,其真值表如下:
3.start:這個引腳是啟動adc0809的當有乙個脈衝輸入時,adc0809會開始轉換;
5.eoc:這個引腳是輸出腳,當adc0809處如轉換期,或者沒有工作時處於低電平狀態,當晶元轉換成功時會變成高電平;
6.2^(-1~-8):這8個腳是輸出腳,從msb到lsb分別對應的是(128,64......1),在程式中只需將其加起來再除以256*(v_ref+)即得所轉換的電壓;
7.output enable:這個引腳是控制輸出的引腳,當為低電平時,輸出呈高阻態,資料不輸出,當為高電平時,資料輸出;
8.clock:時鐘訊號輸入腳其範圍為(10khz到640khz,根據廠家的不同,其最大輸入時鐘訊號也會有所不同);
9.v_ref+:正基準電壓,這裡我選擇5v;
10.v_ref-:負基準電壓,這裡我們將其接地;
11.vcc:這裡我們接+5v;
12.gnd:接地。
寫程式時,我們需要了解其時序圖,時序圖如下:
從時序圖中可以看出,我們在程式中先寫位址,然後裝載位址,再啟動start,當eoc為高時,啟動output enable,資料輸出,微控制器讀資料。
從表中可以看出,每個電平的持續時間都是ns級的,51微控制器(以12mhz晶振為例),這裡我們的機器週期為1us,us
其微控制器與adc0809的連線圖如下:
其程式如下:
#include#define uint unsigned int
#define uchar unsigned char
sbit adda=p1^0; // 位址a
sbit addb=p1^1; // 位址b
sbit addc=p1^2; // 位址c
sbit start_ale=p1^4; // 位址裝載,轉換啟動腳
sbit oe=p1^5; // 輸出使能
sbit eoc=p1^6; // 轉換標誌位
sbit key_start=p3^2; // 開始轉換按鍵
sbit key_end=p3^3; // 停止轉換按鍵
uchar adc_date=0;
uint i;
void adc_start() //adc轉換開始函式
void usart_timer_init() //串列埠初始化,定時器初始化
void key_scan() //按鍵掃瞄函式
} }}
void main()
}void pick() interrupt 1 //定時器0中斷服務函式
VHDL狀態機控制ADC0809 轉貼
以前做硬體,現在轉做軟體了,對以前做的東西還是很懷念,想當年做的乙個用altera公司的epm7128slc84 7和adc0809做的乙個簡單系統,玩得團團轉,多有成就感啊。特別覺得狀態機的思想很奇妙。所以現在找了一篇vhdl狀態機的程式,懷念。基於vhdl語言實現對adc0809簡單控制原始碼 ...
微控制器筆記 ADC
mcp3421高精度adc轉換器 csdn部落格 blog.csdn.net 乙個專案的需求,使用的微控制器型號為stm32f030f4,雖然微控制器自帶了12位adc轉換器,解析度可以達到805.66uv 此型號沒有內部參考電壓,所以使用工作電壓作為參考電壓,所以精度值計算 3.3v除以2的12次...
微控制器 ADC詳解
之前有說到,計算機世界裡,只有數字量0和1,那你有沒有想過乙個問題,那要不是數字量怎麼表示。比如這樣。他在微控制器中是怎樣儲存及傳輸的呢?理論篇 數字量 在時間上和數量上都是離散的物理量稱為數字量。把表示數字量的訊號叫數碼訊號。把工作在數碼訊號下的電子電路叫數位電路。數字量由多個開關量組成。如三個開...