本節課的DS1302是個(ge) 實時時鍾芯片,我們(men) 可以用單片機寫(xie) 入時間或者讀取當前的時間數據,我也會(hui) 帶著大家通過閱讀這個(ge) 芯片的數據手冊(ce) 來學習(xi) 和掌握這個(ge) 器件。
由於(yu) IT技術國際化比較強,因此數據手冊(ce) 絕大多數都是英文的,導致很多英語基礎不好的同學看到英文手冊(ce) 頭就大了。這裏我要告訴大家的是,隻要精神不退縮,方法總比困難多,很多英語水平不高的,看數據手冊(ce) 照樣完全沒問題,因為(wei) 我們(men) 的專(zhuan) 業(ye) 詞匯也就那麽(me) 幾個(ge) ,多看幾次就認識了。我們(men) 現在不是考試,因此大家可以充分利用一些英文翻譯軟件,翻譯過來的中文意思有時候可能不是那麽(me) 準確,那你就把翻譯的內(nei) 容和英文手冊(ce) 裏的一些圖表比較參考學習(xi) 。此外數據手冊(ce) 除了介紹性的說明外,一般還會(hui) 配相關(guan) 的圖形或者表格,結合起來看也有利於(yu) 理解手冊(ce) 所表達的意思。這節課我會(hui) 把DS1302的英文資料盡可能的用比較便於(yu) 理解的方式給大家表達出來,同學們(men) 可以把我的表達和英文手冊(ce) 多做一下對比,盡可能快的慢慢開始學會(hui) 了解英文手冊(ce) 。
1、DS1302的特點
DS1302是DALLAS(達拉斯)公司出的一款涓流充電時鍾芯片,2001年DALLAS被MAXIM(美信)收購,因此我們(men) 看到的DS1302的數據手冊(ce) 既有DALLAS的標誌,又有MAXIM的標誌,大家了解即可。
DS1302實時時鍾芯片廣泛應用於(yu) 電話、傳(chuan) 真、便攜式儀(yi) 器等產(chan) 品領域,他的主要性能指標如下:
1、DS1302是一個(ge) 實時時鍾芯片,可以提供秒、分、小時、日期、月、年等信息,並且還有軟件自動調整的能力,可以通過配置AM/PM來決(jue) 定采用24小時格式還是12小時格式。
2、擁有31字節數據存儲(chu) RAM。
3、串行I/O通信方式,相對並行來說比較節省IO口的使用。
4、DS1302的工作電壓比較寬,大概是2.0V~5.5V都可以正常工作。
5、DS1302這種時鍾芯片功耗一般都很低,它在工作電壓2.0V的時候,工作電流小於(yu) 300nA。
6、DS1302共有8個(ge) 引腳,有兩(liang) 種封裝形式,一種是DIP-8封裝,芯片寬度(不含引腳)是300mil,一種是SOP-8封裝,有兩(liang) 種寬度,一種是150mil,一種是208mil。我們(men) 看一下DS1302的引腳封裝圖,如圖1所示。
所謂的DIP封裝Dual In-line Package,也叫做雙列直插式封裝技術,就如同我們(men) 開發板上的STC89C52RC單片機,就是個(ge) 典型的DIP封裝,當然這個(ge) STC89C52RC還有其他的封裝,為(wei) 了方便學習(xi) 使用,我們(men) 采用的是DIP封裝。而74HC245、74HC138、24C02、DS1302我們(men) 用的都是SOP封裝Small Out-Line Package,是一種芯片兩(liang) 側(ce) 引出L形引腳的封裝技術,大家可以看看開發板上的芯片,了解一下這些常識性知識。
7、當供電電壓是5V的時候,兼容標準的TTL電平標準,這裏的意思是,可以完美的和單片機進行通信。
8、由於(yu) DS1302是DS1202的升級版本,所以所有的功能都兼容DS1202。此外DS1302有兩(liang) 個(ge) 電源輸入,一個(ge) 是主電源,另外一個(ge) 是備用電源,比如可以用電池或者大電容,這樣是為(wei) 了保證係統掉電的情況下,我們(men) 的時鍾還會(hui) 繼續走。如果使用的是充電電池,還可以在正常工作時,設置充電功能,給我們(men) 的備用電池進行充電。
DS1302的特點第二條"擁有31字節數據存儲(chu) RAM",這是DS1302額外存在的資源。這31字節的RAM相當於(yu) 一個(ge) 存儲(chu) 器一樣,我們(men) 編寫(xie) 單片機程序的時候,可以把我們(men) 想存儲(chu) 的數據存儲(chu) 在DS1302裏邊,需要的時候讀出來,這塊功能和EEPROM有點類似,相當於(yu) 一個(ge) 掉電丟(diu) 失數據的"EEPROM",如果我們(men) 的時鍾電路加上備用電池,那麽(me) 這31個(ge) 字節的RAM就可以替代EEPROM的功能了。這31字節的RAM功能使用很少,所以在這裏我不講了,大家了解即可。
2、DS1302的硬件信息
我們(men) 平時所用的不管是單片機,還是其他一些電子器件,根據使用條件的約束,可以分為(wei) 商業(ye) 級和工業(ye) 級,DS1302的購買(mai) 信息如下圖2所示。
圖2 DS1302訂購信息
我們(men) 在訂購DS1302的時候,就可以根據圖15-4所標識的來跟銷售廠家溝通,商業(ye) 級的工作電壓略窄,是0到70度,而工業(ye) 級可以工作在零下40度到85度。TOP MARK就是指在芯片上印的字。
DS1302一共有8個(ge) 引腳,下邊要根據引腳分布圖和典型電路圖來介紹一下每個(ge) 引腳的功能,如圖3和圖4所示。
圖3 DS1302引腳圖
圖4 DS1302典型電路
1腳VCC2是主電源正極的引腳,2腳X1和3腳X2是晶振輸入和輸出引腳,4腳GND是負極,5腳CE是使能引腳,接單片機的IO口,6腳I/O是數據傳(chuan) 輸引腳,接單片機的IO口,7腳SCLK是通信時鍾引腳,接單片機的IO口,8腳VCC1是備用電源引腳。考慮到KST-51開發板是一套以學習(xi) 為(wei) 目的的板子,加上備用電池對航空運輸和攜帶不方便,所以8腳可以直接懸空,斷電後不需要DS1302再運行了,或者是在8腳接一個(ge) 10uF的電容,經過試驗可以運行1分鍾左右的時間,如果大家想運行時間再長,可以加大電容的容量,如圖5和圖6所示。
圖5 DS1302無備用電源
圖6 DS1302電容作備用電源
涓流充電功能,課程也不講了,大家也作為(wei) 選學即可,我們(men) 使用的時候直接用5V電源接一個(ge) 二極管,在有主電源的情況下給電容充電,在主電源掉電的情況下,這個(ge) 電容可以給DS1302大約供電1分鍾左右,這種電路的最大用處是在電池供電係統中更換主電池的時候保持實時時鍾的運行不中斷,1分鍾的時間對於(yu) 更換電池足夠了。此外,通過我們(men) 的使用經驗,在DS1302的主電源引腳串聯一個(ge) 1K電阻可以有效的防止電源對DS1302的衝(chong) 擊,R6就是,而R9,R26,R32都是上拉電阻。
我們(men) 把8個(ge) 引腳功能分別介紹,如表1所示。
表1 DS1302引腳功能圖
引腳編號 |
引腳名稱 |
引腳功能 |
1 |
Vcc2 |
主電源引腳,當Vcc2比Vcc1高0.2V以上時,DS1302由VCC2供電,當Vcc2低於(yu) Vcc1時,由Vcc1供電。 |
2 |
X1 |
這兩(liang) 個(ge) 引腳需要接一個(ge) 32.768K的晶振,給DS1302提供一個(ge) 基準。特別注意,要求這個(ge) 晶振的引腳負載電容必須是6pF,而不是要加6pF的電容。如果使用有源晶振的話,接到X1上即可,X2懸空。 |
3 |
X2 | |
4 |
GND |
接地。 |
5 |
CE |
DS1302的輸入引腳。當讀寫(xie) DS1302的時候,這個(ge) 引腳必須是高電平,DS1302這個(ge) 引腳內(nei) 部有一個(ge) 40k的下拉電阻。 |
6 |
I/O |
這個(ge) 引腳是一個(ge) 雙向通信引腳,讀寫(xie) 數據都是通過這個(ge) 引腳完成。DS1302這個(ge) 引腳的內(nei) 部含有一個(ge) 40k的下拉電阻。 |
7 |
SCLK |
輸入引腳。SCLK是用來作為(wei) 通信的時鍾信號。DS1302這個(ge) 引腳的內(nei) 部含有一個(ge) 40k的下拉電阻。 |
8 |
Vcc1 |
備用電源引腳。 |
DS1302的電路一個(ge) 重點就是時鍾電路,它所使用的晶振是一個(ge) 32.768k的晶振,晶振外部也不需要額外添加其他的電容或者電阻電路了。時鍾的精度,首先取決(jue) 於(yu) 晶振的精度以及晶振的引腳負載電容。如果晶振不準或者負載電容過大過小,都會(hui) 導致時鍾誤差過大。在這一切都搞定後,最終一個(ge) 考慮因素是晶振的溫漂。隨著溫度的變化,晶振往往精度會(hui) 發生變化,因此,在實際的係統中,其中一種方法就是經常校對。比如我們(men) 所用的電腦的時鍾,通常我們(men) 會(hui) 設置一個(ge) 選項"將計算機設置於(yu) internet時間同步"。選中這個(ge) 選項後,一般可以過一段時間,我們(men) 的計算機就會(hui) 和internet時間校準同步一次。
3、DS1302寄存器介紹
DS1302的一條指令一個(ge) 字節8位,其中第七位(即最高位)是固定1,這一位如果是0的話,那寫(xie) 進去是無效的。第六位是選擇RAM還是CLOCK的,我前邊說過,我們(men) 這裏主要講CLOCK時鍾的使用,它的RAM功能我們(men) 不用,所以如果選擇CLOCK功能,第六位是0,如果要用RAM,那第六位就是1。從(cong) 第五到第一位,決(jue) 定了寄存器的5位地址,而第零位是讀寫(xie) 位,如果要寫(xie) ,這一位就是0,如果要讀,這一位就是1,如圖7所示。
圖7 DS1302命令字節
DS1302時鍾的寄存器,其中8個(ge) 和時鍾有關(guan) 的,5位地址分別是00000一直到00111這8個(ge) 地址,還有一個(ge) 寄存器的地址是01000,這是涓流充電所用的寄存器,我們(men) 這裏不講。在DS1302的數據手冊(ce) 裏的地址,直接把第七位、第六位和第零位值給出來了,所以指令就成了80H、81H那些了,最低位是1,那麽(me) 表示讀,最低位是0表示寫(xie) ,如圖8所示。
圖8 DS1302的時鍾寄存器
寄存器一:最高位CH是一個(ge) 時鍾停止標誌位。如果我們(men) 的時鍾電路有備用電源部分,上電後,我們(men) 要先檢測一下這一位,如果這一位是0,那說明我們(men) 的時鍾在係統掉電後,由於(yu) 備用電源的供給,時鍾是持續正常運行的;如果這一位是1,那麽(me) 說明我們(men) 的時鍾在係統掉電後,時鍾部分不工作了。若我們(men) 的Vcc1懸空或者是電池沒電了,當我們(men) 下次重新上電時,讀取這一位,那這一位就是1,我們(men) 可以通過這一位判斷時鍾在單片機係統掉電後是否持續運行。剩下的7位高3位是秒的十位,低4位是秒的個(ge) 位,這裏注意再提一次,DS1302內(nei) 部是BCD碼,而秒的十位最大是5,所以3個(ge) 二進製位就夠了。
寄存器二:bit7沒意義(yi) ,剩下的7位高3位是分鍾的十位,低4位是分鍾的個(ge) 位。
寄存器三:bit7是1的話代表是12小時製,是0的話代表是24小時製,bit6固定是0,bit5在12小時製下0代表的是上午,1代表的是下午,在24小時製下和bit4一起代表了小時的十位,低4位代表的是小時的個(ge) 位。
寄存器四:高2位固定是0,bit5和bit4是日期的十位,低4位是日期的個(ge) 位。
寄存器五:高3位固定是0,bit4是月的十位,低4位是月的個(ge) 位。
寄存器六:高5位固定是0,低3位代表了星期。
寄存器七:高4位代表了年的十位,低4位代表了年的個(ge) 位。這裏特別注意,這裏的00到99年指的是2000年到2099年。
寄存器八:bit7是一個(ge) 保護位,如果這一位是1,那麽(me) 是禁止給任何其他的寄存器或者那31個(ge) 字節的RAM寫(xie) 數據的。因此在寫(xie) 數據之前,這一位必須先寫(xie) 成0。
4、DS1302通信時序介紹
DS1302我們(men) 前邊也有提起過,是三根線,分別是CE、I/O和SCLK,其中CE是使能線,SCLK是時鍾線,I/O是數據線。前邊我們(men) 學過SPI通信,同學們(men) 發現沒發現,這個(ge) DS1302的通信線定義(yi) 和SPI怎麽(me) 這麽(me) 像呢?
事實上,DS1302的通信是SPI的變異種類,它用了SPI的通信時序,但是通信的時候沒有完全按照SPI的規則來,下麵我們(men) 一點點解剖一下DS1302的變異SPI通信方式。
先看一下單字節寫(xie) 入操作,如圖9所示。
圖9 DS1302單字節寫(xie) 操作
然後我們(men) 在對比一下再對比一下CPOL=0並且CPHA=0的情況下的SPI的操作時序,如圖10所示。
圖10 CPOL=0/CPHA=0通信時序
圖9和圖10的通信時序,其中CE和SSEL的使能控製是反的,對於(yu) 通信寫(xie) 數據,都是在SCK的上升沿,從(cong) 機進行采樣,下降沿的時候,主機發送數據。DS1302的時序裏,單片機要預先寫(xie) 一個(ge) 字節指令,指明要寫(xie) 入的寄存器的地址以及後續的操作是寫(xie) 操作,然後再寫(xie) 入一個(ge) 字節的數據。
對於(yu) 單字節讀操作,我就不做對比了,把DS1302的時序圖貼出來給大家看一下,如圖11所示。
圖11 DS1302單字節讀操作
讀操作有兩(liang) 處特別注意的地方。第一,DS1302的時序圖上的箭頭都是針對DS1302來說的,因此讀操作的時候,先寫(xie) 第一個(ge) 字節指令,上升沿的時候DS1302來鎖存數據,下降沿我們(men) 用單片機發送數據。到了第二個(ge) 字數據,由於(yu) 我們(men) 這個(ge) 時序過程相當於(yu) CPOL=0/CPHA=0,前沿發送數據,後沿讀取數據,第二個(ge) 字節是DS1302下降沿輸出數據,我們(men) 的單片機上升沿來讀取,因此箭頭從(cong) DS1302角度來說,出現在了下降沿。
第二個(ge) 需要注意的地方就是,我們(men) 的單片機沒有標準的SPI接口,和I2C一樣需要用IO口來模擬通信過程。在讀DS1302的時候,理論上SPI是上升沿讀取,但是我們(men) 的程序是用IO口模擬的,所以數據的讀取和時鍾沿的變化不可能同時了,必然就有一個(ge) 先後順序。通過實驗發現,如果先讀取IO線上的數據,再拉高SCLK產(chan) 生上升沿,那麽(me) 讀到的數據一定是正確的,而顛倒順序後數據就有可能出錯。這個(ge) 問題產(chan) 生的原因還是在於(yu) DS1302的通信協議與(yu) 標準SPI協議存在的差異造成的,如果是標準SPI的數據線,數據會(hui) 一直保持到下一個(ge) 周期的下降沿才會(hui) 變化,所以讀取數據和上升沿的先後順序就無所謂了;但DS1302的IO線會(hui) 在時鍾上升沿後被DS1302釋放,也就是撤銷強推挽輸出變為(wei) 弱下拉狀態,而此時在51單片機引腳內(nei) 部上拉的作用下,IO線上的實際電平會(hui) 慢慢上升,從(cong) 而導致在上升沿產(chan) 生後再讀取IO數據的話就可能出錯。因此這裏的程序我們(men) 按照先讀取IO數據,再拉高SCLK產(chan) 生上升沿的順序。
下麵我們(men) 就寫(xie) 一個(ge) 程序,先將2013年10月8號星期二12點30分00秒這個(ge) 時間寫(xie) 到DS1302內(nei) 部,讓DS1302正常運行,然後在不停的讀取DS1302的當前時間,並顯示在我們(men) 的液晶屏上。