天天看點

①DS1302解析--電子時鐘的時鐘來源

情人節快樂,你是在浪漫呢還是在浪漫呢?

之前我們寫的如何用單片機設計一款電子産品中說到的時鐘晶片DS1302,它是我們DIY這個時鐘的時間資料的來源。現在我們就來詳細的解析DS1302晶片是如何給我産生時間資料的。

初學者最有興趣的就是DS1302時鐘電路,因為它結合單片機最小系統就能做出來一個讓你覺得最實用的設計,但實際運用起來并不簡單,好多同學會遇到這樣那樣的問題。下面我們就來說說DS1302的用法。

1、DS1302的特點

DS1302是DALLAS公司推出的涓流充電時鐘晶片,内含一個實時時鐘/月曆和31位元組靜态RAM,可以通過串行接口與單片機進行通信。實時時鐘/月曆電路提供秒、分、時、日、星期、月、年的資訊,每個月的天數和閏年的天數可自動調整,時鐘操作可通過AM/PM标志位決定采用24或12小時時間格式。

通俗的說,DS1302是時鐘晶片,那它就有計時的作用。它和我們日常接觸的電子表差不多,可以對年月日、時分秒、星期計時。我們可以用單片機往DS1302裡面寫入時間進行時間設定,也可以用單片機從DS1302中讀取時間,讀出來的時間資料我們顯示出來,這樣我們就可以實作了電子時鐘的功能。

2、DS1302的封裝

DS1302有兩種封裝,一種是DIP8的雙列直插式,一種是SOP8貼片式。根據封裝的名字我就知道這晶片有8個引腳,引腳分布如圖1:

①DS1302解析--電子時鐘的時鐘來源

3、DS1302引腳功能

引腳号 名稱 功能

1 VCC2 主電源

2、3 X1、X2 32.768K晶振

4 GND 電源地

5 CE(注1) 複位

6 I/O 資料輸入輸出

7 SCLK 串行時鐘信号

8 VCC1 備用電源

1-VCC2,主電源引腳,,當Vcc2比Vcc1高0.2V以上時,DS1302由VCC2供電,當Vcc2低于Vcc1時,由Vcc1供電。

2、3-X1、X2,這兩個引腳需要接一個32.768K的晶振,給DS1302提供一個基準。特别注意,要求這個晶振的引腳負載電容必須是6pF,而不是要加6pF的電容。如果使用有源晶振的話,接到X1上即可,X2懸空。

4-GND,電源地。

5-CE(注1:有些資料裡寫的是RST),DS1302的複位引腳。當讀寫DS1302的時候,這個引腳必須是高電平,低電平表示不讓晶片工作。

6-I/O,DS1302的資料輸入輸出口,這個引腳是一個雙向通信引腳,讀寫資料都是通過這個引腳完成。

7-SCLK,串行時鐘信号,用來作為通信的時鐘信号。

8-VCC1,備用電源引腳。

DS1302的電路一個重點就是時鐘電路,它所使用的晶振是一個32.768k的晶振,晶振外部也不需要額外添加其他的電容或者電阻電路,隻需要晶振的引腳的負載電容為6pF。時鐘的精度,首先取決于晶振的精度以及晶振的引腳負載電容。如果晶振不準或者負載電容過大過小,都會導緻時鐘誤差過大。在這一切都搞定後,最終一個考慮因素是晶振的溫漂。随着溫度的變化,晶振往往精度會發生變化,是以,在實際的系統中,其中一種方法就是經常校對。

4、寄存器簡介

DS1302的寄存器(讀時81h~8Dh,寫時80h~8Ch)是存放秒、分,小時、日、月、年、周資料的,存放的資料格式為BCD碼形式。它的内部時間寄存器如下表:

①DS1302解析--電子時鐘的時鐘來源

上表是DS1302内部的7個與時間、日期有關的寄存器圖和一個寫保護寄存器,我們要做的就是将初始設定的時間、日期資料寫入這幾個寄存器,然後再不斷地讀取這幾個寄存器來擷取實時時間和日期。現對這幾個寄存器的說明如下:

①、秒寄存器(81h、80h)的位7定義為時鐘暫停标志(CH)。當初始上電時該位置為1,時鐘振蕩器停止,DS1302處于低功耗狀态;隻有将秒寄存器的該位置改寫為0時,時鐘才能開始運作,一般我們在用的時候是在設定時間完成後吧秒寄存器寫入0,這樣就啟動了晶片的計時功能。

②、小時寄存器(85h、84h)的位7定義為DS1302是運作于12小時模式還是24小時模式。當為1時,選擇12小時模式,為0時選擇24小時模式。在12小時模式時,位5是标志位 ,為0時表示AM,為1時表示PM。在24小時模式時,位5是第二個10小時位。

③、控制寄存器(8Fh、8Eh)的位7是寫保護位(WP),其它7位均置為0。在任何的時候對時鐘和RAM的寫操作之前,WP位必須為0。當WP位為1時,寫保護位防止對任一寄存器的寫操作。也就是說在電路上電的初始态WP是1,這時是不能改寫上面任何一個時間寄存器的,隻有首先将WP改寫為0,才能進行其它寄存器的寫操作。

其餘的寄存器沒有什麼特殊的說明。對于DS1302晶片還有一個控制字,該控制字控制這晶片的讀寫操作。具體的内容如下:

①DS1302解析--電子時鐘的時鐘來源

如上表所示,位0就是讀寫位,當位0為1時,就是告訴DS1302,下面是進行讀出操作,而當位0為0時就是寫入操作。

位0-位5是要進行操作的DS1302寄存器位址。

位6就是告訴DS1302,是要對RAM進行操作還是對時間寄存器進行操作,0就是對時間寄存器操作,一般我們都是對時間寄存器進行操作。

位7就是固定的1。

現在就知道為什麼控制字80H是寫秒寄存器,而81H是讀秒寄存器了吧。80H換成二進制就是10000000。而81H的二進制就是10000001,一個是寫操作,另一個是讀操作嘛!

現在,我們來總結下如何對DS1302操作:

1)首先要通過8eH将寫保護去掉,這樣我們才能将日期,時間的初值寫時各個寄存器。

2)然後就可以對80H、82H、84H、86H、88H、8AH、8CH進行初值的寫入。同時也通過秒寄存器将位7的CH值改成0,這樣DS1302就開始走時運作了。

3)将寫保護寄存器再寫為80H,防止誤改寫寄存器的值。

4)不斷讀取80H-8CH的值,将他們轉化為十進制後顯示出來就可以啦,之前我們說過,DS1302讀出的資料是BCD碼,是以需要轉換一下。

5、讀寫時序

上面說到的寄存器,控制字。最終都是需要單片機控制DS1302的引進寫進或讀出晶片的。那現在就說說這讀寫的時序問題。

實體上,DS1302的通訊接口由3個口線組成,即CE(有些資料寫為RST),SCLK,I/O。其中CE(RST)從低電平變成高電平啟動一次資料傳輸過程,SCLK是時鐘線,I/O是資料線。具體的讀寫時序參考下圖,但是請注意,無論是哪種同步通訊類型的串行接口,都是對時鐘信号敏感的,而且一般資料寫入有效是在上升沿,讀出有效是在下降沿(DS1302正是如此的,但是在晶片手冊裡沒有明确說明),如果不是特别确定,則把程式設計成這樣:平時SCLK保持低電平,在時鐘變動前設定資料,在時鐘變動後讀取資料,即資料操作總是在SCLK保持為低電平的時候,相鄰的操作之間間隔有一個上升沿和一個下降沿。

①DS1302解析--電子時鐘的時鐘來源

DS1302的資料讀寫是通過I/O串行進行的。當進行一次讀寫操作時最少得讀寫兩個位元組,第一個位元組是控制位元組,就是一個指令,告訴DS1302是讀還是寫操作,是對RAM還是對CLOK寄存器操作,以及操作的位址。第二個位元組就是要讀或寫的資料了。

我們先看單位元組寫:在進行操作之前先得将CE(也可說是RST)置高電平,然後單片機将控制字的位0放到I/O上,當I/O的資料穩定後,将SCLK置高電平,DS1302檢測到SCLK的上升沿後就将I/O上的資料讀取,然後單片機将SCLK置為低電平,再将控制字的位1放到I/O上,如此反複,将一個位元組控制字的8個位傳給DS1302。接下來就是傳一個位元組的資料給DS1302,當傳完資料後,單片機将CE置為低電平,操作結束。

單位元組讀操作的一開始寫控制字的過程和上面的單位元組寫操作是一樣,但是單位元組讀操作在寫控制字的最後一個位,SCLK還在高電平時,DS1302就将資料放到I/O上,單片機将SCLK置為低電平後資料鎖存,單機機就可以讀取I/O上的資料。如此反複,将一個位元組的資料讀入單片機。讀與寫操作的不同就在于,寫操作是在SCLK低電平時單片機将資料放到IO上,當SCLK上升沿時,DS1302讀取。而讀操作是在SCLK高電平時DS1302放資料到IO上,将SCLK置為低電平後,單片機就可從IO上讀取資料。

在單位元組讀操作時,在寫控制字的最後一個位也就是位7時,DS1302已将它的寄存器資料位0放到IO上了,要是控制字的位7是0的話,DS1302就無法将它的随後的資料放到IO上了,是以控制字的7位為固定的1,原因在這裡哦。

6、典型運用電路

①DS1302解析--電子時鐘的時鐘來源

明天預告:數位管解析

等我們把這教程全部寫完,打樣回來焊接測試後沒問題,小代将會把這次打樣的闆子免費送給有緣人,你是那個有緣人嗎?