久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

AVR 單片機(jī)學(xué)習(xí)(九)iic總線及TWI模塊的使用方法

作者:zww 1988   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年04月18日   【字體:
  • IIC總線定義與特點(diǎn)
  • I2C總線的工作原理
  • AVR的TWI模塊的使用方法
  • AT24C02
  • IIC inter integrated circuit  總線是一種由PHILIPS 公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。I2C總線產(chǎn)生于在80年代,最初為音頻和視頻設(shè)備開發(fā),如今主要在服務(wù)器管理中使用,其中包括單個(gè)組件狀態(tài)的通信。例如管理員可對(duì)各個(gè)組件進(jìn)行查詢,以管理系統(tǒng)的配置或掌握組件的功能狀態(tài),如:電源和系統(tǒng)風(fēng)扇,可隨時(shí)監(jiān)控內(nèi)存、硬盤、網(wǎng)絡(luò)、系統(tǒng)溫度等多個(gè)參數(shù),增加了系統(tǒng)的安全性,方便了管理。

    TWI:ATMega 系列單片機(jī)內(nèi)集成兩線制串行接口模塊,ATmegl文檔稱為TWI接口事實(shí)上TWI與PHILIOS的I2C總線是同一回事,之所以叫它TWI是因?yàn)檫@樣命名可使ATmel避免交術(shù)語(yǔ)版稅。所以,TWI是兼容I2C的一種說(shuō)法。

    I2C總線最只要的優(yōu)點(diǎn)是其簡(jiǎn)單性和有效性。由于接口直接在組件之上,因此I2C總線占用的空間非常小,減少了電路板的空間和芯片管腳的數(shù)量,降低了互聯(lián)成本。總線的長(zhǎng)度可高達(dá)25英尺,并且能夠以10KPS的最大傳輸率支持40個(gè)組件,I2C總線的另一個(gè)優(yōu)點(diǎn)是,它支持多主控(MULTIMASTERING),其中任何能夠進(jìn)行發(fā)送和接受的設(shè)備都可以稱為主總線,一個(gè)主控能夠控制信號(hào)的傳輸和時(shí)鐘頻率。當(dāng)然,在任何時(shí)間點(diǎn)上只能有一個(gè)主控。

     

    由于AVR 有上拉電阻所以 R1 R2 可以不要。其實(shí)還的共地應(yīng)該是3根線。在多主控上有個(gè)總線總裁的知識(shí)可以參閱相關(guān)文檔學(xué)習(xí)。呵呵、初學(xué)者不用了解。

    I2C總線是由數(shù)據(jù)線SDA和時(shí)鐘線SCL構(gòu)成的串行總線,可發(fā)送和接受數(shù)據(jù)。在CPU與被控IC之間、IC與IC之間進(jìn)行雙向傳送、最高傳送速率100KBPS.各種被控制電路均并聯(lián)在這條總線上,最高傳送速率100KBPS.各種被控制電路均并聯(lián)在這條總線上,但就像電話機(jī)一樣只有撥通各自的號(hào)碼才能工作,所以每個(gè)電路和模塊都有唯一的地址,在信息的傳輸過程中,I2C總線并接的每一模塊電路既是主控器(或被控器),又是發(fā)送器(或接收器),這取決于它所要完成的功能,CPU發(fā)出的控制信號(hào)分為地址碼和控制量?jī)刹糠郑刂反a用來(lái)選址,即接通需要控制的電路,確定控制的種類;控制量決定調(diào)整的類別(如對(duì)比度、亮度等)及需要調(diào)整的量。這樣各控制電路雖然掛在同一條總線上,卻彼此獨(dú)立,互不相關(guān)。

    oI2C總線在傳送數(shù)據(jù)過程中共有三種類型信號(hào), 它們分別是:開始信號(hào)、結(jié)束信號(hào)和應(yīng)答信號(hào)。
    o開始信號(hào):SCL為高電平時(shí),SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。
    o結(jié)束信號(hào):SCL為高電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。
    o應(yīng)答信號(hào):接收數(shù)據(jù)的IC在接收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個(gè)信號(hào)后,等待受控單元發(fā)出一個(gè)應(yīng)答信號(hào),CPU接收到應(yīng)答信號(hào)后,根據(jù)實(shí)際情況作出是否繼續(xù)傳遞信號(hào)的判斷。若未收到應(yīng)答信號(hào),由判斷為受控單元出現(xiàn)故障。
    o這些信號(hào)中,起始信號(hào)是必需的,結(jié)束信號(hào)和應(yīng)答信號(hào),都可以不要。
     
    發(fā)送地址跟上面右邊那個(gè)兩個(gè)發(fā)送數(shù)據(jù) 0   是一樣的由時(shí)鐘來(lái)鎖存相應(yīng)的數(shù)據(jù)位,地址共七位,第8位是讀還是寫狀態(tài),讀的話置1  寫 置0 。第9位是應(yīng)答為,切記應(yīng)答位不是單片機(jī)發(fā)出的,而是I2C器件發(fā)出的。應(yīng)答位是這樣產(chǎn)生的,I2C器件在接收到完整的8位數(shù)據(jù)之后,I2C器件判定接受成功,它會(huì)向總線發(fā)送一個(gè)應(yīng)答信號(hào),可以看到就是在一個(gè)時(shí)鐘脈沖期間,數(shù)據(jù)線SDA保持低電平就是0,當(dāng)然發(fā)送完地址位之后呢?就發(fā)送數(shù)據(jù),長(zhǎng)度可能是可能1個(gè)字節(jié)或多個(gè)字節(jié)。數(shù)據(jù)的個(gè)數(shù)跟器件是有關(guān)系的。比如AT24C02 EEPROM芯片對(duì)他進(jìn)行讀寫操作 如寫可以進(jìn)行1  8 字節(jié),當(dāng)?shù)刂窋?shù)據(jù)結(jié)束后來(lái)一個(gè)結(jié)束信號(hào)。表示這一幀結(jié)束了。
    下面說(shuō)下ATmega 16 的TWI模塊。下圖 (由于ATmega 16 的技術(shù)文檔講的比較詳細(xì)了,所以我們也結(jié)合atmege 16 的數(shù)據(jù)手冊(cè)說(shuō)了)。
     
    這是兩線的一些特點(diǎn):(自己翻一下吧)
    一、簡(jiǎn)單,但是強(qiáng)大而靈活的通訊接口,只需兩根線
    二、支持主機(jī)和從機(jī)的操作
    三、器件可以工作于發(fā)送或接受
    四、7位地址空間允許128個(gè)從機(jī)
    五、高達(dá)400KHZ的數(shù)據(jù)傳輸率
    六、斜率受控制的輸出驅(qū)動(dòng)器
    七、可以抑制總線的尖峰噪聲控制器
    八、完全可變成的從機(jī)地址以及公共地址
    九、睡眠時(shí)地址匹配可以喚醒AVR
    首先看下數(shù)據(jù)傳輸和幀格式下圖(傳輸 數(shù)據(jù) (位))(TWI總線上數(shù)據(jù)位的傳送與時(shí)鐘脈沖同步。時(shí)鐘線為高時(shí),數(shù)據(jù)線電壓必須保持穩(wěn)定,除非在啟動(dòng)與停止的狀態(tài)下。官方的解釋)
    其實(shí)這個(gè)圖說(shuō)明在SCL為高電平期間 SDA 數(shù)據(jù)必須穩(wěn)定0 或1
    當(dāng)然還有起始位與停止位如下圖
    (翻譯如下)
    {
    主機(jī)啟動(dòng)與停止數(shù)據(jù)傳輸。主機(jī)在總線上發(fā)出START信號(hào)以啟動(dòng)數(shù)據(jù)傳輸;在總線上發(fā)出STOP信號(hào)以停止數(shù)據(jù)傳輸。在START與STOP 狀態(tài)之間,需要假定總線忙,不允許其它主機(jī)控制總線。特例是在START與STOP 狀態(tài)之間發(fā)出一個(gè)新的START狀態(tài)。這被稱為REPEATED START狀態(tài),適用于主機(jī)在不放棄總線控制的情況下啟動(dòng)新的傳送。在REPEATED START之后,直到下一個(gè)STOP,需要假定總線處于忙的狀態(tài)。這與START是完全一樣的,因此在本手冊(cè)中,如果沒有特殊說(shuō)明,START與REPEATEDSTART均用START表述。如下所示,START與STOP狀態(tài)是在SCL線為高時(shí),通過改變SDA電平來(lái)實(shí)現(xiàn)的。
    }
    開始停止時(shí)序圖



     像這個(gè)圖中間的一些開始停止和從新開始在絕大數(shù)都是用不到的。就不細(xì)說(shuō)了。
    下圖是地址數(shù)據(jù)包格式(好好看看是 地址數(shù)據(jù)的講解)
    翻譯下:所有在TWI總線上傳送的地址包均為9位,包括7位地址位、1位READ/WRITE控制
    位與1位應(yīng)答位。如果READ/WRITE為1,則執(zhí)行讀操作;否則執(zhí)行寫操作。從機(jī)被尋
    址后,必須在第九個(gè)SCL (ACK)周期通過拉低SDA作出應(yīng)答。若該從機(jī)忙或有其它原因
    無(wú)法響應(yīng)主機(jī),則應(yīng)該在ACK周期保持SDA為高。然后主機(jī)可以發(fā)出STOP狀態(tài)或
    REPEATED START 狀態(tài)重新開始發(fā)送。地址包包括從機(jī)地址與分別稱為SLA+R或
    SLA+W的READ或WRITE位。
    地址字節(jié)的MSB首先被發(fā)送。從機(jī)地址由設(shè)計(jì)者自由分配,但需要保留地址0000 000
    作為廣播地址。
    當(dāng)發(fā)送廣播呼叫時(shí),所有的從機(jī)應(yīng)在ACK周期通過拉低SDA作出應(yīng)答。當(dāng)主機(jī)需要發(fā)送
    相同的信息給多個(gè)從機(jī)時(shí)可以使用廣播功能。當(dāng)Write位在廣播呼叫之后發(fā)送,所有的從
    機(jī)通過在ACK周期通過拉低SDA作出響應(yīng)。所有的從機(jī)接收到緊跟的數(shù)據(jù)包。注意在整
    體訪問中發(fā)送Read位沒有意義,因?yàn)槿绻麕讉(gè)從機(jī)發(fā)送不同的數(shù)據(jù)會(huì)帶來(lái)總線沖突。
    所有形如1111 xxx格式的地址都需要保留,以便將來(lái)使用。
    地址包格式圖下圖:
    這個(gè)圖從右邊往左邊看先發(fā)送的最高位 最后發(fā)的是低位。 從 1---9 最后一位 ACK 響應(yīng)。
    下面是數(shù)據(jù)包下圖


    官方解釋


    可見數(shù)據(jù)包是8位數(shù)據(jù)加一個(gè)應(yīng)當(dāng)位。
    下圖是地址和數(shù)據(jù)包一個(gè)完整的傳輸。組合一起
     
     


    SLA +RW 就是地址數(shù)據(jù) 的傳送的字節(jié)數(shù)由應(yīng)用程序的協(xié)議決定。 1個(gè)字節(jié)   4 8 個(gè)字節(jié)數(shù)據(jù)。
    下圖是多主機(jī)總線系統(tǒng)如圖(這個(gè)大部分場(chǎng)合用不到所以不用看 以后可以了解下)

    解釋





    下面講解下TWI 模塊的使用方法:如圖構(gòu)成
    首先看下SCL  SDA 有兩個(gè)引腳   是在22  與23 腳 PC0 PC1 下面是這兩腳的說(shuō)明




    還有一個(gè)波特率發(fā)聲單元與USART相似 他控制SCL 的時(shí)鐘周期,當(dāng)然這個(gè)比特率有兩個(gè)寄存器決定,TWBR  TWPS 有SCL frequency 公式的。CPU的單片機(jī)晶振頻率 除以 16加上2倍的TWBR  乘以4的TWPS它的次數(shù)注意:如果工作在主機(jī)模式不應(yīng)該小于10 下面有解釋


    下面是總線的接口單元主要包括一些寄存器總線總裁。我們沒必要關(guān)心然后又一個(gè)地址匹配單元看下啊(只有在多級(jí)通訊時(shí)候多個(gè)單片機(jī)進(jìn)行I2C通訊時(shí)候我們給每個(gè)單片機(jī)設(shè)置一個(gè)本機(jī)地址如果匹配了表示發(fā)給自己的,初學(xué)者一般也不看)最下面是控制器有圖都復(fù)制上來(lái)吧!還有官方中文解釋。








    解釋有下圖







    其實(shí)都不重要我們要TWI 寄存器它的使用是重要的。呵呵開始講吧!最終我們的應(yīng)用都是對(duì)這些寄存器操作。
    首先是比特率上面有公式第一個(gè)寄存器

    這個(gè)是控制寄存器非常重要。
    第二個(gè)寄存器 TWCR 



     
    首先是第7位 TWINT: TWI 中斷標(biāo)志
    在什么時(shí)候產(chǎn)生中斷呢?當(dāng)發(fā)送完 地址包 數(shù)據(jù)包 ,注意這一位清0呢。必須手動(dòng)清0 必須通過軟件寫1,不像其他的中斷能夠自動(dòng)置1.

    第6位 (使能TWI 應(yīng)答)這個(gè)TWEA 在多級(jí)通訊時(shí)候,就是有其他的I2C器件向AVR單片機(jī)發(fā)送數(shù)據(jù),這時(shí)候AVR 單片機(jī)在接受到一幀數(shù)據(jù)之后,它會(huì)發(fā)送一個(gè)應(yīng)答位,也就是使能這位后,向發(fā)送放返回一個(gè)應(yīng)答位這種信息。
    官方解釋
    第5位(是一個(gè)狀態(tài)標(biāo)志位,TWSTA它表示的是TWI START 這個(gè)信號(hào)。第4位 和第5位都是多級(jí)通訊用的到的。)


    官方解釋


    第3位:TWWC   是TWI 的寫碰撞標(biāo)志。
    就是標(biāo)志出TWDR 數(shù)據(jù)寄存器是否可以寫。如果為低的時(shí)候可以寫數(shù)據(jù)
    第2位:TWI 使能。置位此位TWI 。如果使用TWI模塊此位必須模塊激活。
    第1位:是保留位沒有作用的。
    第0位:TWIE 使能TWI 中斷。 (要中斷方式使用TWI 總線的的話就要使能這個(gè)位 置位)
     


    第3個(gè)寄存器:狀態(tài)寄存器
    它的第7位到第3位 5位反應(yīng)TWI邏輯總線的狀態(tài),不同的狀態(tài)的狀態(tài)代碼會(huì)在后面部分描述,所以我們?cè)谧x取這5位狀態(tài)代碼的時(shí)候,讀取方法就是先讀取這個(gè)寄存器然后通過與這個(gè)0b11111000將最后兩位屏蔽掉因?yàn)門WPS是預(yù)分頻位,在比特率發(fā)生器里面是有作用的,有公式的 4的指數(shù)
     








    第四個(gè)寄存器:TWDR (類似于USART SPI 的數(shù)據(jù)寄存器差不多的)
    發(fā)送模式包含 字節(jié),接受模式包含接受到的數(shù)據(jù)。



    第五個(gè)寄存器:TWAR 從機(jī)地址寄存器
    (多級(jí)通訊用的到)
     


    如何使用TWI






    其實(shí)這個(gè)圖跟一次完整數(shù)據(jù)傳輸類似的。所有的不同在這第 3個(gè)階段結(jié)束的時(shí)候有一個(gè)TWI中斷觸發(fā)也就是TWINT這一位被置位,可以用于觸發(fā)中斷。
    第一步 :向TWCR 寫一個(gè)1 使能一個(gè)START 信號(hào)。就是通過TWCR 寄存器的內(nèi)容進(jìn)行一個(gè)發(fā)START信號(hào)的操作。發(fā)送成功之后會(huì)有一個(gè)TWINT中斷,在中斷里面SCL時(shí)鐘不采取任何動(dòng)作的。
    第二步:在中斷里面通過查詢 status code 就是那五位數(shù)據(jù)看是何種狀態(tài),來(lái)確定是start 發(fā)送完成中斷。
    第三步:發(fā)送一個(gè)地址包,就是程序?qū)LA(從機(jī)地址) +W (讀寫位)就是7位從機(jī)地址加1位讀寫位,寫入到TWDR 數(shù)據(jù)寄存器對(duì)這些寄存器進(jìn)行一些確認(rèn)操作。
    第四步:在數(shù)據(jù)包發(fā)送完成和接受到ACK信號(hào)之后繼續(xù)等待第2個(gè)中斷。接收到ACK信號(hào)之后呢TWINT會(huì)置位 
    第五步:再處理一次中斷,在這個(gè)中斷里寫入數(shù)據(jù)字節(jié),也是8位數(shù)據(jù)
    第六步:8位數(shù)據(jù)發(fā)送成功接受到ACK  TWINT 會(huì)再次置位,那么這個(gè) status code 會(huì)指示出發(fā)送完成。當(dāng)然這只是發(fā)送一個(gè)字節(jié)數(shù)據(jù),如果發(fā)送多個(gè)數(shù)據(jù)這個(gè)過程會(huì)持續(xù)多次,一直到數(shù)據(jù)發(fā)送完成。
    第七步:接受完成之后且接收到ACK 我們這里會(huì)發(fā)送一個(gè)STOP信號(hào),也是通過寫TWCR寄存器來(lái)實(shí)現(xiàn)的。當(dāng)然STOP發(fā)送成功之后不會(huì)觸發(fā)中斷。值得注意的是中間如果進(jìn)行多字節(jié)的讀或?qū)懙脑挵l(fā)送的字節(jié)數(shù)是由編程來(lái)把握的,也就是說(shuō)AVR單片機(jī)不會(huì)知道你要發(fā)多少個(gè)字節(jié)。所以這個(gè)處理相當(dāng)于在第7步這里。如果我們程序判斷我們程序已經(jīng)發(fā)送完畢,我們就發(fā)一個(gè)STOP信號(hào)若如果,沒有就重復(fù)一下第五步。這就是ATmega 16的TWI總線的使用方法。下面我們結(jié)合24c02一個(gè)實(shí)際的程序來(lái)給大家吹吹牛。
     
    oAT24C02是由ATMEL公司提供的,I2C總線串行EEPROM,其容量為2Kbit(256B),工作電壓在2.7V~5.5V之間,生產(chǎn)工藝是CMOS工藝。
    各引腳功能如下。
    A2~A0:器件地址選擇引腳。將這3個(gè)引腳配置成不同的編碼值,在同一串行總線上最多可擴(kuò)充8片同一容量或不同容量的24系列串行EEPROM芯片。
    SDA:串行數(shù)據(jù)輸入輸出口,是一個(gè)雙向的漏極開路結(jié)構(gòu)的引腳,容量擴(kuò)展時(shí)可以將多片24系列的SDA引腳直接相連。
    SCL:串行移位時(shí)鐘控制端。寫入時(shí)上升沿起作用,讀出時(shí)下降沿起作用。
    WP:硬件寫保護(hù)控制引腳。當(dāng)其為低電平時(shí),正常寫操作,高電平時(shí),對(duì)EEPROM部分存儲(chǔ)區(qū)域提供硬件寫保護(hù)功能,即對(duì)被保護(hù)區(qū)域只能讀不能寫。
    GND:接地。
    VCC:接+5V電壓
     
    2k位   256*8 = 2K    等于256b
    地址值相當(dāng)于低三位 0 1 2  組合 8個(gè)數(shù)字
    7 硬件寫保護(hù) 低電平 可以正常寫操作 高  的話只能讀 所以我們接地OK了
    它的相關(guān)電路設(shè)計(jì)如下圖
    我們?cè)O(shè)置的時(shí)候都會(huì)將他的地址值變?yōu)? 0 1 2 全接地線 ,5 6  PC0  PC1  因?yàn)榈?功能是TWI 總線
    0.1uf進(jìn)行電源退耦,一般數(shù)字芯片 高速的數(shù)字時(shí)鐘對(duì)所在電源產(chǎn)生干擾。凈化電源。
    容量計(jì)算方法
    AT24Cxx:01~1024
    容量=xx X 1Kbit
    型號(hào)系列列表
    AT24C01 1K(128X8) AT24C02 2K(256X8)
    AT24C04 4K(512X8)
    AT24C08 8K(1KX8)
    AT24C16 16K(2KX8)
    AT24C512 512K(64KX8)
    AT24C1024 1M(128KX8)
    值得一提是AVR單片機(jī)片上自帶EEPROM 芯片,而且是1K字節(jié)相當(dāng)于24C08這個(gè)容量。而我們24c02實(shí)際應(yīng)用并不大。當(dāng)然有一些應(yīng)用場(chǎng)合必須外置的。因?yàn)槭菍W(xué)習(xí)板,因?yàn)檫@個(gè)芯片比較常見,學(xué)習(xí)I2C總線的作用。
    下圖為總體的操作流程
    寫   與讀的操作流程和上面的7步可以對(duì)比下。器件地址的表示方法等下講一下。器件地址的高4位是0xa0   1010 低四位   前3位就是 a0 a1 a2  第4位是  讀寫地址   然后等待ACK 。
    數(shù)據(jù)地址相當(dāng)于數(shù)據(jù) 在256字節(jié)的 存儲(chǔ)器里面的編址,它處于數(shù)據(jù)包的一部分是8位的。
    所以這個(gè)是寫是 地址一個(gè)    數(shù)據(jù)2 個(gè)  數(shù)據(jù)1是數(shù)據(jù)所處的地址   第2是數(shù)據(jù)的內(nèi)容
     
    這就是寫一字節(jié)的操作流程。
    右邊是讀類似。
    讀出的是多個(gè)字節(jié) 循環(huán)判斷是否是最后一個(gè)字節(jié),而24c02是 ACK 就是ACK 來(lái)產(chǎn)生的,最后產(chǎn)生一個(gè)停止位
    所以這個(gè)讀操作相當(dāng)于是 地址包1個(gè)字節(jié) 數(shù)據(jù)包是多個(gè)字節(jié)。
    下面結(jié)合程序來(lái)大家講解AT24C02應(yīng)用。
    打開整體測(cè)試板程序 我沒有哦
    # 需要此頭文件
     

    相關(guān)文章

    主站蜘蛛池模板: 午夜视频一区二区 | 久久午夜国产精品www忘忧草 | 午夜视频免费网站 | 91大神在线看 | 91久久国产综合久久 | 欧美一级大黄 | 午夜精品一区 | 国产在线一区二区三区 | 国产精品激情在线 | 视频一区在线观看 | 精品一区二区三区91 | 九九九久久国产免费 | 最新日韩av | 国产精品美女久久久久久不卡 | 日本黄色不卡视频 | 欧美午夜精品久久久久免费视 | 国产精品高潮呻吟久久av野狼 | 欧美国产日韩在线观看成人 | 99精品欧美一区二区三区综合在线 | 国产欧美日韩视频 | 国产精品久久久久久久久久久久久久 | 免费不卡视频 | 精品国产一级片 | 日本久久久一区二区三区 | 成人亚洲一区 | 日韩有码在线观看 | 91av在线免费观看 | 日韩一二三区视频 | 99视频在线免费观看 | 欧美在线a| 亚洲国产免费 | 日韩一区二区在线播放 | 欧美久久久网站 | 欧美无乱码久久久免费午夜一区 | 美女在线观看av | 精品欧美激情在线观看 | 一级网站 | 国产成人91视频 | 综合国产 | wwwxx在线观看 | 国产高清精品在线 |