中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 我的TLC2543學(xué)習(xí)筆記——基于msp430g2553單片機

        我的TLC2543學(xué)習(xí)筆記——基于msp430g2553單片機

        作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
        Createdon:2012-9-8

        Author:zhangbin

        本文引用地址:http://www.antipu.com.cn/article/201611/322845.htm

        學(xué)習(xí)筆記

        formsp430g2553

        redesignedbyzhangbin

        2012-09-08

        versions:12_09_01

        AllRightsReserved

        TLC2543具有4線制串行接口,分別為片選端(CS),串行時鐘輸入端(I/OCLOCK),串行數(shù)據(jù)輸入端(DATAIN)和串行數(shù)據(jù)輸出端(DATAOUT)(轉(zhuǎn)換結(jié)束腳EOC可以不接)。它可以直接與SPI器件進行連接,不需要其他外部邏輯。同時,它還在高達4MHz的串行速率下與主機進行通信。

        TLC2543的特點及引腳

        TLC2543是TI的12bit串行A/D轉(zhuǎn)換器,11個模擬輸入通道。使用開關(guān)電容逐次逼近技術(shù)完成,A/D轉(zhuǎn)換過程.由于是串行輸入結(jié)構(gòu),能夠MCU的I/O資源.其特點有:

        1)12bit分辨率A/D轉(zhuǎn)換器;

        2)在工作溫度范圍內(nèi)10us轉(zhuǎn)換時間;

        3)11個模擬輸入通道;

        4)3路內(nèi)置自測試方式;

        5)采樣率為66kb/s;

        6)線性誤差+1LSB(max);

        7)有轉(zhuǎn)換結(jié)束(EOC)輸出;

        8)具有單、雙極性輸出;

        9)可編程的MSB或LSB前導(dǎo);

        10)可編程的輸出數(shù)據(jù)長度.

        ???12-Bit-ResolutionA/DConverter

        ???10-μsConversionTimeOverOperating

        Temperature

        ???11AnalogInputChannels

        ???3Built-InSelf-TestModes

        ???InherentSample-and-HoldFunction

        ???LinearityError...±1LSBMax

        ???On-ChipSystemClock

        ???End-of-ConversionOutput

        ???UnipolarorBipolarOutputOperation

        (SignedBinaryWithRespectto1/2the

        AppliedVoltageReference)

        ???ProgrammableMSBorLSBFirst

        ???ProgrammablePowerDown

        ???ProgrammableOutputDataLength

        ???CMOSTechnology

        ???ApplicationReportAvailable

        我用的tlc2543是直插的,引腳圖如下:

        各引腳的詳細(xì)說明如下:

        引腳號

        名稱

        I/O

        說明

        1~9,11,12

        AIN0~AIN10

        I

        模擬量輸入端。11路輸入信號由內(nèi)部多路器選通。對于4.1MHz的I/OCLOCK,驅(qū)動源阻抗必須小于或等于50Ω,而且用60pF電容來限制模擬輸入電壓的斜率

        15

         

        I

        片選端。在端由高變低時,內(nèi)部計數(shù)器復(fù)位。由低變高時,在設(shè)定時間內(nèi)禁止DATAINPUT和I/OCLOCK

        17

        DATAINPUT

        I

        串行數(shù)據(jù)輸入端。由4位的串行地址輸入來選擇模擬量輸入通道

        16

        DATAOUT

        O

        A/D轉(zhuǎn)換結(jié)果的三態(tài)串行輸出端。為高時處于高阻抗?fàn)顟B(tài),為低時處于激活狀態(tài)

        19

        EOC

        O

        轉(zhuǎn)換結(jié)束端。在最后的I/OCLOCK下降沿之后,EOC從高電平變?yōu)榈碗娖讲⒈3值睫D(zhuǎn)換完成和數(shù)據(jù)準(zhǔn)備傳輸為止

        10

        GND

        地。GND是內(nèi)部電路的地回路端。除另有說明外,所有電壓測量都相對GND而言

        18

        I/OCLOCK

        I

        輸入/輸出時鐘端。I/OCLOCK接收串行輸入信號并完成以下四個功能:(1)在I/OCLOCK的前8個上升沿,8位輸入數(shù)據(jù)存入輸入數(shù)據(jù)寄存器。(2)在I/OCLOCK的第4個下降沿,被選通的模擬輸入電壓開始向電容器充電,直到I/OCLOCK的最后一個下降沿為止。(3)將前一次轉(zhuǎn)換數(shù)據(jù)的其余11位輸出到DATAOUT端,在I/OCLOCK的下降沿時數(shù)據(jù)開始變化。(4)I/OCLOCK的最后一個下降沿,將轉(zhuǎn)換的控制信號傳送到內(nèi)部狀態(tài)控制位

        14

        REF+

        I

        正基準(zhǔn)電壓端?;鶞?zhǔn)電壓的正端(通常為Vcc)被加到REF+,最大的輸入電壓范圍由加于本端與REF-端的電壓差決定

        13

        REF-

        I

        負(fù)基準(zhǔn)電壓端。基準(zhǔn)電壓的低端(通常為地)被加到REF-

        20

        Vcc

        電源

        寫程序時,要參考對應(yīng)的時序圖,嚴(yán)格按照時序進行操作就可以了,我用到的時序圖如下:

        是16時鐘的,使用CS,MSBfirst:

        對tlc2543進行操作的時候,尤其是要用到它的多通道工作時,要特別注意各個通道的操作,因為如果操作不當(dāng),就有可能讀出的不是想要通道的數(shù)據(jù)(我就遇到過類似的問題)。下面我就這個問題介紹一下我自己的經(jīng)驗和解決辦法。

        首先先看一下數(shù)據(jù)手冊上的輸入寄存器的命令介紹:

        在進行操作之前,必須要看清楚上面的命令表格。要特別注意,通道選擇的指令的位置在8位輸入指令的高8位D7~D4,清楚了這一點,就可以明白程序中對tlc2543進行操作的函數(shù)中為什么會有一句port<<=4;//左移4位了。

        還要注意一點是:對TLC2543進行操作函數(shù)的原型是uinttlc_read(ucharport),其中參數(shù)port為指定的通道數(shù)。調(diào)用它的時候,通道0對應(yīng)的port為0x00(或十進制的0),調(diào)用形式應(yīng)該是tlc_read(0x00);通道1,對應(yīng)的為tlc_read(0x01)或tlc_read(1);通道6對應(yīng)的為tlc_read(0x06)或tlc_read(6)??傊厦嫠褂玫膒ort的代表通道數(shù)在port八位的低四位,這樣通過上面的移位指令port<<=4;就可以把這4位通道指令移到高四位了,而這剛好符合上面表格中寄存器對命令的規(guī)則。

        如果想在調(diào)用tlc_read(ucharport)時用port的高四位代表選擇的通道數(shù),如通道1為0x10,通道3為0x30,通道6為0x60等的話,那么這樣的port8位直接送入,通道選擇的4位數(shù)據(jù)就直接在高4位了,很容易就知道函數(shù)中的移位指令port<<=4;就不應(yīng)該再要了。

        上面是通道選擇的時候要注意的問題。但是還有一個問題是通道選擇正確,注意了上面的問題,但是讀出的數(shù)據(jù)就不是我們想要的通道的數(shù)據(jù)。這就涉及到下面的問題了。

        從給2543送入選擇的通道數(shù),到它AD轉(zhuǎn)換完成了,輸出數(shù)據(jù)這一過程需要一段時間,時間很短,但是就產(chǎn)生了一個問題。問題是這樣的:我上面所寫的函數(shù)uinttlc_read(ucharport)是有返回值的,返回值是tlc輸出的AD轉(zhuǎn)換的結(jié)果。由于我在實現(xiàn)該函數(shù)的時候,沒有讓tlc轉(zhuǎn)換多次(一般是3次),而是直接轉(zhuǎn)換一次就輸出了結(jié)果(具體程序我下面會貼出)。值就導(dǎo)致了本次轉(zhuǎn)換輸出的結(jié)果是上一次輸入命令選擇的通道的轉(zhuǎn)化值。而這一次輸入命令選擇的通道的轉(zhuǎn)換結(jié)果,就在下一次輸出。上面的問題不難理解,明白了上面的問題,就很容易知道了解決辦法了,有兩個:1,直接在函數(shù)uinttlc_read(ucharport)中,控制tlc循環(huán)對這一次選擇的通道port轉(zhuǎn)換多次(一般為3次,比較保險,速度又比較快);2,函數(shù)uinttlc_read(ucharport)不改動,在調(diào)用的時候控制循環(huán)多次(一般為3次),對這一次選擇的通道進行多次轉(zhuǎn)換,然后在取值。上面的兩種方法都可以保證本次取得的值就是本次選擇的通道的AD轉(zhuǎn)換值。

        有很多人的程序都是使用了上面的第一種方法,我自己實現(xiàn)的是第二種方法,這兩種方法的本質(zhì)其實是一樣的,都是用多次采樣的方法來保證輸出結(jié)果和選擇通道是相對應(yīng)的。

        上面我根據(jù)自己的理解,對tlc2543進行了大概了介紹,著重介紹了一些容易出錯,較難理解的地方。我也在網(wǎng)上查了一些資料,但一般都是只有程序,而沒有較詳細(xì)的說明,如果自己再慢慢琢磨的話,就比較浪費時間了,而且比較容易出錯,而上面的值得注意的地方也比較難以理解。我身邊也有同學(xué)在網(wǎng)上找來了程序就直接用,而不對它進行細(xì)心的分析研究,這樣的話肯定是出錯的概率是比較高的,而且也不能真正的掌握它的使用方法。所以我就把我自己的理解寫了出來,希望對你有所幫助。

        當(dāng)然更詳細(xì),更權(quán)威的資料當(dāng)然是對應(yīng)的數(shù)據(jù)手冊了,所以要經(jīng)常查閱,并且以它為準(zhǔn)。

        好了下面是我寫的程序,比較好用,我一直都在用,沒有發(fā)現(xiàn)有什么大的問題,實現(xiàn)了控制多通道的轉(zhuǎn)換。

        單片機使用的是TI的msp430g2553

        注釋的也比較詳細(xì):

        #include

        #include"ser_12864.h"

        #defineCLR_CLOCKP2OUT&=~BIT0;//時鐘輸入

        #defineSET_CLOCKP2OUT|=BIT0;

        #defineCLR_INP2OUT&=~BIT1;//數(shù)據(jù)輸入

        #defineSET_INP2OUT|=BIT1;

        #defineCLR_CSP2OUT&=~BIT2;//片選

        #defineSET_CSP2OUT|=BIT2;

        #defineDATA_OUTP2IN&BIT3;//數(shù)據(jù)輸出

        #defineEOCP1IN&BIT7;//轉(zhuǎn)換結(jié)束端

        //這是針對tlc2543進行IO口配置的函數(shù)

        voidtlc_init()//tlc初始化

        {

        P2DIR|=BIT0+BIT1+BIT2;

        P2DIR&=~BIT3;

        P1DIR&=~BIT7;

        }

        //名稱:read2543

        //功能:TLC2543驅(qū)動模塊

        //輸入?yún)?shù):port通道號

        //輸出參數(shù):ad轉(zhuǎn)換值

        uinttlc_read(ucharport)

        {

        uintad=0;

        uchari=0;

        CLR_CLOCK;

        CLR_CS;

        port<<=4;//左移4位

        for(i=0;i<12;i++)

        {

        if(P2IN&BIT3)

        ad|=0x01;

        if(port&0x80)

        {

        SET_IN;

        }

        elseif((port&0x80)==0)

        {

        CLR_IN;

        }

        SET_CLOCK;

        //delay(3);

        CLR_CLOCK;

        //delay(3);

        port<<=1;

        ad<<=1;

        }

        SET_CS;

        //while(P1IN&BIT7);//等待轉(zhuǎn)換結(jié)束此句話可以不要

        while((P1IN&BIT7)==0);//等待轉(zhuǎn)換結(jié)束此句話可以不要

        ad>>=1;

        return(ad);

        }

        voidmain(void)

        {

        uintad_data_0=0;//tlc的采樣值

        uintad_data_5=0;

        uchari=0;

        unsignedchars1[]={"Tlc2543"};

        unsignedchars2[]={"ch_6:"};

        unsignedchars3[]={"ch_8:"};

        //unsignedchars4[]={"2012-06-24-78-55"};

        WDTCTL=WDTPW+WDTHOLD;//停止看門狗定時器

        BCSCTL1=CALBC1_12MHZ;//設(shè)定cpu時鐘DCO頻率為12MHz

        DCOCTL=CALDCO_12MHZ;

        P2DIR|=BIT4+BIT5;//液晶的兩條線

        init_lcd();

        tlc_init();

        wr_string(0,0,s1);

        P1DIR|=BIT6;//調(diào)試指示燈

        for(;;)

        {

        ad_data_0=0;

        ad_data_5=0;

        P1OUT^=BIT6;

        for(i=0;i<3;i++)

        {

        ad_data_0=tlc_read(0x06);//選擇通道6

        delay_ms(1);//適當(dāng)延遲,等待轉(zhuǎn)換必須的

        }

        wr_string(0,1,s2);

        wr_int(3,1,ad_data_0);

        for(i=0;i<3;i++)

        {

        ad_data_5=tlc_read(0x08);//選擇通道8

        delay_ms(1);

        }

        wr_string(0,2,s3);

        wr_int(4,2,ad_data_5);

        //ad_data=tlc_read(7);

        //wr_int(0,3,ad_data);

        delay_ms(500);

        }

        }

        //本程序是用msp430控制12位的串行ADltc2543

        //目前可以實現(xiàn)控制通道0進行轉(zhuǎn)換,讀取轉(zhuǎn)換值,檢驗正確,

        //但是控制多個通道一次進行轉(zhuǎn)換,輸出結(jié)果,還沒有實現(xiàn),需要進一步了解ltc2543,改進程序

        //for(;;)

        //{

        //ad_data_0=0;

        //ad_data_5=0;

        //P1OUT^=BIT6;

        //ad_data_0=tlc_read(0x06);//選擇通道6

        //wr_string(0,1,s2);

        //wr_int(3,1,ad_data_0);

        //

        ////delay_ms(100);

        //

        //ad_data_5=tlc_read(0x08);//選擇通道8

        //wr_string(0,2,s3);

        //wr_int(4,2,ad_data_5);

        ////ad_data=tlc_read(7);

        ////wr_int(0,3,ad_data);

        //

        //delay_ms(400);

        //

        //}

        //如上面的一段程序,我本來是想讓tlc分別采用通道6和通道8,然后再讀出采樣值,但是實驗的結(jié)果是:我讀出的結(jié)果通道6和通道8的剛好相反

        //目前還沒有完全清楚原因。我想有可能是采樣時序的問題沒有搞清楚,有可能是第一次送入通道6的地址,讓通道6進行轉(zhuǎn)換,但是得等到下一次才能讀出

        //結(jié)果。而這一次讀的結(jié)果是上一次送入的地址轉(zhuǎn)換的結(jié)果。這樣的話就是這一次轉(zhuǎn)換的結(jié)果,下一次才能讀出,而這一次讀出的結(jié)果是上一次

        //轉(zhuǎn)換的值,其對應(yīng)的轉(zhuǎn)換通道也是上一次確定的

        //如上面源程序中,采用這種方法可以解決這個問題,因為輸入一次新的地址后,讓tlc多轉(zhuǎn)換幾次,這樣就可以確保是本次的結(jié)果和本次的通道

        //相對應(yīng)了,一般循環(huán)3次以上就可以了



        關(guān)鍵詞: TLC2543msp430g2553單片

        評論


        技術(shù)專區(qū)

        關(guān)閉