Ameba Arduino: [RTL8195] [RTL8710] RTC – 读取 DS1307/DS3231 RTC 时间模组

材料准备

  • Ameba x 1
  • DS1307/DS3231 RTC x 1

范例说明

DS1307是常见的RTC IC,像是TinyRTC就使用DS1307。如果需要高精准度的RTC,可以使用DS3231。请先下载DS1307RTC library:
https://github.com/Ameba8195/Arduino/raw/master/libraries/DS1307RTC-1.0.0.zip
另外时间格式的部分会用到Time library:
https://github.com/Ameba8195/Arduino/raw/master/libraries/Time-1.0.0.zip

安装library的方式请参考Arduino官方网站的教学文章将zip档的library加入Ameba:
https://www.arduino.cc/en/Guide/Libraries#toc4

这个library支援了DS1307, DS1337 以及 DS3231。使用的介面为I2C,工作电​​压为3.3V
请打开范例 “File” -> “Examples” -> “AmebaDS1307RTC” -> “ReadTest”
这个范例会从 DS1307/DS3231读取时间,如果使用的模组是TinyRTC (DS1307),接线如下:
1

如果是DS3231,接线如下:
2

RTL8710,接线如下:
2

然后我们编译程式,并上传至Ameba,完成之后按下Reset按钮,可以在Serial Monitor看到底下的log:
3

程式码说明

在loop()的地方宣告了tmElements_t的struct型态的变数,用来保存时间相关的内容

tmElements_t tm;

接着呼叫RTC.read()将时间资讯填入tmElements_t的变数里

RTC.read(tm)

tmElements_t的资料成员:

typedef struct  { 
  uint8_t Second; 
  uint8_t Minute; 
  uint8_t Hour; 
  uint8_t Wday;   // day of week, sunday is day 1
  uint8_t Day;
  uint8_t Month; 
  uint8_t Year;   // offset from 1970; 
}  tmElements_t, TimeElements, *tmElementsPtr_t;

使用者可以取出里面的内容使用