MSP430系列的許多型號(hào)內(nèi)部都含有A/D轉(zhuǎn)換器(ADCs),例如MSP430F13x系列和MSP430F14x系列,內(nèi)部均含有12位的A/D。但在許多應(yīng)用場合,不需要12位的A/D,只需要8 位或10位的A/D就足夠了。這時(shí)候用戶可能會(huì)選擇MSP430x11x系列,外部添加模數(shù)轉(zhuǎn)換器。在典型應(yīng)用中,低功耗、易操作的TLC549(8位 A/D)或TLV1549(10位A/D)器件可經(jīng)很方便地與MSP430連接。本文介紹一個(gè)MSP430F1121與TLC549的接口實(shí)例。 1 硬件設(shè)計(jì) MSP430F1121使用三個(gè)I/O口與TLC549的接口串行相連,通過串行接口采樣。TLC549完成A/D轉(zhuǎn)換的時(shí)間小于17μs。電路原理圖如下所示。 TLC549-MSP430F1121應(yīng)用電路 2 工作原理 利用三個(gè)數(shù)字I/O接口,MSP430F1121驅(qū)動(dòng)TLC549 A/D轉(zhuǎn)換采用異步串行接口,在實(shí)際應(yīng)用中,MSP430F1120的I/O管腳P2.0和P2.1用P2的方向寄存器(P2DIR)配置為輸出,用P2 的輸出寄存器(P2OUT)提供相應(yīng)位的輸出緩沖信息。P2.0管腳與TLC549的選片管腳CS相連,P2.1管腳與TLC549的輸入/輸出時(shí)鐘 I/O CLK相連。轉(zhuǎn)換數(shù)據(jù)從TLC549的數(shù)據(jù)輸出管腳DO讀出,進(jìn)入MSP430F1121的P2.3管腳。如上圖所示,MSP430F1121選擇了 P2.0、P2.1、P2.3三個(gè)管腳,實(shí)際上任意一個(gè)管腳均能夠驅(qū)動(dòng)TLC549。當(dāng)CS為高電平時(shí),DO為高阻狀態(tài)。轉(zhuǎn)換開始之前,CS必須為低電平,以確保完成轉(zhuǎn)換,MSP430F1121在P2.1管腳上產(chǎn)生總計(jì)8個(gè)的時(shí)鐘脈沖應(yīng)用于TLC549 I/O CLK管腳的輸入。當(dāng)CS為低電平時(shí),最先出現(xiàn)在DO管腳的信號(hào)為轉(zhuǎn)換值得最高位。MSP430F1121通過P2.3管腳,從TLC549的DO管腳連續(xù)移位讀取轉(zhuǎn)換數(shù)據(jù)進(jìn)入ADCDATA寄存器。最初的四個(gè)脈沖的下降沿分別移出上一次轉(zhuǎn)換值的第6位、5位、4位、3位,其中第四個(gè)時(shí)鐘下降沿啟動(dòng)采樣功能,采樣TL549模擬輸入信號(hào)的當(dāng)前轉(zhuǎn)換值。后續(xù)三個(gè)時(shí)鐘脈沖輸送給I/O CLK管腳,分別在下降沿把上一次轉(zhuǎn)換值的第2位、1位、0位轉(zhuǎn)換位移出。最終(第八個(gè))時(shí)鐘脈沖的下降沿芯片,采樣/保持功能開始保持操作,保持操作持續(xù)到下一個(gè)第四時(shí)鐘的下降沿。轉(zhuǎn)換的周期由TLC549的內(nèi)部振蕩器定時(shí),不受外部時(shí)鐘的約束。一個(gè)轉(zhuǎn)換完成需要17μs。在轉(zhuǎn)換過程中, CS給一個(gè)高電平,DO回到高阻狀態(tài)。下一次轉(zhuǎn)換序列之前,至少延時(shí)17μs,否則TLC549的轉(zhuǎn)換代碼將被破壞。
3 軟件設(shè)計(jì) 在程序中,在程序MEAS_549需要150 MCLK周期和31個(gè)字節(jié)的匯編代碼包括子程序調(diào)用。整個(gè)例程需要60個(gè)字節(jié),功能包括:關(guān)閉看門狗,設(shè)置堆棧指針,系統(tǒng)復(fù)位以后I/O的初始化,子程序 MEAS_549被調(diào)用驅(qū)動(dòng)8位轉(zhuǎn)換代碼順序進(jìn)入ADCDATA寄存器,一個(gè)寄存器(R12)臨時(shí)用來計(jì)算字節(jié)的位數(shù)。
源代碼如下: NAME fet_549 ; MSP430F1121 - TLC549接口例程; -------------------------------------------------------------------------------- #define ADCData R11 #define Counter R12 P2IN equ 00028h ; P2口輸入寄存器 P2OUT_ equ 00029h ; P2口輸出寄存器 P2DIR_ equ 0002Ah ; P2口方向寄存器 WDTCTL_ equ 00120h ; 看門狗定時(shí)控制器 WDTHOLD equ 00080h ; 看門狗保持位 WDTPW equ 05A00h ; 看門狗寫入控制字
CS equ 001h ; P2.0 芯片片選 CLK equ 002h ; P2.1 芯片時(shí)鐘 DO equ 008h ; P2.3 數(shù)據(jù)輸出
;--------------------------------------------------------------------- ORG 0F000h ; 編程起始地址 ;--------------------------------------------------------------------- RESET MOV.w #0300h,SP ; 初始化X112X堆棧 StopWDT MOV.w #WDTPW+WDTHOLD,&WDTCTL ; 關(guān)閉看門狗定時(shí)器 SetupP2 MOV.b #CS,&P2OUT ; /CS設(shè)置, P2.X初始化 bis.b #CS+CLK,&P2DIR ; /CS 和 CLK輸出 ;
Mainloop call #Meas_549 ; 調(diào)用Meas_549子程序 jmp Mainloop ; 重復(fù)調(diào)用Meas_549子程序
;--------------------------------------------------------------------- Meas_549; 采樣TLC549的數(shù)據(jù),數(shù)據(jù)移入ADCData(R11), ;計(jì)數(shù)器 (R12)記錄移位的位數(shù) ;--------------------------------------------------------------------- MOV.w #8,Counter ; 8位數(shù)據(jù)的位數(shù) clr.w ADCData ; 清除數(shù)據(jù)緩沖區(qū) bic.b #CS,&P2OUT ; /CS復(fù)位, 使能ADC ADC_Loop bit.b #DO,&P2IN ; (4) DO移入C (進(jìn)位) bis.b #CLK,&P2OUT ; (4) 時(shí)鐘變高電平 bic.b #CLK,&P2OUT ; (4) 時(shí)鐘變低電平 rlc.w ADCData ; (1) C移入ADCData dec.w Counter ; (1) 8位全部移入否? jnz ADC_Loop ; (2) 如果沒有,調(diào)用ADC_Loop bis.b #CS,&P2OUT ; /CS設(shè)置, 關(guān)閉ADC ret ; 調(diào)出子程序 ;--------------------------------------------------------------------- ORG 0FFFEh ; ;--------------------------------------------------------------------- DW RESET ; MSP430復(fù)位向量 END
用戶可對(duì)子程序MEAS_549的其中一行進(jìn)行修改,目的是達(dá)到10位轉(zhuǎn)換的需求。程序中需要10個(gè)脈沖量,數(shù)據(jù)移動(dòng)10位進(jìn)入ADCDATA寄存器。 MOV.w #10,Counter ; 10位數(shù)據(jù)的位數(shù).
|
|