A. 樹莓派基礎實驗32:DS1302實時時鍾模塊實驗
現在有很多流行的串列時鍾晶元,如DS1302,DS1307,PCF8485等,由於簡單的介面,低成本和易用性,他們被廣泛應用於電話、傳真、攜帶型儀器等產品領域。在本實驗中,我們將使用DS1302實時時鍾(RTC)模塊獲取當前日期和時間。
DS1302可以用於數據記錄,特別是對某些具有特殊意義的數據點的記錄,能實現數據與出現該數據的時間同時記錄。這種記錄對長時間的連續測控系統結果的分析,及對異常數據出現的原因的查找具有重要意義。
傳統的數據記錄方式是隔時采樣或定時采樣,沒有具體的時間記錄,因此,只能記錄數據而無法准確記錄其出現的時間;若採用單片機計時,一方面需要採用計數器,佔用硬體資源,另一方面需要設置中斷、查詢等,同樣耗費單片機的資源,而且,某些測控系統可能不允許。但是,如果在系統中採用時鍾晶元DS1302,則能很好地解決這個問題。
★Raspberry Pi 3主板*1
★樹莓派電源*1
★40P軟排線*1
★DS1302實時時鍾模塊*1
★麵包板*1
★跳線若干
DS1302是DALLAS(達拉斯)公司出的一款涓流充電時鍾晶元,2001年DALLAS被MAXIM(美信)收購。
DS1302實時時鍾晶元廣泛應用於電話、傳真、攜帶型儀器等產品領域,他的主要性能指標如下:
1、DS1302是一個實時時鍾晶元,可以提供秒、分、小時、日期、月、年等信息,並且還有軟年自動調整的能力,可以通過配置AM/PM來決定採用24小時格式還是12小時格式。
2、擁有31位元組數據存儲RAM。
3、串列I/O通信方式,相對並行來說比較節省IO口的使用。
4、DS1302的工作電壓比較寬,大概是2.0V~5.5V都可以正常工作。
5、DS1302這種時鍾晶元功耗一般都很低,它在工作電壓2.0V的時候,工作電流小於300nA。
6、DS1302共有8個引腳,有兩種封裝形式,一種是DIP-8封裝,晶元寬度(不含引腳)是300mil,一種是SOP-8封裝,有兩 種寬度,一種是150mil,一種是208mil。我們看一下DS1302的引腳封裝圖:
7、當供電電壓是5V的時候,兼容標準的TTL電平標准,這里的意思是,可以完美的和單片機進行通信。
8、由於DS1302是DS1202的升級版本,所以所有的功能都兼容DS1202。此外DS1302有兩個電源輸入,一個是主電源, 另外一個是備用電源,比如可以用電池或者大電容,這樣是為了保證系統掉電的情況下,我們的時鍾還會繼續走。如果使用的是充電電池,還可以在正常工作時,設置充電功能,給我們的備用電池進行充電。
DS1302的特點第二條「擁有31位元組數據存儲RAM」,這是DS1302額外存在的資源。這31位元組的RAM相當於一個存儲器一樣,我們編寫單片機程序的時候,可以把我們想存儲的數據存儲在DS1302里邊,需要的時候讀出來,這塊功能和EEPROM有點類似,相當於一個掉電丟失數據的「EEPROM」,如果我們的時鍾電路加上備用電池,那麼這31個位元組的RAM就可以替代EEPROM的功能了。
DS1302一共有8個引腳,下邊要根據引腳分布圖和典型電路圖來介紹一下每個引腳的功能:
DS1302的電路一個重點就是時鍾電路,它所使用的晶振是一個32.768k的晶振,晶振外部也不需要額外添加其他的電容或者電阻電路了。時鍾的精度,首先取決於晶振的精度以及晶振的引腳負載電容。如果晶振不準或者負載電容過大過小,都會導致時鍾誤差過大。在這一切都搞定後,最終一個考慮因素是晶振的溫漂。隨著溫度的變化,晶振往往精度會發生變化,因此,在實際的系統中,其中一種方法就是經常校對。比如我們所用的電腦的時鍾,通常我們會設置一個選項「將計算機設置於internet時間同步」。選中這個選項後,一般可以過一段時間,我們的計算機就會和internet時間校準同步一次。
對DS1302的操作就是對其內部寄存器的操作,DS1302內部共有12個寄存器,其中有7個寄存器與日歷、時鍾相關,存放的數據位為BCD碼形式。此外,DS1302還有年份寄存器、控制寄存器、充電寄存器、時鍾突發寄存器及與RAM相關的寄存器等。時鍾突發寄存器可一次性順序讀/寫除充電寄存器以外的寄存器。
DS1302的一條指令一個位元組8位,其中第7位(即最高位)是固定1,這一位如果是0的話,那寫進去是無效的。第6位是選擇RAM還是CLOCK的,這里主要講CLOCK時鍾的使用,它的RAM功能我們不用,所以如果選擇CLOCK功能,第6位是0,如果要用RAM,那第6位就是1。從第5到第1位,決定了寄存器的5位地址,而第0位是讀寫位,如果要寫,這一位就是0,如果要讀,這一位就是1。
DS1302時鍾的寄存器,其中8個和時鍾有關的,5位地址分別是00000一直到00111這8個地址,還有一個寄存器的地址是01000,這是涓流充電所用的寄存器,我們這里不講。在DS1302的數據手冊里的地址,直接把第7位、第6位和第0位值給出來了,所以指令就成了80H、81H那些了,最低位是1,那麼表示讀,最低位是0表示寫。
寄存器一:最高位CH是一個時鍾停止標志位。如果我們的時鍾電路有備用電源部分,上電後,我們要先檢測一下這一位,如果這一位是0,那說明我們的時鍾在系統掉電後,由於備用電源的供給,時鍾是持續正常運行的;如果這一位是1,那麼說明我們的時鍾在系統掉電後,時鍾部分不工作了。若我們的Vcc1懸空或者是電池沒電了,當我們下次重新上電時,讀取這一位,那這一位就是1,我們可以通過這一位判斷時鍾在單片機系統掉電後是否持續運行。剩下的7位高3位是秒的十位,低4位是秒的個位,這里注意再提一次,DS1302內部是BCD碼,而秒的十位最大是5,所以3個二進制位就夠了。
寄存器二:bit7沒意義,剩下的7位高3位是分鍾的十位,低4位是分鍾的個位。
寄存器三:bit7是1的話代表是12小時制,是0的話代表是24小時制,bit6固定是0,bit5在12小時制下0代表的是上午,1代表的是下午,在24小時制下和bit4一起代表了小時的十位,低4位代表的是小時的個位。
寄存器四:高2位固定是0,bit5和bit4是日期的十位,低4位是日期的個位。
寄存器五:高3位固定是0,bit4是月的十位,低4位是月的個位。
寄存器六:高5位固定是0,低3位代表了星期。
寄存器七:高4位代表了年的十位,低4位代表了年的個位。這里特別注意,這里的00到99年指的是2000年到2099年。
寄存器八:bit7是一個保護位,如果這一位是1,那麼是禁止給任何其他的寄存器或者那31個位元組的RAM寫數據的。因此在寫數據之前,這一位必須先寫成0。
物理上,DS1302的通信介面由3個口線組成,即RST,SCLK,I/O。其中RST從低電平變成高電平啟動一次數據傳輸過程,SCLK是時鍾線,I/O是數據線。這個DS1302的通信線定義和SPI很像,事實上,DS1302的通信是SPI的變異種類,它用了SPI的通信時序,但是通信的時候沒有完全按照SPI的規則來,下面我們介紹DS1302的變異SPI通信方式。
請注意數據是對時鍾信號敏感的,而且一般數據是在下降沿寫入,上升沿讀出。平時SCLK保持低電平,當需要寫命令或者寫數據時,在時鍾輸出變為高電平之前先輸出數據;當需要讀數據時,在時鍾輸出變為高電平之前采樣讀取數據。
第1步: 連接電路。
第2步: DS1302的Python程序比較復雜,我們先編寫一個模塊ds1302.py,在裡面創建一個類DS1302(),在裡面編寫讀取時鍾信息等方法。
第3步: 編寫實際控製程序,導入上面的模塊ds1302。運行本文件,不斷循環讀取並列印時鍾信息。
實驗結果示例:
B. DS1302晶元DS1302與CPU的連接
在調試程序時,DS1302晶元與CPU的連接並非必須包含電容器,僅需加入一個32.768kHz的晶振即可。然而,不同類型的晶振可能會導致較大的誤差。此外,通過在電路中集成DS18B20,能夠同時顯示實時溫度,且只需佔用CPU的一個口線。
對於顯示設備,LCD可替換為LED,或使用北京衛信傑科技發展有限公司提供的10位多功能8段液晶顯示模塊LCM101。此模塊內含看門狗(WDT)/時鍾發生器及兩種頻率的蜂鳴器驅動電路,並具備內置顯示RAM,支持任意欄位筆劃顯示,且具有3-4線串列介面,兼容各種單片機、IC。其低功耗特性體現在顯示狀態時電流為2μA(典型值),進入省電模式時電流小於1μA,工作電壓范圍為2.4V~3.3V,顯示效果清晰。
綜上所述,DS1302晶元與CPU的連接方式靈活多樣,可以根據實際需求和硬體資源選擇合適的組件。在設計電路時,應考慮晶振的誤差、顯示設備的功耗和兼容性,以及整體系統的穩定性與效率。此外,採用集成溫度顯示和多功能液晶顯示模塊,能夠提升系統的功能性與實用性,簡化界面設計,減少CPU資源消耗,實現更高效、便捷的信息交互。