可編程數字電位器與AVR單片機的通信說(shuō)明
2.2數字電位器I2C總線(xiàn)時(shí)序及指令
2.2.1一般I2C總線(xiàn)通信時(shí)序
X9221系列數字電位器其接口是按標準的I2C總線(xiàn)設計的,因此,硬件連接非常簡(jiǎn)單,只需把串行時(shí)鐘線(xiàn)SCL、串行數據線(xiàn)SDA與之對應相連即可。其通信完全符合I2C總線(xiàn)協(xié)議要求,串行時(shí)鐘線(xiàn)SCL、串行數據線(xiàn)SDA按照規定的協(xié)議產(chǎn)生一序列脈沖串,進(jìn)而完成傳輸一組數據的任務(wù)。參見(jiàn)圖2 I2C總線(xiàn)通信時(shí)序。
X9221系列數字電位器完全以從機的身份出現在I2C總線(xiàn)上,它不可以主機的身份出現在I2C總線(xiàn)上,也就是說(shuō)對其寄存器的讀寫(xiě)操作都受控于主機,這一點(diǎn)一定要在硬件和軟件設計上留意。當主機發(fā)出"START"信號后,從機(X9221A)芯片即將拉高SDA線(xiàn),表明放棄數據線(xiàn)權限由主機控制,主機發(fā)送一個(gè)字節后再由從機(X9221A)芯片自動(dòng)拉低SDA線(xiàn),表明數據收到,如果此時(shí)從機將SDA線(xiàn)拉不低,表明從機沒(méi)有正常接受數據,主機必須啟動(dòng)下一個(gè)寫(xiě)周期??梢岳斫鉃橹鳈C每發(fā)送一個(gè)字節后都會(huì )等待一個(gè)ACK回答響應信號,否則,主機認為從機(X9221A)沒(méi)有正常接收數據。
2.2.2 X9221指令表
表1是X9221所有指令說(shuō)明,其中前4種指令的正常執行需要在串行數據線(xiàn)上至少有3個(gè)步驟:①通過(guò)數據線(xiàn)寫(xiě)從機地址;②寫(xiě)指令;③寫(xiě)數據。才能完成一個(gè)寄存器的讀或寫(xiě),這4種指令適用于X9221三字節時(shí)序格式操作。如果是寫(xiě)在WCR類(lèi)型的寄存器中,掉電后數據丟失,寫(xiě)在DATA類(lèi)型的寄存器中,掉電后數據存在其中;全局轉換的4種指令的正常執行需要在串行數據線(xiàn)上至少有2個(gè)步驟:①通過(guò)數據線(xiàn)寫(xiě)從機地址、②寫(xiě)指令,才能完成所有寄存器之間的數據交換,適用于X9221兩字節時(shí)序格式操作;最后一種"+/-"指令相當于"在線(xiàn)"上下調節電位器中間抽頭,比較直觀(guān),很好理解。"+/-"指令僅訪(fǎng)問(wèn)WCR類(lèi)型寄存器,且只是寫(xiě)操作,如果數據線(xiàn)SDA保持高電平,下一個(gè)時(shí)鐘信號SCL周期到來(lái),WCR寄存器數據"+1"。如果數據線(xiàn)SDA保持低電平,下一個(gè)時(shí)鐘信號SCL周期到來(lái),WCR寄存器數據"-1"。然而,不管哪種命令,只要寫(xiě)DATA類(lèi)型的寄存器(芯片內的E2ROM存儲單元),寫(xiě)操作要花費大約10 ms時(shí)間才能完成,在設計通信軟件時(shí)一定要特別留意。
3 AVR系列單片機與數字電位器硬件和軟件設計
3.1 X9221數字電位器與AVR系列單片機硬件接口
X9221數字電位器與AVR系列單片機硬件接口如圖3所示。硬件連接非常簡(jiǎn)單,只需將所有設備串行數據線(xiàn)SDA、串行時(shí)鐘線(xiàn)SCL相連接并接10 kΩ左右的上拉電阻即可。連接在I2C總線(xiàn)上的邏輯電平為"線(xiàn)與"邏輯關(guān)系,只要有一個(gè)設備將其拉低,總線(xiàn)上即出現低電平,當所有設備總線(xiàn)都懸掛起時(shí)呈現高阻狀態(tài)。主機發(fā)送模式就是向其中一個(gè)外設寫(xiě)入數據,首先產(chǎn)生一個(gè)啟動(dòng)信號"START","START"發(fā)送成功后才向外設發(fā)送設備地址,地址發(fā)送成功后,再發(fā)送數據,數據可以是1~N個(gè)字節,所有數據發(fā)送完成,最后發(fā)送"STOP"完成主機寫(xiě)的過(guò)程。主機接收模式也是一樣的,過(guò)程類(lèi)似。對X9221來(lái)說(shuō)地址發(fā)送完成后,必須發(fā)送指令模式,告訴X9221目前將做什么,指令的含義上面已提到,指令模式后是一組數據,其它過(guò)程一樣。
為了使I2C總線(xiàn)處于正常狀態(tài),所有總線(xiàn)上的設備必須加電,如果有一個(gè)設備沒(méi)有加電,總線(xiàn)將處于不正常工作狀態(tài)。在總線(xiàn)上有幾個(gè)設備同時(shí)欲將發(fā)送數據時(shí),競爭中某主機發(fā)現仲裁失敗后,應立即回到從機狀態(tài)或放棄總線(xiàn)請求,保證獲取總線(xiàn)控制權的主機正常發(fā)送數據;不同的主機有不同的總線(xiàn)時(shí)鐘頻率,通過(guò)SCL信號"線(xiàn)與"來(lái)保證,即高電平為高電平中最短的,低電平為低電平中最長(cháng)的,也就是說(shuō)協(xié)議"照顧"了速度最慢的設備;集結在總線(xiàn)上所有的傳送必須包含相同數目的數據包,否則,多主機系統中仲裁結果無(wú)法定義,這在設計上要特別注意。
3.2 X9221數字電位器與AVR系列單片機通信軟件設計
下面是一個(gè)通過(guò)查詢(xún)由atmega16單片機向X9221發(fā)送數據的例程,在這個(gè)例程中需要注意的是TWINT標志利用軟件寫(xiě)"1"進(jìn)行清零(清除硬件置位標志),而當前發(fā)送完成后由硬件自動(dòng)將TWINT標志置"1",TWINT標志是不能通過(guò)硬件清零的;每次通過(guò)檢查T(mén)WINT標志判斷當前發(fā)送是否完成,通過(guò)讀取狀態(tài)寄存器TWSR的值判斷發(fā)送的數據是否正確。
評論