2014年8月21日 星期四

RFID project第二彈_RTC時鐘(上) NXP PCF8563 with MSP430G2553

前言:
繼上回gameduino牛刀小試後,這篇blog要介紹的是RTC時鐘 PCF8563, 若有不周,歡迎批評指教,缺漏的部份日後會慢慢補上. 轉貼或引用本篇blog內文章段落, 不必交代出處.不過程式碼的部分是拿TI官網找到的usci i2c master Library sample code並參考某網站EEPROM sample code的HW uart部分而寫成的,所以相關著作權法律的問題請注意一下!

過程:
起先板子買錯買成5V tiny rtc ds1307 for arduino,目前已改過板子改成可以3V用的,但是coding還是沒成功, 軟體方面一直受挫,就會懷疑到硬體上, 板子上還有一顆EEPROM 24C32不用改板,3V的msp430g2553也可用I2C跟它溝通, coding ok就證明msp430g2553在usci i2c介面是ok的, 衝動之下又去買了3V專用的rtc nxp pcf8563, 起先用EEPROM coding的方式不成功, 又改用usci i2c master Library coding方式也不成功, 想要用傳統的8051隨便找兩根GPIO pin來用軟體模擬硬體I2C的SDA,SCL訊號, 更差點衝動去買USBee示波器(邏輯分析儀), 有稍微check一下是否是硬體有問題(pull-up電阻雖只有1k,但是查datasheet Rpu公式後發現1k剛好,晶振也接地,晶振電路也ok,程式看的出來硬體並非完全都有問題). 因出差所以暫時放著兩天後, 看書提到msp430g2553 usci i2c 7-bits slave address的值就是看datasheet上面提到的slave address 7bits + R/W bit=1 byte, 整個 byte 右移1位就是msp430g2553在用的slave address, 先前被datasheet提到write就用0xA2, read就用0xA3給蒙蔽, 其實答案是:0xA2(或0xA3)>>1,果然改了之後就成功了!

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重複!
->083014更新:加入start-up delay幫助pcf8563通電後需要一段時間來ready,新發現:pcf8563會掉秒!

接線圖:


成果圖:


所有程式碼下載連結:
https://drive.google.com/file/d/0B6EVEd5P2B9cclNvWHFlalNPYUE/edit?usp=sharing