一、AD/DA介紹
AD(AnalogtoDigital):模擬-數(shù)字轉(zhuǎn)換,將模擬信號轉(zhuǎn)換為計算機(jī)可操作的數(shù)字信號,DA (Digital to Analog) :數(shù)字-模擬轉(zhuǎn)換,將計算機(jī)輸出的數(shù)字信號轉(zhuǎn)換為模擬信號。AD/DA轉(zhuǎn)換打開了計算機(jī)與模擬信號的大門,極大的提高了計算機(jī)系統(tǒng)的應(yīng)用范圍,也為模擬信號數(shù)字化處理提供了可能。
二、硬件電路模型
AD轉(zhuǎn)換通常有多個輸入通道,用多路選擇開關(guān)連接至AD轉(zhuǎn)換器,以實(shí)現(xiàn)AD多路復(fù)用的目的,提高硬件利用率;AD/DA與單片機(jī)數(shù)據(jù)傳送可使用并口(速度快、 原理簡單),也可使用串口(接線少、使用方便);可將AD/DA模塊直接集成在單片機(jī)內(nèi),這樣直接寫入/讀出寄存器就可進(jìn)行AD/DA轉(zhuǎn)換, 單片機(jī)的I0口可直接復(fù)用為AD/DA的通道 。
三、AD/DA原理待定學(xué)習(xí)
四、XPT2046
AD/DA性能指標(biāo)
指AD/DA數(shù)字 量的精細(xì)程度,通常用位數(shù)表示。例如,對于5V電源系統(tǒng)來說, 8位的AD可將5V等分為256份,即數(shù)字量變化最小-個單位時,模擬量變化5V/256=0.01953125V,所以,8位AD的電壓分辨率為0.01953125V, AD/DA的位數(shù)越高, 分辨率 就越高。
轉(zhuǎn)換速度: 表示AD/DA的最大采樣/建立頻率,通常用轉(zhuǎn)換頻率或者轉(zhuǎn)換時間來表示,對于采樣/輸出高速信號,應(yīng)注意AD/DA的轉(zhuǎn)換速度。
可將AD/DA模塊直接集成在單片機(jī)內(nèi),這樣直接寫入/讀出寄存器就可進(jìn)行AD/DA轉(zhuǎn)換, 單片機(jī)的I0口可直接復(fù)用為AD/DA的通道 。
XPT2046時序,采用SPI方式通信
DIN——MISO——主設(shè)備輸入、從設(shè)備輸出
DOUT——MOSI——主設(shè)備輸出,從設(shè)備輸入
起始位——第一位,即 S 位??刂谱值氖孜槐仨毷?1,即 S= 1。在 XPT2046 的 DIN 引腳檢測到起始位前,所有的輸入將被忽略。
地址——接下來的 3 位( A2、 A1 和 A0)選擇多路選擇器的現(xiàn)行通道(見表 3、表 4 和圖 6),觸摸屏驅(qū)動和參考源輸入。
MODE——模式選擇位,用于設(shè)置 ADC 的分辨率。MODE= 0,下一次的轉(zhuǎn)換將是 12 位模式;MODE= 1,下一次的轉(zhuǎn)換將是 8 位模式。
SER/ DFR位控制參考源模式,選擇單端模式( SER/DFR = 1),或者差分模式( SER/DFR = 0)。在X坐標(biāo)、 Y坐標(biāo)和觸摸壓力測量中,為達(dá)到最佳性能,首選差分工作模式。參考電壓來自開關(guān)驅(qū)動器的電壓。在單端模式下,轉(zhuǎn)換器的參考電壓固定為VREF相對于GND引腳的電壓(更詳細(xì)的說明,見表 3 和表 4,圖 5 和圖 8)。采用單端模式時,X- Y-接地。
PD0 和 PD1——表 5 展示了掉電和內(nèi)部參考電壓配置的關(guān)系。ADC 的內(nèi)部參考電壓可以單獨(dú)關(guān)閉或者打開,但是,在轉(zhuǎn)換前,需要額外的時間讓內(nèi)部參考電壓穩(wěn)定到最終穩(wěn)定值;如果內(nèi)部參考源處于掉電狀態(tài),還要確保有足夠的喚醒時間。ADC 要求是即時使用,無喚醒時間的。另外還得注意,當(dāng) BUSY 是高電平的時候,內(nèi)部參考源禁止進(jìn)入掉電模式。XPT2046 的通道改變后,如果要關(guān)閉參考源,則要重新對 XPT2046 寫入命令。即PD1為1是內(nèi)部參考電壓2.5V,,PD1為0是外部參考電壓VREF。
五、代碼
/*---------------------------------------------------------------------*/ /* --- 公眾號:我愛單片機(jī) ----------------------------------------------*/ /* --- Web: www.52dpj.com --------------------------------------------*/ /* --- QQ: 1256711178 -------------------------------------------------*/ /*---------------------------------------------------------------------*/ #include // 引腳定義 sbit XPT2046_CS = P3 ^ 5; sbit XPT2046_DCLK = P3 ^ 6; sbit XPT2046_DIN = P3 ^ 4; sbit XPT2046_DOUT = P3 ^ 7; /** * @brief ZPT2046讀取AD值 * @param Command 命令字,范圍:頭文件內(nèi)定義的宏,結(jié)尾的數(shù)字表示轉(zhuǎn)換的位數(shù) * @retval AD轉(zhuǎn)換后的數(shù)字量,范圍:8位為0~255,12位為0~4095 */ unsigned int XTP2046_ReadAD(unsigned char Command) // 指令包括選擇的通道,分辨率8、12位,參考電壓,單端模式 { unsigned int ADVAlue = 0; unsigned char i; XPT2046_DCLK = 0; XPT2046_CS = 0; for (i = 0; i < 8; i++) // 發(fā)送指令 { XPT2046_DIN = Command & (0x80 >> i); // 高位在前,先發(fā)送高位 XPT2046_DCLK = 1; XPT2046_DCLK = 0; } for (i = 0; i < 16; i++) // 讀取AD數(shù)據(jù) { XPT2046_DCLK = 1; XPT2046_DCLK = 0; if (XPT2046_DOUT) { ADVAlue |= (0x8000 >> i); } // 高位在前,一共讀16位,但只有前12位有效,后四位用0填充 } XPT2046_CS = 1; if (Command & 0x08) // 根據(jù)模式選擇8位還是12位 { return ADVAlue >> 8; // 當(dāng)8位時,讀取到的數(shù)據(jù)是高八位,因此要往后移8位才是真實(shí)數(shù)據(jù) } else { return ADVAlue >> 4; // 當(dāng)12位時,有效數(shù)據(jù)是12位,后四位都是無效數(shù)據(jù),因此往后移4位是真實(shí)數(shù)據(jù) } } main.c #include #include "LCD1602.h" #include "Delay.h" #include "XPT2046.h" unsigned int ADVAlue; void main() { LCD_Init(); LCD_ShowString(1, 1, "ADJ NTC RG"); while (1) { ADVAlue = XTP2046_ReadAD(XTP2046_XP_8); // 讀取AIN0,可調(diào)電阻 LCD_ShowNum(2, 1, ADVAlue, 4); // 顯示AIN0 ADVAlue = XTP2046_ReadAD(XTP2046_YP_8); // 讀取AIN1,熱敏電阻 LCD_ShowNum(2, 6, ADVAlue, 4); // 顯示AIN1 ADVAlue = XTP2046_ReadAD(XTP2046_VBAT_8); // 讀取AIN2,光敏電阻 LCD_ShowNum(2, 11, ADVAlue, 4); // 顯示AIN2 Delay(10); } }
-
單片機(jī)
+關(guān)注
關(guān)注
6040文章
44594瀏覽量
636948 -
轉(zhuǎn)換器
+關(guān)注
關(guān)注
27文章
8738瀏覽量
147568 -
51單片機(jī)
+關(guān)注
關(guān)注
274文章
5705瀏覽量
123926 -
模擬信號
+關(guān)注
關(guān)注
8文章
1137瀏覽量
52545 -
數(shù)字信號
+關(guān)注
關(guān)注
2文章
975瀏覽量
47607
原文標(biāo)題:51單片機(jī)AD模數(shù)轉(zhuǎn)換,使用SPI通信方式
文章出處:【微信號:電子技術(shù)控,微信公眾號:電子技術(shù)控】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論