(SKU:DFR0469)Gravity: I2C SD2405 RTC 实时时钟模块

来自DFRobot Product Wiki
跳转至: 导航搜索
文件:DFR0469.jpg
Gravity I2C SD2305 RTC 实时时钟模块

目录

简介

SD2405 RTC Module 内置晶振、支持IIC串行接口的高精度时钟,兼容Gravity接口;内置一次性工业级电池可保证外部掉电情况下时钟使用寿命为5~8年时间,不需要额外上钮扣电池,非常方便实用;可实现定时/报警中断输出,年、月、日、星期、时、分、秒的功能显示,DIY一个特别的小闹钟这个小体积的RTC模块绝对满足你需求。

技术规格

  • 工作电压:3.3V~5V
  • 工作电流:1uA(内置电池)
  • 计时范围:至2100年(带闰年补偿)
  • 接口方式:IIC
  • 工作温度:-40℃~+85℃
  • 模块尺寸:35.50 × 22.00(mm)


引脚说明

20170207133718.png
  • 连接arduino平台接口(Gravity接口):

从上到下依次是
1、SDA:IIC数据输入引脚

2、SCL:IIC时钟输入引脚

3、GND:电源负

4、VCC:电源正

  • 预留排针引脚

从上到下依次是
1、SDA:IIC数据输入引脚

2、SCL:IIC时钟输入引脚

3、GND:电源负

4、VCC:电源正

5、INT:中断引脚


使用教程

  • 目标:设置初始时间,串口每秒读取当前时间


准备


接线图

选用Gravity传感器线作为连接线,将模块与UNO板子连接起来

  • Gravity传感器线一端插在模块IIC接口上,另一端插在UNO板子,线序如下:
 模块 ————  UNO板子 
 VCC  ————  5V
 GND  ————  GND 
 SDA  ————  4(模拟IO,4脚) 
 SCL  ————  5(模拟IO,5脚)
20170207133957.png
  • 连接USB线


样例代码

注意: 关于实时时钟寄存器中,地址为02H的小时设置:

实时时钟寄存器

  • 1.最高位为时制12/24设置,0为12小时制,1为24小时制
  • 2.高四位的后三位为24小时制的十位设置位,第四位为24小时制的个位设置位
  • 3.24小时制设置 eg:
    • hour:04:00(24-hour format) 10000004B 84H Wire.write(0x84);
    • hour:12:00(24-hour format) 10010002B 92H Wire.write(0x92);
    • hour:23:00(24-hour format) 10100003B A2H Wire.write(0xA2);
  • 4.读取时需要屏蔽最高位,示例程序中已经处理
  • 拷贝以下的代码烧录进单片机
/***************************************************
* SD2405 RTC Module
* ****************************************************
* This example read SD2405 RTC Module
  
* @author hudianjiang(powerliao.hu@dfrobot.com)
* @version  V1.0
* @date  2016-10-28
  
* GNU Lesser General Public License.
* See <http://www.gnu.org/licenses/> for details.
* All above must be included in any redistribution
* ****************************************************/
#include <Wire.h>      

#define RTC_Address   0x32  //RTC_Address 

unsigned char   date[7];

void setup()
{
  Wire.begin();
  Serial.begin(9600); 
}

void loop()
{
  I2CWriteDate();//Write the Real-time Clock
  delay(100);

  while(1)
  {  
    I2CReadDate();  //Read the Real-time Clock     
    Data_process();//Process the data

    delay(1000);
  }
}

//Read the Real-time data register of SD2403 
void I2CReadDate(void)
{
  unsigned char n=0;

  Wire.requestFrom(RTC_Address,7); 
  while(Wire.available())
  {  
    date[n++]=Wire.read();
  }
  delayMicroseconds(1);
  Wire.endTransmission();
}

void I2CWriteDate(void)
{   
  WriteTimeOn();

  Wire.beginTransmission(RTC_Address);        
  Wire.write(byte(0));//Set the address for writing       
  Wire.write(0x59);//second:59     
  Wire.write(0x59);//minute:59      
  Wire.write(0x95);//hour:15:00(24-hour format)       
  Wire.write(0x02);//weekday:Monday      
  Wire.write(0x05);//day:5th      
  Wire.write(0x12);//month:December     
  Wire.write(0x16);//year:2016     
  Wire.endTransmission();

  Wire.beginTransmission(RTC_Address);      
  Wire.write(0x12);   //Set the address for writing       
  Wire.write(byte(0));            
  Wire.endTransmission(); 

  WriteTimeOff();      
}


void WriteTimeOn(void)
{   
  Wire.beginTransmission(RTC_Address);       
  Wire.write(0x10);//Set the address for writing as 10H       
  Wire.write(0x80);//Set WRTC1=1      
  Wire.endTransmission();

  Wire.beginTransmission(RTC_Address);    
  Wire.write(0x0F);//Set the address for writing as OFH       
  Wire.write(0x84);//Set WRTC2=1,WRTC3=1      
  Wire.endTransmission();   
}


void WriteTimeOff(void)
{   
  Wire.beginTransmission(RTC_Address);   
  Wire.write(0x0F);   //Set the address for writing as OFH        
  Wire.write(byte(0));//Set WRTC2=0,WRTC3=0      
  Wire.write(byte(0));//Set WRTC1=0  
  Wire.endTransmission(); 
}

//Process the time_data
void Data_process(void)
{
  unsigned char i;

  for(i=0;i<7;i++)
  {
    if(i!=2)
      date[i]=(((date[i]&0xf0)>>4)*10)+(date[i]&0x0f);
    else
    {
      date[2]=(date[2]&0x7f);
      date[2]=(((date[2]&0xf0)>>4)*10)+(date[2]&0x0f);
    }
  }
  // Use the serial monitor to see information being transmitted   
  Serial.print("Second = ");//second
  Serial.print(date[0]);
  Serial.print("   Minute = ");//minute
  Serial.print(date[1]);
  Serial.print("   Hour = ");//hour
  Serial.print(date[2]);
  Serial.print("   Week = ");//week
  Serial.print(date[3]);
  Serial.print("   Day = ");//day
  Serial.print(date[4]);
  Serial.print("   Month = ");//month
  Serial.print(date[5]);
  Serial.print("   Year = ");//year
  Serial.print(date[6]);

  Serial.println();
}                     


结果

  • 在Ardunio串口查看时间信息
20161205153304.png


常见问题

还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!


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


更多


DFshopping car1.png [Link DFRobot商城购买链接]

个人工具
名字空间

变换
操作
导航
工具箱