在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何通過I2C總線I/O口實現系統的多個功能?

電子設計 ? 作者:電子設計 ? 2018-08-30 10:05 ? 次閱讀

1 引言

隨著單片機控制系統的不斷擴大以及控制功能不斷增多,有限的單個單片機通用I/O口已不能滿足同一系統中控制多個受控對象需要,隨著FC總線研究的深入,用I2C總線擴展單片機I/O口的方法在全自動、半自動儀器的開發領域得到了廣泛應用,本文介紹了一個測試系統通過FC總線擴展I/O口實現了系統的多個功能。給出了系統的硬件連接以及Atmega128與三個Atmega168之間的軟件通信流程圖。

2 系統的硬件結構

圖1是作者所研究的測試系統的整體框圖,本系統中主要芯片PHILIPS公司LPC2292,在此系統中鍵盤上其中三個按鈕分別控制三個電機,系統的主要功能是LPC2292將掃描到的鍵盤信息發給Atmega128單片機,Atmega128單片機通過I2C總線尋址Atmega168,并向被尋址的Atmega168發送電機控制命令,最后,電機根據Atmega168控制策略正常運行。電機啟動同時,數據采集模塊也開始正常運行,數據采集模塊把采到數據送到LPC2292的A/D轉換接口,然后將ADC輸出的數據發送到LCD。系統中的撥碼開關用于設置相應的Atmega168單片機的地址,當單片機Atmega128接收到LPC2292發來的控制命令時,通過I2C總線尋址Atmega168,當某個Atmega168的地址與Atmega128廣播地址相同時,它就開始根據Atmega128發送的命令控制電機開始工作。

如何通過I2C總線I/O口實現系統的多個功能?

圖1基于I2C總線的I/O擴展框圖

3 I2C總線

I2C總線是PHILIPS公司推出的芯片間串行數據傳輸總線,軟、硬件協議十分巧妙,2根線(SDA,SCL)HP可實現完善的全雙工同步數據傳送,能夠十分方便地構成單主系統或多主系統和外同器件擴展系統。不過,多主系統(即系統中有多個I2C總線接口的單片機)會出現多主競爭的復雜狀態。I2C器件是把I2C的協議植入器件的I/O接口,使用時器件直接掛到I2C總線上,這一特點給用戶在設計應用系統時帶來了極大的方便。I2C器件無須片選信號,是否選中是由主器件發出的I2C從地址決定的。

所有掛到I2C總線的外圍器件,各自都有一個唯一確定的地址。任何時刻總線上只有一個主控器件對總線實行控制權,分時實現點對點的數據傳送。I2C總線上所有外闈器件都有規范的器件地址,器件地址由7位組成,它和1位方向位(R/W)構成了I2C總線器件的尋址字節SLA,格式如下:

如何通過I2C總線I/O口實現系統的多個功能?

器件地址(A6,A5,A4,A3)是I2C總線外圍接口器件同有的地址編碼(4位或5位),器件出廠時已固化好。引腳地址(A2,A1,A0)和器件在電路中的實際接法有關(地址線、電源或地),形成地址數據。數據方向位(R/W)規定了總線上的主節點對從節點的數據傳送方向,當(R/W)位置1時接收,當(R/W)為0時發送。圖1中的撥碼開關設置了從單片機Atmega168的地址,也就是從機地址的低三位(A2,AI,A0),當某個撥碼開關的某個開關閉合時,相應的地址位為零,否則相應位為1,因此可以通過撥碼開關上開關的狀態來設定從單片機Atmega168的地址,比如某個撥碼開關與A0、A2位對應的開關閉合,與Al對應的開關斷開,那么這個單片機地址的低三位為010。

4 I2C通信的流程圖

根據I2C總線的傳輸協議規范和硬件連接,作者給出了如圖2和圖3基本程序流程圖和部分程序。開發語言為c語言,與匯編語言相比,可以提高軟件的執行速度。

4.1 主機發送/從機接收I2C子程序流程圖

圖2和圖3給出了主機發送,從機接收I2C子程序流程圖,通過I2C總線發送/接收數據時,I2C總線的控制寄存器的中斷位必須先置位,為了避免因為某種原因不能使控制寄存器的中斷位置位而導致程序進入死循環,作者在I2C總線通信程序發送/接收數據前編寫了中斷循環等待和錯誤處理程序,大大提高了程序的可靠性,具體程序如下:

while(!(TWCR & (1<

if(j>10000) return O:

應用I2C總線發送數據時,作者采用了狀態位查詢方法,并且給出了錯誤標志置位、錯誤跳出程序,下面的程序是發送從機地址的部分程序:

switch(TWSR & 0XF8)

{

case Oxl8: flag=0; break;

case 0x20:flag=1; break;

case 0x38:flag=l; break;

default:return 0:

}

if(flag) continue;

如何通過I2C總線I/O口實現系統的多個功能?

圖2 I2C主機發送程序框圖

程序中的flag=0表示從機地址發送成功,flag=1表示從機地址發送失敗,當TWSR寄存器中的狀態碼為0x18時,表明從機地址已發送,并且接收到ACK,同時錯誤標志“flag”置0,下一步通過心發送數據,當TWSR寄存器中的狀態碼為0x20時,表明從機地址已發送,但是接收到NO ACK,同時錯誤標志”flag”置1,下一步執行“if(flag)continue;”語句,結束本次循環,當TWSR寄存器中的狀態碼為0x38時,表明從機地址仲裁失敗,同時錯誤標志“flag”置1,下一步執行“if(flag)continue;"語句,結束本次循環。總線將釋放,并進入未尋址從機模式,總線空閑后將發送“start”。程序中“if(flag)continue;”語句使得當數據發送失敗時,結束本次循環,返回到開始等待發送命令,這樣避免了由于偶爾數據發送失敗造成整個程序無法運行,甚至整個設備無法運行,因而,用“if(flag)continue;”語句結束錯誤傳輸。可提高I2C通信的質量,同時也提高了使用I2C總線通信的設備的效率。

如何通過I2C總線I/O口實現系統的多個功能?

圖3 從機接收流程圖

4.2 編程中的注意事項

a)在主機或從機初始化時,一定要設定數據傳輸方向;

b)由于每次發送/接收數據時TWCR寄存器的中斷標志位必須置位,因此程序中要有等待TWCR寄存器中斷位置位程序,同時,為了避免由于某種原因導致中斷位不能置位造成等待程序進入死循環,在等待中斷位置位程序中要有等待超時返回程序。

c)I2C總線的使用,除了基本的啟動、結束、應答、非應答子程序外,還應有應答位檢查、發送和接收單字節、發送和接收多字節等子程序。

5 結論

作者在程序流程的每個關鍵部分都設置了錯誤查詢和錯誤處理,使得I2C程序能夠從錯誤中自動恢復,避免了由于I2C通信導致的錯誤而使得系統無法正常工作,文中還給出了部分發送子程序和編程注意事項。對于圖2和圖3的I2C通信流程,作者已在多個科研項目中進行了編程使用。實踐證明,按上述流程編寫I2C通信程序,主從單片機之間的通信非常可靠。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    456

    文章

    51154

    瀏覽量

    426292
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    120949
  • I2C總線
    +關注

    關注

    8

    文章

    406

    瀏覽量

    61104
收藏 人收藏

    評論

    相關推薦

    GPIO模擬I2C總線的驅動設計與實現

    I2C總線簡單方便,是我們經常使用的一種總線。但有時候我們的MCU沒有足夠多的I2C控制器來實現我們的應用,所幸我可以使用普通的GPIO引腳
    發表于 12-14 14:19 ?5439次閱讀
    GPIO模擬<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>的驅動設計與<b class='flag-5'>實現</b>

    i2c總線ppt(I2C總線器件應用)

    I2C總線器件應用第一節 I2C總線器件應用概述I2C總線工作原理
    發表于 08-13 17:34 ?0次下載

    用嵌入式系統的SPI模塊實現I2C總線通信

    I2C一般用于單主機系統中。在單主機系統中,通信系統的主機可能沒有I2C接口模塊, 而直接使用主機的I
    發表于 04-15 11:47 ?38次下載

    用Verilog HDL實現I2C總線功能

    簡述了I2C總線的特點;介紹了開發FPGA時I2C總線模塊的設計思想;給出并解釋了用Verilog HDL實現部分
    發表于 10-19 10:49 ?104次下載

    I2C總線

    I2C BUS(Inter IC BUS)是NXP 推出的芯片間串行傳輸總線,它以2 根連線實現了完善的雙向同步數據傳送,可以極方便地構成多機系統
    發表于 11-03 11:26 ?49次下載

    I2C總線在Linux系統中的驅動設計

    介紹I2C總線的基本概念和工作原理,敘述I2C總線擴展器件ZLG7290的功能特點。在以S3C2
    發表于 12-29 16:52 ?40次下載

    什么是i2c總線

    什么是i2c總線  下載請點擊: i2c總線協議中文版 
    發表于 11-05 09:26 ?2941次閱讀

    用Verilog HDL實現I2C總線功能

    摘要: 簡述了I2C總線的特點;介紹了開發FPGA時I2C總線模塊的設計思想;給出并解釋了用Verilog HDL實現部分
    發表于 06-20 13:17 ?6918次閱讀
    用Verilog HDL<b class='flag-5'>實現</b><b class='flag-5'>I2C</b><b class='flag-5'>總線</b><b class='flag-5'>功能</b>

    I2C I/O擴展芯片特性分析

    簡介   I/O口擴展芯片可用于MCU/DSP通用I/O口的擴展,通過I2C
    發表于 07-20 09:54 ?1.3w次閱讀

    基于CPLD的I2C總線接口設計

    在電路設計中,I2C總線是比較常用的兩線式串行通信方式,大多數的CPU都擅長于并口操作,不具備直接操作I2C總線接口的能力。為了使不具備I2C
    發表于 02-12 16:11 ?95次下載
    基于CPLD的<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>接口設計

    NIOS實現I2C總線

    I2C 總線實現關鍵是SDA,他是雙向線,如果對與一個芯片只寫而不讀,I2C 實現起來很容易.使用NIOS
    發表于 11-01 14:28 ?38次下載

    I2C總線應用系統設計運用

    I2C總線應用系統設計運用
    發表于 09-22 11:44 ?10次下載
    <b class='flag-5'>I2C</b><b class='flag-5'>總線</b>應用<b class='flag-5'>系統</b>設計運用

    上電和復位 16 位 PCA I2C 總線 I/O 擴展器

    上電和復位 16 位 PCA I2C 總線 I/O 擴展器
    發表于 11-15 20:32 ?1次下載
    上電和復位 16 位 PCA <b class='flag-5'>I2C</b> <b class='flag-5'>總線</b> <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 擴展器

    I2C串行總線協議是什么?I2C總線有哪些優點?

    1982年發明并推廣,用于連接智能傳感器和存儲器器件,以及控制和監控外設。該協議是一種主從式通信協議,允許多個從設備連接到同一總線上,并在總線上進行數據交換。I2C
    的頭像 發表于 09-12 11:18 ?1778次閱讀

    I2C總線的優缺點分析

    I2C總線作為一種廣泛使用的串行通信協議,以其簡單性和高效性在嵌入式系統中占據著重要地位。 I2C總線的優點 1. 簡單性和低成本
    的頭像 發表于 01-17 15:50 ?135次閱讀
    主站蜘蛛池模板: 色综合成人网 | h黄视频 | 国产精品一级香蕉一区 | 日本黄色视 | 亚洲韩国日本欧美一区二区三区 | 亚洲免费视频网 | 人人干狠狠操 | 色综合狠狠 | 天天看片中文字幕 | 深夜在线观看大尺度 | 一区二区午夜 | 国产剧情麻豆三级在线观看 | 国产色婷婷精品综合在线 | 日日天天夜夜 | 免费国产不卡午夜福在线 | 视频免费播放 | 婷婷久久综合九色综合98 | 欧美一卡二卡3卡4卡无卡六卡七卡科普 | 嫩草影院入口一二三免费 | 国产精品一级香蕉一区 | 天天视频国产精品 | 亚洲成色在线综合网站 | 天天视频黄| 综合色图 | 口述他拿舌头进去我下面好爽 | 夭天干天天做天天免费看 | 免费能直接在线观看黄的视频 | 国模在线视频一区二区三区 | 国产免费午夜 | 特黄大片aaaaa毛片 | 美女毛片免费看 | 亚洲精品久久久久午夜三 | 老师下面很湿很爽很紧 | 曰本aaaaa毛片午夜网站 | 亚洲国产网 | 亚洲国产成人久久77 | 毛片网此 | 35qao强力打造免费上线高清 | 啪啪大片| 好吊色视频988gao在线观看 | 色射啪 |