新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 可編程數字電位器與AVR單片機的通信說明

        可編程數字電位器與AVR單片機的通信說明

        作者: 時間:2013-12-09 來源:網絡 收藏

        2.2數字電位器I2C總線時序及指令

        2.2.1一般I2C總線通信時序

          X9221系列數字電位器其接口是按標準的I2C總線設計的,因此,硬件連接非常簡單,只需把串行時鐘線SCL、串行數據線SDA與之對應相連即可。其通信完全符合I2C總線協議要求,串行時鐘線SCL、串行數據線SDA按照規定的協議產生一序列脈沖串,進而完成傳輸一組數據的任務。參見圖2 I2C總線通信時序。可編程數字電位器與AVR單片機的通信說明

        X9221系列數字電位器完全以從機的身份出現在I2C總線上,它不可以主機的身份出現在I2C總線上,也就是說對其寄存器的讀寫操作都受控于主機,這一點一定要在硬件和軟件設計上留意。當主機發出"START"信號后,從機(X9221A)芯片即將拉高SDA線,表明放棄數據線權限由主機控制,主機發送一個字節后再由從機(X9221A)芯片自動拉低SDA線,表明數據收到,如果此時從機將SDA線拉不低,表明從機沒有正常接受數據,主機必須啟動下一個寫周期。可以理解為主機每發送一個字節后都會等待一個ACK回答響應信號,否則,主機認為從機(X9221A)沒有正常接收數據。

        2.2.2 X9221指令表

          表1是X9221所有指令說明,其中前4種指令的正常執行需要在串行數據線上至少有3個步驟:①通過數據線寫從機地址;②寫指令;③寫數據。才能完成一個寄存器的讀或寫,這4種指令適用于X9221三字節時序格式操作。如果是寫在WCR類型的寄存器中,掉電后數據丟失,寫在DATA類型的寄存器中,掉電后數據存在其中;全局轉換的4種指令的正常執行需要在串行數據線上至少有2個步驟:①通過數據線寫從機地址、②寫指令,才能完成所有寄存器之間的數據交換,適用于X9221兩字節時序格式操作;最后一種"+/-"指令相當于"在線"上下調節電位器中間抽頭,比較直觀,很好理解。"+/-"指令僅訪問WCR類型寄存器,且只是寫操作,如果數據線SDA保持高電平,下一個時鐘信號SCL周期到來,WCR寄存器數據"+1"。如果數據線SDA保持低電平,下一個時鐘信號SCL周期到來,WCR寄存器數據"-1"。然而,不管哪種命令,只要寫DATA類型的寄存器(芯片內的E2ROM存儲單元),寫操作要花費大約10 ms時間才能完成,在設計通信軟件時一定要特別留意。可編程數字電位器與AVR單片機的通信說明

        3 AVR系列單片機與數字電位器硬件和軟件設計

        3.1 X9221數字電位器與AVR系列單片機硬件接口

          X9221數字電位器與AVR系列單片機硬件接口如圖3所示。硬件連接非常簡單,只需將所有設備串行數據線SDA、串行時鐘線SCL相連接并接10 kΩ左右的上拉電阻即可。連接在I2C總線上的邏輯電平為"線與"邏輯關系,只要有一個設備將其拉低,總線上即出現低電平,當所有設備總線都懸掛起時呈現高阻狀態。主機發送模式就是向其中一個外設寫入數據,首先產生一個啟動信號"START","START"發送成功后才向外設發送設備地址,地址發送成功后,再發送數據,數據可以是1~N個字節,所有數據發送完成,最后發送"STOP"完成主機寫的過程。主機接收模式也是一樣的,過程類似。對X9221來說地址發送完成后,必須發送指令模式,告訴X9221目前將做什么,指令的含義上面已提到,指令模式后是一組數據,其它過程一樣。可編程數字電位器與AVR單片機的通信說明

        為了使I2C總線處于正常狀態,所有總線上的設備必須加電,如果有一個設備沒有加電,總線將處于不正常工作狀態。在總線上有幾個設備同時欲將發送數據時,競爭中某主機發現仲裁失敗后,應立即回到從機狀態或放棄總線請求,保證獲取總線控制權的主機正常發送數據;不同的主機有不同的總線時鐘頻率,通過SCL信號"線與"來保證,即高電平為高電平中最短的,低電平為低電平中最長的,也就是說協議"照顧"了速度最慢的設備;集結在總線上所有的傳送必須包含相同數目的數據包,否則,多主機系統中仲裁結果無法定義,這在設計上要特別注意。

        3.2 X9221數字電位器與AVR系列單片機通信軟件設計

          下面是一個通過查詢由atmega16單片機向X9221發送數據的例程,在這個例程中需要注意的是TWINT標志利用軟件寫"1"進行清零(清除硬件置位標志),而當前發送完成后由硬件自動將TWINT標志置"1",TWINT標志是不能通過硬件清零的;每次通過檢查TWINT標志判斷當前發送是否完成,通過讀取狀態寄存器TWSR的值判斷發送的數據是否正確。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 古蔺县| 霞浦县| 福清市| 友谊县| 临潭县| 丰镇市| 霞浦县| 璧山县| 吴堡县| 凌云县| 丹江口市| 卫辉市| 会同县| 哈尔滨市| 开原市| 弥勒县| 长春市| 田东县| 鄯善县| 界首市| 威信县| 寻甸| 沁水县| 云霄县| 新安县| 马关县| 镇原县| 宁陕县| 讷河市| 云霄县| 孟州市| 界首市| 潢川县| 原阳县| 万山特区| 梁河县| 永善县| 云安县| 菏泽市| 伊金霍洛旗| 富裕县|