新聞中心

        EEPW首頁 > 電源與新能源 > 單片機控制實時時鐘X1226的應用設計

        單片機控制實時時鐘X1226的應用設計

        ——
        作者:水清 時間:2007-11-14 來源:單片機及嵌入式系統應用 收藏

        引 言

            X1226具有時鐘和日歷的功能,時鐘依賴時、分、秒寄存器來跟蹤,日歷依賴日期、星期、月和年寄存器來跟蹤,日歷可正確通過2099年,具有自動閏年修正。

            擁有強大的雙報警功能,能夠被設置到任何時鐘/日歷值上,精確度可到ls。可用軟件設置1 Hz,4096 Hz或32768Hz中任意一個頻率輸出。

            該器件提供一個備份電源輸入腳VBACK1允許器件用電池或大容量電容備份供電。許多電池類型能夠用做Xicor公司實時時鐘器件X1226的備份電池,3.OV或3.6V的鋰離子電池較為適合,使用期限為10年。另外一種用法可選擇一個大容量的電容,備份時間可持續幾天至兩個星期,時間的長短依賴于電容容量的大小。用一個簡單的硅或肖特基二極管連接到Vcc和充電電容的兩端,充電電容連接到Vback引腳,注意不能使用二極管對電池充電(特別是鋰離子電池)。切換到電池供電的條件是Vcc=Vback—O.1V,正常操作期間,供電電壓Vcc必須高于電池電壓,否則電池電量將逐步耗盡。

            振蕩器所需晶體,采用外接32.768kHz的晶體。產生的振蕩誤差可通過軟件對數字微調寄存器、模擬微調寄存器的數值進行調節加以修正,避免了外接電阻和電容的離散性對精度的影響。
            器件可提供4Kb的EEPROM,8塊加鎖控制。可用作大量用戶數據存儲的存儲器,具有安全、保密性。這個存儲器的數據在主電源和備用電源全都失效時不受影響。

        1 電路組成及工作原理

            實時時鐘器件X1226可與各種類型的微控制器或微處理器接口,接口方式為串行的I2C接口。其中數據總線SDA是一個雙向引腳,用于輸入或輸出數據。它是一個漏極開路輸出,在使用過程中需要添加上拉電阻,阻值大約在4.7Ω~10kΩ之間。本文介紹89C5l與X1226的接口方法,由于89C51沒有標準的I2C接口,只有用軟件進行模擬。 

            為了更直觀地看到時間變換,采用八位LED數碼管顯示年、月、日或時、分、秒的變換,LED數碼管的驅動采用本公司自有產品PS7219A,數碼管選擇1.27cm共陰極紅色或綠色LED數碼管。由于PS7219A器件內含IMP810監控器件,復位輸出高電平有效,因此在使用51系統時,無需添加監控器件,使用PS7219A的復位輸出給51單片機復位即可,監控電壓4.63V。硬件設計原理圖如圖1所示。 

            在硬件通電調試過程中,請不要用手去觸摸實時時鐘X1226的晶體,這樣可能會導致振蕩器停振。恢復振蕩器起振的方法是關閉電源(包括備份電源)重新上電另外需要說明的是,測量振蕩器時,請不要用示波器的探頭去測量X2的振蕩輸出,正確的方法是用探頭去測量PHz/IRQ的振蕩輸出,以確定是否起振和振蕩頻率是否準確。測量時建議在該腳加一個5.lk Ω的上拉電阻。
            注意:在印刷電路設計時,xl226的布線請參考X1226數據手冊的廠家推薦方法。

        2 軟件設計

            X1226由實時時鐘寄存器(RTC)、狀態寄存器(SR)、控制寄存器(CONTROL)、報警寄存器(Alarm0、Alarml)和客戶數據存儲器組成。由于實時時鐘寄存器(RTC)和狀態寄存器(SR)需要進行頻繁的寫操作,因此它的存儲結構為易失性SRAM結構,該結構對寫操作的次數沒有限制。其它寄存器結構均為非易失性EEPROM結構,該結構對寫操作有次數限制,通常在10萬次以上。X1226初始化程序流程如圖2所示。

        啟動條件子程序:
            SETB     SDA
            LCALL    YS4
            SETB     SCL
            LCALL    YS4
            CLR      SDA
            LCALL    YS4
            CLR      SCL
            LCALL    YS4
            RET
        停止條件子程序:
            CLR      SDA
            LCALL    YS4
            SETB     SCL
            LCALL    YS4
            SETB     SDA
            RET
            注:子程序YS4的作用是延時4μs。

        2.1 寫操作


            X1226初始化操作后,單片機對X1226進行開始條件的設置,在寫CCR或EEPROM之前,主機必須先向狀態寄存器寫02H,確認應答信號,確認后寫入06H,再確認應答信號。確認后啟動了寫操作。首先發送高位地址,然后發送低位地址。Xl226每收到一個地址字節后,均會產生一個應答信號。在兩個地址字節都收到之后,X1226等待8位數據。在收到8位數據之后,X1226再產生一個應答。然后單片機通過產生一個停止條件來終止傳送。

            Xl226具有連續寫入功能,X1226在收到每個字節后,響應一個應答,其內部將地址加一。當計數器達到該頁的末尾時,它自動的“返回”到該頁的首地址。這意味著單片機可從某一頁的任何位置開始向存儲器陣列連續寫入64字節或向CCR連續寫入8字節。

            寫入Xl226數據子程序:

               MOV        R5,#8

        SENDI:MOV        A,DATASE
               RLC        A
               MOV        DATASE,A
               MOV        SDA,C
               SEB        SCL
               LCALL      YS4
               CLR        SCL
               LCALL      YS4
               DJNZ       R5,SENDl
               RET

        2.2讀操作


            在上電時,16位地址的默認值為0000H。X1226初始化操作之后,單片機對X1226進行開始條件的設置,在寫CCR或EEPROM之前,主機必須先向狀態寄存器寫02H,確認應答信號,確認后寫入06H,再確認應答信號。確認后啟動了寫操作。首先發送高位地址,然后發送低位地址。Xl226每收到一個地址字節后,均會產生一個應答信號。單片機發送另一個開始條件,將R/W位設置為l,接著就是接收8位數據。單片機終止讀操作時,無需等待X1226的應答信號,單片機即可設置停止條件。

            讀出X1226數據子程序:

               MOV       R5,#8
               MOV       DATARE,#0
               SETR      SDA
               CLR       C
        READl:SETB      SCL
               LCALL     YS4

            MOV C,SDA
            CLR SCL
            MOV A,DATARE
            RLC A
            MOV DATARE,A
            LCALL YS4
            DJNZ R5,READl
            RET

        2.2 X1 226獨特的振蕩器頻率在線補償調節功能


            Xicor公司在X1226芯片上集成了振蕩器補償電路,這使得用戶通過軟件,可在線對振蕩器頻率進行微調,這種對振蕩器頻率進行的微調通常針對兩種情況。一種情況是在25℃常溫下,對振蕩器因器件初始精度帶來的頻率偏差進行補償;第二種情況是對因溫度引起的頻率漂移進行補償。X1226內部設有數字微調寄存器(DTR)和模擬微調寄存器(ATR),兩個寄存器均為非易失性寄存器。數字微調寄存器(DTR)具有三位數字微調位,調節范圍一30ppm~+30ppm。模擬微調寄存器(ATR)具有六個模擬微調位,調節范圍+116ppm~-37ppm。

            為了能夠對外界環境溫度變化引起的溫漂進行補償, 要求系統中設計一個溫度傳感器,并盡量讓它靠近實時時鐘器件X1226,這樣可以真實地反映振蕩器的溫度,原理圖如圖3所示。單片機首先通過系統溫度傳感器獲取環境溫度, 并在補償參數表中獲取對應的補償值, 然后將補償數據填寫到相應的微調寄存器中,就能實現溫漂補償的目的。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 定远县| 延安市| 庆安县| 江达县| 石楼县| 杂多县| 康平县| 汪清县| 九龙坡区| 高安市| 和平县| 翼城县| 黄浦区| 江油市| 平塘县| 吴堡县| 青川县| 花垣县| 平乐县| 肥城市| 北安市| 九江县| 石柱| 洛阳市| 内江市| 北票市| 高雄县| 天峨县| 兰西县| 肇庆市| 鄂尔多斯市| 阿尔山市| 苍梧县| 临夏市| 乌兰察布市| 牟定县| 那曲县| 丹凤县| 巩留县| 无极县| 阳曲县|