<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 可編程數(shù)字電位器與AVR單片機(jī)的通信說明

          可編程數(shù)字電位器與AVR單片機(jī)的通信說明

          作者: 時(shí)間:2013-12-09 來源:網(wǎng)絡(luò) 收藏

          2.2數(shù)字電位器I2C總線時(shí)序及指令

          2.2.1一般I2C總線通信時(shí)序

            X9221系列數(shù)字電位器其接口是按標(biāo)準(zhǔn)的I2C總線設(shè)計(jì)的,因此,硬件連接非常簡(jiǎn)單,只需把串行時(shí)鐘線SCL、串行數(shù)據(jù)線SDA與之對(duì)應(yīng)相連即可。其通信完全符合I2C總線協(xié)議要求,串行時(shí)鐘線SCL、串行數(shù)據(jù)線SDA按照規(guī)定的協(xié)議產(chǎn)生一序列脈沖串,進(jìn)而完成傳輸一組數(shù)據(jù)的任務(wù)。參見圖2 I2C總線通信時(shí)序。可編程數(shù)字電位器與AVR單片機(jī)的通信說明

          X9221系列數(shù)字電位器完全以從機(jī)的身份出現(xiàn)在I2C總線上,它不可以主機(jī)的身份出現(xiàn)在I2C總線上,也就是說對(duì)其寄存器的讀寫操作都受控于主機(jī),這一點(diǎn)一定要在硬件和軟件設(shè)計(jì)上留意。當(dāng)主機(jī)發(fā)出"START"信號(hào)后,從機(jī)(X9221A)芯片即將拉高SDA線,表明放棄數(shù)據(jù)線權(quán)限由主機(jī)控制,主機(jī)發(fā)送一個(gè)字節(jié)后再由從機(jī)(X9221A)芯片自動(dòng)拉低SDA線,表明數(shù)據(jù)收到,如果此時(shí)從機(jī)將SDA線拉不低,表明從機(jī)沒有正常接受數(shù)據(jù),主機(jī)必須啟動(dòng)下一個(gè)寫周期??梢岳斫鉃橹鳈C(jī)每發(fā)送一個(gè)字節(jié)后都會(huì)等待一個(gè)ACK回答響應(yīng)信號(hào),否則,主機(jī)認(rèn)為從機(jī)(X9221A)沒有正常接收數(shù)據(jù)。

          2.2.2 X9221指令表

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

          3 AVR系列單片機(jī)與數(shù)字電位器硬件和軟件設(shè)計(jì)

          3.1 X9221數(shù)字電位器與AVR系列單片機(jī)硬件接口

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

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

          3.2 X9221數(shù)字電位器與AVR系列單片機(jī)通信軟件設(shè)計(jì)

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



          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();