KE0072 keyes DS3234高精度时钟模块(焊盘孔) 红色 环保

来自KEYES
跳转至: 导航搜索

概述

本模块主要用到高精度时钟芯片DS3234。它是 是一款低成本、超高精度、采用 SPI™总线的实时时钟(RTC),集成了温度补偿晶体振荡器(TCXO)和晶体。DS3234 还集成了采用电池备份的 256 字节 SRAM。当主电源掉电时,通过连接至 V BAT 引脚的电源,内存上的内容得以保持。RTC 可以计数秒、分、时、星期、日期、月份和年份信息。对于少于 31 天的月份,器件能够在月末自动调整日期,同时带有闰年修正功能。该时钟可以工作在 24 小时或带/AM/PM 指示的 12 小时制式。器件提供每天两个可编程定时闹钟和一路可编程方波输出。地址和数据通过 SPI 双向总线串行传输。
KE0072.png

规格参数

  • 在 0°C 至+40°C 范围内,精度为±2ppm
  • 在-40°C 至+85°C 范围内,精度为±3.5ppm
  • 为不间断计时提供电池备份输入
  • 工作温度范围
  • 商业级:0°C 至+70°C
  • 工业级:-40°C 至+85°C
  • 低功耗
  • 实时时钟计数秒、分、时、星期、日期、月份和年份信息,具有有效至 2099 年的闰年补偿
  • 提供每天两个定时闹钟
  • 可编程方波输出
  • 4MHz SPI 接口,支持模式 1 和 3
  • 数字温度传感器输出:精度为±3°C


连接图

KE0072-1.png


测试代码

#include <SPI.h>
const int cs=10; //chip select
void setup() {
Serial.begin(9600);
RTC_init();
//day(1-31), month(1-12), year(0-99), hour(0-23), minute(0-59), second(0-59)
SetTimeDate(17,6,13,10,43,16);
}
void loop() {
Serial.println(ReadTimeDate());
delay(1000);
}
//=====================================
int RTC_init(){
pinMode(cs,OUTPUT); // chip select
// start the SPI library:
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE3); // both mode 1 & 3
//set control register
digitalWrite(cs, LOW);
SPI.transfer(0x8E);
SPI.transfer(0x60); //60= disable Osciallator and Battery
digitalWrite(cs, HIGH);
delay(10);
}
//=====================================
int SetTimeDate(int d, int mo, int y, int h, int mi, int s){
int TimeDate [7]={s,mi,h,0,d,mo,y};
for(int i=0; i<=6;i++){
if(i==3)
i++;
int b= TimeDate[i]/10;
int a= TimeDate[i]-b*10;
if(i==2){
if (b==2)
b=B00000010;
else if (b==1)
b=B00000001;
} 
TimeDate[i]= a+(b<<4);
digitalWrite(cs, LOW);
SPI.transfer(i+0x80);
SPI.transfer(TimeDate[i]);
digitalWrite(cs, HIGH);
}
}
//=====================================
String ReadTimeDate(){
String temp;
int TimeDate [7]; //second,minute,hour,null,day,month,year
for(int i=0; i<=6;i++){
if(i==3)
i++;
digitalWrite(cs, LOW);
SPI.transfer(i+0x00);
unsigned int n = SPI.transfer(0x00);
digitalWrite(cs, HIGH);
int a=n & B00001111;
if(i==2){ 
int b=(n & B00110000)>>4; //24 hour mode
if(b==B00000010)
b=20;
else if(b==B00000001)
b=10;
TimeDate[i]=a+b;
}
else if(i==4){
int b=(n & B00110000)>>4;
TimeDate[i]=a+b*10;
}
else if(i==5){
int b=(n & B00010000)>>4;
TimeDate[i]=a+b*10;
}
else if(i==6){
int b=(n & B11110000)>>4;
TimeDate[i]=a+b*10;
}
else{ 
int b=(n & B01110000)>>4;
TimeDate[i]=a+b*10; 
}
}
temp.concat(TimeDate[4]);
temp.concat("/") ;
temp.concat(TimeDate[5]);
temp.concat("/") ;
temp.concat(TimeDate[6]);
temp.concat("") ;
temp.concat(TimeDate[2]);
temp.concat(":") ;
temp.concat(TimeDate[1]);
temp.concat(":") ;
temp.concat(TimeDate[0]);
return(temp);
}

测试结果

按照上图接好线,烧录好代码,上电后,打开串口监视器,设置波特率9600,即可看到设置时间日期,如下图。
KE0072-2.png


相关库文件链接

http://url.cn/4AQUtuL