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;

使用者可以取出裡面的內容使用