I2C DS1307 RTC实时时钟模块

简介

DFRobot曾出过一款DS1307 RTC 实时时钟模块,它以低廉的价格广受好评。此次DFRobot特意推出了新一代Gravity接口版本。

新版模块采用高精度时钟晶振,大幅度减少了时间误差,实测24小时内误差仅在1秒左右(机械表大约在20s左右)。此外新版RTC模块采用了单节CR1220供电,缩减了整体的体积,电池最小使用寿命为3~5年。保留了4KB的EEPROM的内存,用以记录更多闹钟和一些事件信息,可通过调整电阻设置I2C地址。

Gravity: I2C DS1307 RTC实时时钟模块采用Gravity-I2C接口,可以直插Gravity IO扩展板,配合DFRobot新开发的Arduino DS1307库,可以轻松实现时间设定,时间显示等功能。无论是用于数据采集,还是制作时钟,都是一个非常棒的选择!

产品参数

引脚说明

:实时时钟管脚定义

标号 名称 功能描述
1 VCC 电源输入正极(5v)
2 GND 电源输入负极
3 SCL I2C时钟
4 SDA I2C数据
5 SQ 时钟输出
6 VCC 电源输入正极(5v)
7 GND 电源输入负极
8 SCL I2C时钟
9 SDA I2C数据

实时时钟管脚定义

使用教程

准备

连线图

DFR0151接线图

样例代码

 /***************************************************
 * Real Time Clock Module
 * ****************************************************
 * How to apply the DS1307 clock module.
 * @author Dongzi(1185787528@qq.com)
 * @version  V1.0
 * @date  2017-08-21
 GNU Lesser General Public License.
 See <http://www.gnu.org/licenses/> for details.

 * All above must be included in any redistribution
 * ****************************************************/
 #include <Wire.h>
 #include <DS1307.h>
 #define updata_flag 0 //1 updata time,0 only show time
 //Modify the following data
 #define TIME_YR    17
 #define TIME_MTH   8
 #define TIME_DATE  21
 #define TIME_DOW   1
 #define TIME_HR    0
 #define TIME_MIN   1
 #define TIME_SEC   0
 char* str[]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};//week
 int rtc[7];
 void showtime()     //
   {
    RTC.get(rtc,true);
   {
    Serial.print( rtc[6]);   /*YEAR MONTH DATE*/
    Serial.print("-");
    Serial.print( rtc[5]);
    Serial.print("-");
    Serial.println( rtc[4]);

    Serial.print( rtc[2]); /*HOUR  MIN SEC */
    Serial.print(":");
    Serial.print( rtc[1]);
    Serial.print(":");
    Serial.println( rtc[0]);

    Serial.println( str[rtc[3]-1]); /********WEEK*****/
    Serial.println("**********");
    }
   }
 void setup()
 {  Serial.begin(9600);
   Wire.begin();

   if(updata_flag)
  { Serial.println(" OldTime:  ");
   showtime();
    RTC.stop();

    RTC.set(DS1307_SEC,TIME_SEC); //---Update time----
    RTC.set(DS1307_MIN,TIME_MIN);
    RTC.set(DS1307_HR,TIME_HR);
    RTC.set(DS1307_DOW,TIME_DOW);
    RTC.set(DS1307_DATE,TIME_DATE);
    RTC.set(DS1307_MTH,TIME_MTH);
    RTC.set(DS1307_YR,TIME_YR);
    RTC.start();
    Serial.println(" SetTime:  ");
    showtime();
   }
 }
 void loop()
 { if(updata_flag==0)
     showtime();    //Output data from serial port
    delay(1000);
 }

|}

结果

特别说明:

#define updata_flag 0 //1 updata time,0 only show time

DFR0151_串口_1.png

Mind+(基于Scratch3.0)图形化编程

1、下载及安装软件。下载地址:http://www.mindplus.cc 详细教程:Mind+基础wiki教程-软件下载安装 2、切换到“上传模式”。 详细教程:Mind+基础wiki教程-上传模式编程流程 3、“扩展”中选择“主控板”中的“Arduino Uno”。“扩展”中选择“传感器”中的“实时时钟DS1307” 详细教程:Mind+基础wiki教程-加载扩展库流程 4、进行编程,程序如下图: 5、菜单“连接设备”,“上传到设备” 6、程序上传完毕后,打开串口即可看到数据输出。详细教程:Mind+基础wiki教程-串口打印

注意:调整时间的程序被执行就会重置时间,因此调整时间的程序(图1)烧录完成之后,接下来不要断电,烧录一个不含调整时间的程序(图2)

附录:EEPROM IIC地址真值表

DFR0117_Add_Tb.png

:注:EEPROM芯片默认I2C地址为0x50, A0~A2 丝印旁边200R 焊接上为ON 去掉为0ff |

常见问题

问:有什么办法让电脑时间实时更新到模块中吗?

答:请点击下面的链接:电脑时间实时更新

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

更多

DFshopping_car1.png DFRobot商城购买链接