MCookie-RTC/zh

来自Microduino Wikipedia
WikiLK讨论 | 贡献2017年7月19日 (三) 10:42的版本 测试掉电续时
跳转至: 导航搜索
Language English
mCookie-RTC

mCookie-RTC模块是时钟模块,可获取时间,采用IIC接口通信。 超级电容提供了一定的掉电计时能力,断电后时钟芯片还可运行。






特色

  • 带有世纪标志、秒、分、时、日、星期、月、年;
  • 采用I2C接口与核心模块通信;
  • 带I2C接口的EEPROM存储芯片;
  • 时钟芯片功耗低,典型电流值为0.25μA,外加超级电容,掉电后时钟芯片依然运行;

规格

  • 时钟芯片:PCF8563
    • 低功耗的CMOS 实时时钟/日历芯片;
    • 提供一个可编程时钟输出,一个中断输出和掉电检测器,所有的地址和数据通过I2C总线接口串行传递;
    • 最大总线速度为400Kbits/s,每次读写数据后,内嵌的字地址寄存器会自动产生增量。
  • EEPROM存储芯片:AT24C32
    • 提供32768位的串行电可擦写可编程只读存储器,组织形式为4096字×8位字长;
    • AT24C32的级联特性允许在同一I2C总线上挂接8个器件,百万次的复写周期和100年的保存年限,并带有写保护功能。
  • 超级电容:XH414
    • 提供一定时间的掉电计时功能。
mCookie-RTC-Pinout1

开发

需要_06_Microduino_RTC_PCF8563库支持,库文件路径:(安装地址)\Microduino-IDE\hardware\Microduino\avr\libraries

Microduino-libraries.jpg

应用

时间获取
mWatch手表
算数闹钟
吼叫闹钟

测试掉电续时

#include <Wire.h>
#include <Rtc_Pcf8563.h>

//init the real time clock
Rtc_Pcf8563 rtc;

void setup()
{
  Serial.begin(9600);
  settime(2017, 8, 10, 4, 15, 57, 36);//年,月,日,星期,时,分,秒
}

void loop()
{
  //both format functions call the internal getTime() so that the
  //formatted strings are at the current time/date.
  Serial.println("CODE_1:");
  Serial.print(rtc.formatDate());//获取日期
  Serial.print("    ");
  Serial.println(rtc.formatTime());//获取时间

  Serial.println("CODE_2:");
  Serial.print(rtc.getYear());//获取年
  Serial.print("/");
  Serial.print(rtc.getMonth());//获取月
  Serial.print("/");
  Serial.print(rtc.getDay());//获取日
  Serial.print("     ");
  Serial.print(rtc.getHour());//获取时
  Serial.print(":");
  Serial.print(rtc.getMinute());//获取分
  Serial.print(":");
  Serial.println(rtc.getSecond());//获取秒

  delay(1000);
  Serial.print("\r\n");
}
void settime(int _year, int _month, int _day, int _week, int _hour, int _min, int _sec)
{
  //clear out the registers
  rtc.initClock();
  //set a time to start with.
  //day, weekday, month, century(1=1900, 0=2000), year(0-99)
  rtc.setDate(_day, _week, _month, 0, _year);
  //hr, min, sec
  rtc.setTime(_hour, _min, _sec);
}
  • 下载程序
    • 将mCookie-BT与mCookie-CoreUSB两个模块叠在一起,将USB线插入mCookie-CoreUSB的插孔,另一端连接电脑USB插口;
    • 启动Arduino IED,将上面程序复制到IDE中,在“settime(15, 8, 10, 4, 15, 57, 36);”中设置当前时间;
    • 在工具(tools)->板卡(Board)中选择Microduino CoreUSB,并在工具(tools)->串口(Serial)中选择对应的串口号;
    • 点击IDE左上角的编译(√)按钮对程序进行编译,编译结束后点击下载(->)按钮将程序烧录到板子中;
  • 结果
    • 程序下载后,打开串口监视器,可看到时间。
MCookie-RTC-res.jpg
    • 在“settime(15, 8, 10, 4, 15, 57, 36);”前加两个“//”注释掉函数,重新下载程序。打开串口监视器,可看到时间。
    • 切断电源,等一段时间(几分钟)后接到电脑,打开串口监视器,显示时间是掉电后继续运行的时间,而不是初始化设置得时间;
    • (注意:RTC是可编程时钟输出,通过settime()函数来设置时间,下载完毕后注释掉settime()函数再下载一次程序才能掉电继续计时,不然上电重启之后又恢复设置得值)

测试EEPROM读写

#include <EEPROM.h>

long randNumber, data; //定义随机变量使用数据名称

//EEPROM配置
#define EEPROM_write(address, p) {int i = 0; byte *pp = (byte*)&(p);for(; i < sizeof(p); i++) EEPROM.write(address+i, pp[i]);}
#define EEPROM_read(address, p)  {int i = 0; byte *pp = (byte*)&(p);for(; i < sizeof(p); i++) pp[i]=EEPROM.read(address+i);}

//定义EEPROMdata
struct config_type
{
  int EEPROMdata;
};

void setup()
{
  Serial.begin(115200);
  /*EEPROM读取赋值*/
  config_type config_readback;
  EEPROM_read(0, config_readback);
  data = config_readback.EEPROMdata;
}
void loop()
{
  randNumber = random(10, 100);//随机函数,randNumber的值从10到99变化
  delay(1000);//每隔1s刷新一次
  if (randNumber != data) //判断EEPROM数据是否变化,变化则写入
    eeprom_write();//EEPROM写入函数
  Serial.print("EEPROM Write:");
  Serial.println(randNumber);
  Serial.print("EEPROM Read:");
  Serial.println(data);
  delay(1000);
  Serial.println("");
}

//=======================EEPROM写函数===========================//
void eeprom_write()
{
  config_type config;                  // 定义结构变量config,并定义config的内容
  config.EEPROMdata = randNumber;
  EEPROM_write(0, config);         // 变量config存储到EEPROM,地址0写入
}
  • 将上述程序复制到IDE,下载程序,打开串口监视器,可以看到EEPROM写入的数据和读出的数据。
MCookie-RTC-eeprom.jpg
  • 在测试过程中拔掉电源后插上电源,打开串口监视器可以看到“EEPROM Read”的数据为最后写入的“EEPROM Write”值。

图库

Front
Back