實時鐘通常也被稱為實時時鐘,它能夠向電子電路提供日期和時間信息,包括年、月、日、時、分、秒,被廣泛應用在需要進行計時的場合中。許多實時鐘電路還提供電池供電的方式,這樣在發(fā)生掉電時仍能準確計時。通常說來,功能稍多一點的實時鐘電路還會提供包括警報、看門狗,以及支持高精度要求的校準寄存器等附加功能。
DS1307是一款實時種芯片,采用I2C協(xié)議與單片機通訊,而Arduino上正好有這一接口,因此連接起來就非常方便了。DS1307中有一個可編程波形輸出口,它可以用來驅動LED小燈,或者作為中斷來觸發(fā)某些事件,不過用它去帶一些大功率的東西的時候要注意。一般設計的這一款實時鐘模塊,將Ds1307的I2C接口和可編程波形輸出接口SQW都連接出來了,不過一般情況下只會用到I2C接口來實現(xiàn)基本的時鐘設置/讀取功能。需要注意的是,該模塊必須先安裝上電池才可以正常工作。電池使用的是紐扣電池(型號CR1220),正極朝上:
在電路連接上可以使用Arduino專用傳感器擴展板V4,不過要將相應的跳線設置到IIC的位置上:
剩下的工作就是用4芯的I2C/COM連接線將傳感器擴展板上的專用接口,與實時鐘模塊上的IIC(I2C其實就是IIC的縮寫)端口連接起來了:
硬件連接的工作完成之后,如何在Arduino里對該模塊進行編程呢?上網(wǎng)搜索了一下,發(fā)現(xiàn)在Arduino上使用DS1307做為時鐘芯片的玩家還真不少,而且還封裝好了相應的Arduino庫,實驗時一般使用的是Google Code上的這個DS1307庫,你也可以在網(wǎng)上下載其它的版本。將下載好的壓縮文件解壓縮到Arduino 0018的libraries目錄下后,重新啟動Arduino并用它自帶的測試程序進行測試:
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h> // written by mattt on the Arduino forum and modified by D. Sjunnessonvoid setup()
{ Serial.begin(9600);
RTC.stop();
RTC.set(DS1307_SEC,1); //set the seconds
RTC.set(DS1307_MIN,23); //set the minutes
RTC.set(DS1307_HR,12); //set the hours
RTC.set(DS1307_DOW,4); //set the day of the week
RTC.set(DS1307_DATE,15); //set the date
RTC.set(DS1307_MTH,7); //set the month
RTC.set(DS1307_YR,10); //set the year
RTC.start();
}void loop()
{ Serial.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
Serial.print(":"); Serial.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
Serial.print(":"); Serial.print(RTC.get(DS1307_SEC,false));//read seconds
Serial.print(" "); // some space for a more happy life
Serial.print(RTC.get(DS1307_DATE,false));//read date
Serial.print("/"); Serial.print(RTC.get(DS1307_MTH,false));//read month
Serial.print("/"); Serial.print(RTC.get(DS1307_YR,false)); //read year
Serial.println(); delay(1000);
}
程序讀起來應該不算困難,基本上就是使用RTC.set來對時鐘進行設置,然后就可以通過RTC.get來讀取相應的時間信息了,至于時鐘怎么維護,那就是 DS1307 的工作了:)
文章轉自網(wǎng)絡,如有版權問題,請聯(lián)系刪除。