用户名 立即注册 找回密码

微雪课堂

搜索
微雪课堂 外围模块 Accessory Shield 查看内容

Accessory Shield学习7:高精度实时时钟(DS3231)

2015-5-7 15:38| 发布者: yanwl| 查看: 4679| 评论: 0

摘要: 本章讲一个跟小伙伴生活息息相关的技能——时钟!原理大放送: 主角名叫DS3231,是一款低成本、高精度 I2C 实时时钟( RTC),具有集成的温补晶体振荡器( TCXO)和晶体。该器件包含电池输入端,断开主电源时仍可保 ...
本章讲一个跟小伙伴生活息息相关的技能——时钟!

原理大放送:
主角名叫DS3231,是一款低成本、高精度 I2C 实时时钟( RTC),具有集成的温补晶体振荡器( TCXO和晶体。该器件包含电池输入端,断开主电源时仍可保持精确的计时。集成的晶体振荡器大大提高了器件的长期精确度。该时钟可以记录秒、分、时、星期、日期、月和年信息,少于 31 天的月份,将自动调整月末日期,包括闰年补偿。
芯片特性:
  • 工作电压:2.3V -- 5.5V
  • 工作温度范围:0℃ - 70℃(商用级),-40℃ - 85℃(工业级)
  • 0℃ - 40℃精度为±2ppm
  • -40℃ - 85℃精度为±3.5ppm 
关于它的精度,通俗来讲就是:每天的计时误差在0.3秒以内,一年不超过2分钟!

应用电路非常简单,只需要一个电源滤波电容即可,编程时注意硬件地址


代码示例:

001#include "Wire.h"
002#include "ds3231.h"
003 
004#define BUFF_MAX 128
005#define CMD_BUFF 20
006 
007uint8_t time[8];
008unsigned long prev, interval = 1000;
009struct ts t;
010 
011char cmd_buff[CMD_BUFF];
012unsigned char count = 0, time_tick;
013unsigned char cmd_flag = 0;
014unsigned char u8_temp, i;
015unsigned short u16_temp;
016 
017void setup()
018{
019    Serial.begin(9600);
020    Wire.begin();
021    DS3231_init(DS3231_INTCN);                                          //interrupt enable
022}
023 
024void loop()
025{
026    char in;
027    char buff[BUFF_MAX];
028    unsigned long now = millis();
029 
030    // show time once in a while
031    if ((now - prev) > interval)
032    {
033        DS3231_get(&t);
034         
035        snprintf(buff, BUFF_MAX, "%d.%02d.%02d %02d:%02d:%02d", t.year,
036             t.mon, t.mday, t.hour, t.min, t.sec);
037              
038        Serial.println(buff);
039        prev = now;
040         
041        time_tick++;
042    }
043     
044    /*
045    error process
046    */
047    if((time_tick >= 2) && (cmd_flag == 1))
048    {
049      cmd_flag = 0;
050      count = 0;
051    }
052         
053    /*
054    if conf time and date
055    */
056    if(Serial.available())
057    {
058      if(cmd_flag == 0)
059      {
060        in = Serial.read();
061        if(in == '0')
062        {
063          cmd_flag = 1;
064          time_tick = 0;
065        }
066      }
067      else
068      {
069        cmd_buff[count++] = Serial.read();
070        if(count >= 14)                                    //decode and set time
071        {
072          cmd_flag = 0;
073          count = 0;
074           
075          for(i = 0; i < 14; i++)
076          {
077            cmd_buff[i] -= '0';
078          }
079          /*
080          year
081          */
082          u16_temp = 0;
083          u16_temp += cmd_buff[0] * 1000;
084          u16_temp += cmd_buff[1] * 100;
085          u16_temp += cmd_buff[2] * 10;
086          u16_temp += cmd_buff[3];
087          t.year = u16_temp;
088           
089          /*
090          month
091          */
092          u8_temp = 0;
093          u8_temp += cmd_buff[4] * 10;
094          u8_temp += cmd_buff[5];
095          t.mon = u8_temp;
096           
097          /*
098          day
099          */
100          u8_temp = 0;
101          u8_temp += cmd_buff[6] * 10;
102          u8_temp += cmd_buff[7];
103          t.mday = u8_temp;
104           
105          /*
106          hour
107          */
108          u8_temp = 0;
109          u8_temp += cmd_buff[8] * 10;
110          u8_temp += cmd_buff[9];
111          t.hour = u8_temp;
112           
113          /*
114          minute
115          */
116          u8_temp = 0;
117          u8_temp += cmd_buff[10] * 10;
118          u8_temp += cmd_buff[11];
119          t.min = u8_temp;
120           
121          /*
122          second
123          */
124          u8_temp = 0;
125          u8_temp += cmd_buff[12] * 10;
126          u8_temp += cmd_buff[13];
127          t.sec = u8_temp;
128           
129          DS3231_set(t);
130        }
131      }
132    }
133}

下载程序后打开串口调试助手,这个程序的功能比较腻害!提供两个功能:通过串口显示当前的时间;可以通过串口设置新的时间!重点讲下设置时间方式:

1 号箭头位置是待设置的新时间: 020150207143000,第 1 个字符为 0,后面跟年(2015)、月 (02)、日 (07)、时(14)、分(30)、秒(00)15 个字符, 输入完毕后,点击 2 号箭头发送,会看到新的时间已经写入。 注意:时间格式为 24 小时制;数据长度必须为 15 个字符,例如 2 月需要写成 02,其他数据段写法类似。


附件:

ds3231.zip


190

顶一下

刚表态过的朋友 (190 人)

相关阅读

最新评论

微雪官网|产品资料|手机版|小黑屋|微雪课堂. ( 粤ICP备05067009号 )

GMT+8, 2025-4-8 01:54 , Processed in 0.030832 second(s), 28 queries .

返回顶部