單片機(jī)擴(kuò)展觸摸屏人機(jī)接口的應(yīng)用實(shí)例
摘要: 本文介紹了四線電阻式觸摸屏控制器BBADS7843與AVR單片機(jī)Atmega128的硬件連接和驅(qū)動(dòng)程序設(shè)計(jì)。
關(guān)鍵詞: 觸摸屏;ADS7843
觸摸屏
如圖1,典型觸摸屏的工作部分一般由三部分組成:兩層透明的阻性導(dǎo)體層、兩層導(dǎo)體之間的隔離層、電極。阻性導(dǎo)體層選用阻性材料,如銦錫氧化物(ITO)涂在襯底上構(gòu)成,上層襯底用塑料,下層襯底用玻璃。隔離層為粘性絕緣液體材料,如聚脂薄膜。電極選用導(dǎo)電性能極好的材料(如銀粉墨)構(gòu)成,其導(dǎo)電性能大約為ITO的1000倍。
圖1 觸摸屏
觸摸屏工作時(shí),上下導(dǎo)體層相當(dāng)于電阻網(wǎng)絡(luò)。當(dāng)某一層電極加上電壓時(shí),會(huì)在該網(wǎng)絡(luò)上形成電壓梯度。如有外力使得上下兩層在某一點(diǎn)接觸,則在電極未加電壓的另一層可以測(cè)得接觸點(diǎn)處的電壓,從而知道接觸點(diǎn)處的坐標(biāo)。比如,在頂層的電極(X+,X-)上加上電壓,則在頂層導(dǎo)體層上形成電壓梯度,當(dāng)有外力使得上下兩層在某一點(diǎn)接觸,在底層就可以測(cè)得接觸點(diǎn)處的電壓,再根據(jù)該電壓與電極(X+)之間的距離關(guān)系,知道該處的X坐標(biāo)。然后,將電壓切換到底層電極(Y+,Y-)上,并在頂層測(cè)量接觸點(diǎn)處的電壓,從而知道Y坐標(biāo)。四線制電阻觸摸屏也是目前最常用的觸摸屏產(chǎn)品。本系統(tǒng)中選用AMT9502。
觸摸屏控制器硬件設(shè)計(jì)
Atmega128 單片機(jī)是Atmel公司的8位RISC單片機(jī),片內(nèi)有128Kflash、4K RAM、4K EEPROM、兩個(gè)可編程的USART、1個(gè)可工作在主機(jī)/從機(jī)的SPI串行接口。此外還有豐富的I/O接口,8通道10位分辨率ADC轉(zhuǎn)換器等硬件資源。
單片機(jī)最小系統(tǒng)設(shè)計(jì)如圖2所示。低電壓版本的 Atmega 128支持3.3V、5V兩種供電電壓,本系統(tǒng)采用5V供電,便于供電電壓統(tǒng)一。晶振采用常規(guī)直插晶振7.373800M,選用標(biāo)準(zhǔn)晶振的目的主要是為了提高USART通訊波特率的準(zhǔn)確性,使單片機(jī)能夠使用于比較高的通訊波特率。復(fù)位電路采用常規(guī)的RC復(fù)位,沒有使用特殊的復(fù)位器件,Atmega 128已經(jīng)內(nèi)置了看門狗,并且可以通過編程使看門狗在程序啟動(dòng)前啟動(dòng),即上電后程序啟動(dòng)前,看門狗已經(jīng)啟動(dòng),這樣系統(tǒng)的可靠性可以得到保證,看門狗最高分頻系數(shù)是2048K,最小分頻系統(tǒng)是16K。系統(tǒng)中PB0(SS)已經(jīng)直接接到+5V,這樣硬件配置了單片機(jī)為主機(jī),下面所有外掛的均為從機(jī),本系統(tǒng)外掛只有一個(gè)就是ADS7843。單片機(jī)和觸摸屏控制器連接如圖3所示,PB1(CLK) 為SPI時(shí)鐘,PB2(MOSI)為SPI主機(jī)輸出從機(jī)輸入, PB3(MISO)SPI主機(jī)輸入從機(jī)輸出。這三根線為SPI總線。
圖2 單片機(jī)最小系統(tǒng)圖
圖3 單片機(jī)和觸摸屏控制器連接圖
ADS7843是TI公司的觸摸屏控制器芯片 專門應(yīng)用于四線電阻式觸摸屏,最高達(dá)到125K的轉(zhuǎn)換率 8位或者12位可編程精度。外部參考電壓范圍從1V到VCC均可,VCC最高電壓為5V,高速低功耗使得ADS7843非常適合于使用電阻觸摸屏的手持設(shè)備。寬溫度設(shè)計(jì)使得它很適用于大量的工業(yè)現(xiàn)場(chǎng)。
ADS7843連接觸摸屏的示意圖如圖4所示。
圖4 ADS7843和觸摸屏連接圖
觸摸屏是一個(gè)四線電阻屏幕,可以示意出兩個(gè)電阻,測(cè)量X方向的時(shí)候,將X+,X-之間加上參考電壓Vref,Y-斷開,Y+作為A/D輸入,進(jìn)行A/D轉(zhuǎn)換獲得X方向的電壓,同理測(cè)量Y方向的時(shí)候,將Y+,Y-之間加上參考電壓Vref,X-斷開,X+作為A/D輸入,進(jìn)行A/D轉(zhuǎn)換獲得Y方向的電壓,之后再完成電壓與坐標(biāo)的換算。整個(gè)過程類似一個(gè)電位器,觸摸不同的位置分得不同的電壓。
以上所需要的加參考電壓斷開A/D轉(zhuǎn)換等工作都是ADS7843直接完成的,只需要將相應(yīng)的命令傳輸?shù)紸DS7843即可,等待轉(zhuǎn)換周期完成,檢測(cè)到BUSY信號(hào)不再忙,即可以獲得相應(yīng)電壓的數(shù)據(jù)。
此外PENIRQ一般需要一個(gè)上拉電阻,因?yàn)锳DS7843是一個(gè)OC門輸出結(jié)構(gòu),本系統(tǒng)中直接使用Atmega 128內(nèi)部的上拉電阻。單片機(jī)中斷系統(tǒng)中將INT0分配給觸摸屏控制器,并且設(shè)定成低電平觸發(fā),這樣可以檢測(cè)按鍵時(shí)間,可以用按鍵長短處理不同的功能。
觸摸屏控制器驅(qū)動(dòng)程序
驅(qū)動(dòng)程序的編寫與硬件的設(shè)計(jì)是直接相關(guān),驅(qū)動(dòng)程序是以上面所設(shè)計(jì)的硬件為基礎(chǔ)的。
表1 ADS7843的控制字及數(shù)據(jù)傳輸格式
根據(jù)ADS7843的Datasheet,ADS7843的控制字及數(shù)據(jù)傳輸格式如表1。其中S為數(shù)據(jù)傳輸起始標(biāo)志位,該位必為“1”。A2~A0進(jìn)行通道選擇。MODE用來選擇A/D轉(zhuǎn)換的精度,“1”選擇8位,“0”選擇12位。SER/選擇參考電壓的輸入模式。PD1、PD0選擇省電模式:“00”省電模式允許,在兩次A/D轉(zhuǎn)換之間掉電,且中斷允許;“01”同“00”,只是不允許中斷;“10”保留;“11”禁止省電模式。
為了完成一次電極電壓切換和A/D轉(zhuǎn)換,需要先通過串口往ADS7843發(fā)送控制字,轉(zhuǎn)換完成后再通過串口讀出電壓轉(zhuǎn)換值。標(biāo)準(zhǔn)的一次轉(zhuǎn)換需要24個(gè)時(shí)鐘周期。由于串口支持雙向同時(shí)進(jìn)行傳送,并且在一次讀數(shù)與下一次發(fā)控制字之間可以重疊,所以轉(zhuǎn)換速率可以提高到每次16個(gè)時(shí)鐘周期。如果條件允許,CPU可以產(chǎn)生15個(gè)CLK的話(比如FPGA和ASIC),轉(zhuǎn)換速率還可以提高到每次15個(gè)時(shí)鐘周期。
所以我們選擇控制字 :
0x94-----X+輸入得到Y(jié) AD值 0xe4----Y+輸入得到X AD值
SPI初始化程序:
void spi_init(void)
{
SPCR = 0x53; //setup SPI
SPSR = 0x00; //setup SPI
}
SPI主機(jī)傳輸函數(shù):
void SPI_MasterTransmit(char cData)
{
SPDR = cData; /* 啟動(dòng)數(shù)據(jù)傳輸 */
while(!(SPSR & (1<<SPIF))); /*等待傳輸
結(jié)束*/
}
讀取ADS7843的模擬量值;
unsigned int Get_Touch_Ad(unsigned char
channel)
{
unsigned int ad_tem;
SPI_MasterTransmit(channel);//發(fā)送控制字
if(PING&&0x08==0) ; //判斷busy
delayms(1);
SPI_MasterTransmit(0);
delayms(1); //等待發(fā)送完畢
ad_tem=SPDR;
ad_tem=ad_tem<<8;
SPI_MasterTransmit(0); //啟動(dòng)spi傳送
delayms(1); //等待發(fā)送完畢
ad_tem|=SPDR;
ad_tem=ad_tem>>4;
return(ad_tem); //返回的參數(shù)
}
不同的用戶還需根據(jù)自己設(shè)計(jì)的系統(tǒng),做一個(gè)簡(jiǎn)單的四點(diǎn)校正程序,這樣可以獲得一個(gè)精確度較高的觸摸屏坐標(biāo)體系。
結(jié)語
本系統(tǒng)已經(jīng)在國家重點(diǎn)建設(shè)項(xiàng)目揚(yáng)州二電廠工程2
評(píng)論