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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于AVR單片機(jī)與串行時(shí)鐘器件DS3231的應(yīng)用設(shè)計(jì)

          基于AVR單片機(jī)與串行時(shí)鐘器件DS3231的應(yīng)用設(shè)計(jì)

          作者: 時(shí)間:2013-10-11 來(lái)源:網(wǎng)絡(luò) 收藏

          BIT2位:中斷控制(INTCN)。該位控制INT/SQW信號(hào)。INTCN置為0時(shí),INT/SQW引腳輸出方波;INTCN置為1時(shí),若計(jì)時(shí)寄存器與任一個(gè)鬧鐘寄存器相匹配,則會(huì)觸發(fā)INT/SQW信號(hào)(如果也使能鬧鐘的話(huà))。匹配時(shí)相應(yīng)的鬧鐘標(biāo)志總是置位,而與INTCN位的狀態(tài)無(wú)關(guān)。初次上電時(shí),INTCN位置為邏輯1。
          BIT1位:鬧鐘2中斷使能(A2IE)。該位置為邏輯1時(shí),允許狀態(tài)寄存器中的鬧鐘2標(biāo)志位(A2F)觸發(fā)INT/SQW信號(hào)(當(dāng)INTCN=1時(shí))。當(dāng)A2IE位置為0或者INTCN置為0時(shí),A2F位不啟動(dòng)中斷信號(hào)。初次上電時(shí),A2IE位清零(邏輯0)。
          BIT0位:鬧鐘1中斷使能(A1IE)。該位置為邏輯1時(shí),允許狀態(tài)寄存器中的鬧鐘1標(biāo)志位(A1F)觸發(fā)INT/SQW信號(hào)(當(dāng)INTCN=1時(shí))。當(dāng)A1IE位置為0或者INTCN置為0時(shí),A1F位不啟動(dòng)INT/SQW信號(hào)。初次上電時(shí),A1IE位清零(邏輯0)。
          2.3 的數(shù)據(jù)交換及其格式
          在I2C總線(xiàn)上作為從器件。通過(guò)執(zhí)行START命令并且在驗(yàn)證器件地址后才可以訪(fǎng)問(wèn)。然后寄存器可以被訪(fǎng)問(wèn)直到執(zhí)行一個(gè)STOP命令為止。
          所有在I2C總線(xiàn)上傳輸?shù)牡刂钒L(zhǎng)度均為9位,它包括7個(gè)地址位,1個(gè)R/W控制位和1個(gè)應(yīng)答位ACK,如果R/W為1,則執(zhí)行讀操作;如果R/W為0,則執(zhí)行寫(xiě)操作。從機(jī)尋址后,必須在第9個(gè)SCL(ACK)周期通過(guò)拉低SDA做出應(yīng)答,若從機(jī)忙或者無(wú)法響應(yīng)主機(jī),則應(yīng)在ACK周期內(nèi)保持SDA為高。然后主機(jī)發(fā)出STOP狀態(tài)或者REP START狀態(tài)重新開(kāi)始發(fā)送。地址包包括從機(jī)地址和稱(chēng)為SLA+R或者SLA+W的READ或者WRITE位。地址字節(jié)的MSB首先被發(fā)送。所有1111xxxx的地址均保留。以便將來(lái)使用。
          所有在I2C總線(xiàn)上傳送的數(shù)據(jù)包長(zhǎng)度均為9位,它包括8個(gè)數(shù)據(jù)位和1個(gè)應(yīng)答位。在數(shù)據(jù)傳送中,主機(jī)產(chǎn)生時(shí)鐘及START與STOP狀態(tài),而接收器響應(yīng)接收。應(yīng)答是由ACK在第9個(gè)SCL周期拉低SDA實(shí)現(xiàn)的。如果接收器拉高SDA,則發(fā)送NACK信號(hào)。如果接收器由于某種原因不能接收更多數(shù)據(jù),應(yīng)在最后一個(gè)數(shù)據(jù)字節(jié)后發(fā)出NACK信號(hào)告訴發(fā)送器停止發(fā)送,首先發(fā)送數(shù)據(jù)的MSB。
          通過(guò)雙向數(shù)據(jù)線(xiàn)SDA和時(shí)鐘線(xiàn)SCL與外界進(jìn)行數(shù)據(jù)交換,從其時(shí)序關(guān)系可看出,DS3231有兩種操作方式:
          (1) 寫(xiě)操作:把SDA數(shù)據(jù)線(xiàn)上的數(shù)據(jù)按RAM指定的首地址(Word Address)依次寫(xiě)入N個(gè)字節(jié)數(shù)據(jù)。主器件首先傳輸從器件的地址字節(jié),緊跟著是一系列數(shù)據(jù)字節(jié)。從器件每收到一個(gè)字節(jié)后返回一個(gè)應(yīng)答位ACK。其格式如圖2所示。

          (2) 讀操作:按RAM指定的首地址依次讀取N個(gè)字節(jié)數(shù)據(jù),主器件首先傳送從器件地址。從器件返回一個(gè)應(yīng)答位。隨后是從器件傳輸?shù)囊幌盗袛?shù)據(jù)字節(jié)。主器件收到除最后一個(gè)字節(jié)外的所有字節(jié)后返回一個(gè)應(yīng)答位。在收到最后一個(gè)字節(jié)后,返回一個(gè)“非應(yīng)答位”NACK。其格式如圖3所示。

          上述讀寫(xiě)操作信號(hào)中:S為起始信號(hào)(START),1101 000為DS1307的口地址,A為應(yīng)答信號(hào)ACK,A為非應(yīng)答信號(hào)NACK,P為停止信號(hào)(STOP)。主器件產(chǎn)生所有的和START、STOP條件,通過(guò)傳輸STOP和重發(fā)START條件使其停止。
          3 DS3231與的硬件接口
          ATmega系列單片機(jī)片內(nèi)集成2線(xiàn)制串行接口模塊。Atmel稱(chēng)其為T(mén)WI接口。事實(shí)上,TWI與Philips的I2C總線(xiàn)是一回事。AVR硬件實(shí)現(xiàn)的TWI接口是面向字節(jié)和基于中斷的,相對(duì)軟件模擬I2C總線(xiàn)有更好的實(shí)時(shí)性和代碼效率,引腳輸入部分還具有毛刺抑制單元,可去除高頻干擾。圖4是DS3231與ATmega8的硬件接口電路原理圖。

          4 DS3231與的軟件接口
          軟件設(shè)計(jì)中,首先要對(duì)AVR單片機(jī)ATMega8與實(shí)時(shí)鐘器件DS3231進(jìn)行初始化。給DS3231準(zhǔn)確的日期和時(shí)間。不論主控模式還是被控模式,都應(yīng)當(dāng)將TWI控制寄存器TWCR的TWEN位置為1,從而使能TWI模塊。TWEN位被置位后,I/O引腳 PC5和PC4轉(zhuǎn)換成SCL和SDA,對(duì)TWI 控制寄存器TWCR的操作可在總線(xiàn)上產(chǎn)生START和STOP信號(hào),從START到STOP認(rèn)為是主控模式的行為。將TWI地址寄存器TWAR的第一位TWGCE置為有效,同時(shí)將TWI控制寄存器TWCR的TWEA(應(yīng)答允許)位置1,TWI模塊就可以在總線(xiàn)上對(duì)其尋址做出應(yīng)答,并置狀態(tài)字。對(duì)TWI模塊的操作均為寄存器的讀寫(xiě)操作,Avr-libc沒(méi)有提供專(zhuān)門(mén)的API,可以利用基于US-ART的標(biāo)準(zhǔn)I/O實(shí)現(xiàn)對(duì)DS3231讀寫(xiě)日歷和時(shí)鐘的操作。

          5 結(jié)束語(yǔ)

          選用實(shí)時(shí)時(shí)鐘器件DS3231和AVR單片機(jī)ATmega8設(shè)計(jì)了一個(gè)日歷時(shí)鐘系統(tǒng),該系統(tǒng)體積小,通用性強(qiáng)。DS3231具有集成的溫度補(bǔ)償晶體振蕩器(TCXO),計(jì)時(shí)準(zhǔn)確且不隨季節(jié)的變化而產(chǎn)生誤差。該系統(tǒng)適用于智能顯示屏以及實(shí)時(shí)測(cè)控系統(tǒng)。


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();