0°

(十九)msp430进阶:DS1307 RTC模块与MSP-EXP430G2 TI Launchpad连接

介绍

(十九)msp430进阶:DS1307 RTC模块与MSP-EXP430G2 TI Launchpad连接

DS1307 RTC模块

  • Real Time Clock(RTC)用于监视时间和维护日历。
  • 为了使用RTC,我们需要首先使用当前日期和时间对其进行编程。完成此操作后,可以随时读取RTC寄存器以了解时间和日期。
  • DS1307是一款适用于I2C协议的RTC。通过访问其地址以便使用I2C通信进行读取,可以读取各种寄存器中的数据。

 

连接图

(十九)msp430进阶:DS1307 RTC模块与MSP-EXP430G2 TI Launchpad连接

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中的时间和日期。
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
Arduino
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论