本篇是RFID project第二彈的下集, 主要介紹的是RTC時鐘 DS1307, 若有不周,歡迎批評指教,缺漏的部份日後會慢慢補上. 轉貼或引用本篇blog內文章段落, 不必交代出處.不過程式碼的部分是拿TI官網找到的usci i2c master Library sample code並參考某網站EEPROM sample code的HW uart部分而寫成的,所以相關著作權法律的問題請注意一下!
過程:
其實一開始拿到的是DS1307,還沒coding之前先上網調查一下這塊板子如何使用,結果發現Vcc是接5V,更有網友提問使用此板跟msp430 i2c溝通有問題,參考某網友的改板電路圖後, 決定要將SDA,SCL的pull-up(3.55V)灌電壓的地方跟DS1307 pin8(Vcc:灌5V)斷開來,因為鈕扣電池座擋到太多trace就算對照schematics拿電表量還是出錯,割錯地方,改板圖請參考圖1. 板子改好之後,
開始coding, 一直不成功, 開始懷疑到板子身上,有可能晶振不振(R7沒焊),也有可能ic壞了, 也有可能pull-up電阻不夠大(一般用4.7k,板上才3.3k), 總之很想去買USB示波器來一探究竟!
082214重大突破:
晚上拿昨天試成功的pcf8563 code來改給ds1307用,結果竟然成功了?!但是更詭異的是ds1307的Vcc灌3.55V(out of spec.)也能工作?!只是有的時候會掉秒而已(大概1分鐘掉個2~3秒), 後來發現Vcc接5V也是掉秒!所以更本不用改板子??? 上網查了一下,關於Vbat跟Vcc接多少電壓的原則如下,只要遵守一定能work:
a.SDA,SCL pull-up voltage must be 3.55Volt(msp430 mcu vcc),
b.ds1307 Vcc > 1.25*Vbat, even Vcc out of spec.(4.5V~5.5V),
1.msp430g2553板子上面的J5 P1.6 jumper拿掉, P1.6當SCL,P1.7當SDA, J3調成HW UART,
2.兩塊板子的Vcc,GND,SDA,SCL互相接在一起,
3.程式用CCSv6編譯, rtc先將目前時間日期寫值進去, 再讀出來, 透過uart秀到PC螢幕上,也就是CCSv6內建陽春版的超級終端機, 最後用while-loop 每秒秀一次時間日期(秒:分:時 星期幾 日-月-年),master Library裡面的TI_USCI_I2C_slave_present();拿掉UCTXSTP,因為跟TX_ISR重複!
->083114更新:發現要改start-up delay需加debug msg(uart印0x0D),
090214更新:上電後只需按msp430板子上的reset按鈕就可達到start-up delay幫助ds1307通電後需要一段時間來ready,
改板圖:
接線圖:
成果圖:
所有程式碼下載連結:
https://drive.google.com/file/d/0B6EVEd5P2B9cRkNOX3l1dk5XZDg/edit?usp=sharing
090814更新:
程式新增DS1307這塊板子上的一顆EEPROM(AT24C32 4KB)的read and write功能,注意write完之後要馬上讀資料的話要delay一段時間,才能接著讀值,
所有程式碼下載連結:
https://drive.google.com/file/d/0B6EVEd5P2B9cX2k4c3RJb29PcGc/edit?usp=sharing