目录
介绍
DS1307 RTC模块
- Real Time Clock(RTC)用于监视时间和维护日历。
- 为了使用RTC,我们需要首先使用当前日期和时间对其进行编程。完成此操作后,可以随时读取RTC寄存器以了解时间和日期。
- DS1307是一款适用于I2C协议的RTC。通过访问其地址以便使用I2C通信进行读取,可以读取各种寄存器中的数据。
连接图
DS1307 RTC模块与MSP-EXP430G2 TI Launchpad接口
例
将RTC编程为当前日期和时间; 并从RTC读取日期和时间。
在这里,我们将使用DS1307库。该库适用于Arduino,但也适用于MSP-EXP430G2 TI Launchpad。
库下载:
解压缩库并将名为DS1307的文件夹添加到Energia IDE的libraries文件夹路径中。
有关如何将自定义库添加到Energia IDE并使用其中的示例的信息,请参阅“基础知识”部分中的“ 将库添加到Energia IDE ”。
将库添加到Energia IDE后,打开IDE并打开添加的DS1307库中名为Example的示例程序。
重要提示: MSP-EXP430G2 TI Launchpad的SCL和SDA分别位于引脚14(P1_6)和15(P1_7)上。Energia IDE利用基于软件的I2C实现(twi_sw)为MSP-EXP430G2 TI Launchpad。这种基于软件的I2C实现通过引脚9(P2_1)和10(P2_2)定义为SCL和SDA引脚。因此,我们需要将这些引脚用于Energia的I2C功能(在大多数库中使用),以便在MSP-EXP430G2 TI Launchpad板上工作。这已在Energia 17和18上完成(尚未检查IDE的早期版本)。
注意事项:在示例程序setup函数中,使用了rtc.set()函数。将上述日期和时间参数传递给此函数。在示例程序中,将对此语句进行注释。取消注释并上传程序。上传程序后,再次取消注释该语句并上传程序。如果不这样做,每次MSP-EXP430G2 TI Launchpad板重置或在断电后打开电源时,您设置的日期和时间将反复设置,您将无法读取确切的当前时间和日期。
注意: MSP-EXP430G2 TI Launchpad主板具有512字节的RAM,可轻松上传,尤其是在使用不同库时。有时您需要串行缓冲区足够大以包含所需的数据,并且您必须修改串行库的缓冲区大小。在做这些事情时,我们必须确保代码不会使用超过70%的RAM。这可能导致代码以不稳定的方式工作,有时运行良好并且在其他方面失败。
有些时候RAM使用率可能会超过70%并且代码将完全正常工作,并且即使RAM使用率为65%,代码也无法工作。
在这种情况下,可能需要对缓冲区大小和/或变量进行一些试验和错误。
在DS1307中设置和阅读时间和日期的程序
/*
DS1307 RTC (Real-Time-Clock) Example
Uno A4 (SDA), A5 (SCL)
Mega 20 (SDA), 21 (SCL)
Leonardo 2 (SDA), 3 (SCL)
*/
#include <Wire.h>
#include <DS1307.h>
DS1307 rtc;
void setup()
{//init Serial port
Serial.begin(9600);
while(!Serial); //wait for serial port to connect - needed for Leonardo only
//init RTC
Serial.println("Init RTC...");
//only set the date+time one time
rtc.set(0, 0, 8, 24, 12, 2014); //08:00:00 24.12.2014 //sec, min, hour, day, month, year
//stop/pause RTC// rtc.stop();
//start RTC
rtc.start();
}
void loop()
{
uint8_t sec, min, hour, day, month;
uint16_t year;
//get time from RTC
rtc.get(&sec, &min, &hour, &day, &month, &year);
//serial output
Serial.print("\nTime: ");
Serial.print(hour, DEC);
Serial.print(":");
Serial.print(min, DEC);
Serial.print(":");
Serial.print(sec, DEC);
余下程序:
使用的功能
1. DS1307 rtc
- 这定义了一个名为rtc的DS1307类对象。
2. rtc.set(uint8_t sec, uint8_t min, uint8_t hour, uint8_t day, uint8_t month, uint16_t year)
- 该功能用于设置DS1307 RTC IC的当前时间和日期。
3. rtc.start()
- 该功能用于启动与DS1307的I2C通信。
- 它从DS1307 Timekeeper寄存器中获取SEC和CH字节。
4. rtc.get(uint8_t *sec, uint8_t *min, uint8_t *hour, uint8_t *day, uint8_t *month, uint16_t *year)
- 此功能用于获取存储在DS1307 IC中的时间和日期。