Search

2012年1月20日 星期五

Arduino - DS1307時鐘IC

前言:

    DS1307是一顆萬年曆時鐘IC,用I2C作資料傳輸的介面,接法很簡單(如下圖)只要把SDA、SCL分別接上Arduino analog pin 4、5即可,晶體振盪器是32.768Khz音叉式,然後VCC接上Arduino的5V電壓Vbat接上3V電池接著地共接即可,至於電阻可有可無我都接220ohm,其實這是接下來要作Arduino版本的真空管時鐘要用的。

    要注意的是,假設你要直接用I2C操作,則每次讀寫都要先寫入0x00,用來重置register pointer,因為register pointer在操作時會一直累加。而記得在一開始時初始化address 0x00 bit7 = CH使時鐘運作,ex:register pointer = 0X00,I2C.Write(0x7F & sec);




實驗:



程式:



#include <WProgram.h>


#include <Wire.h>

void setup()
{
  Serial.begin(9600);
  
  RTC.stop();
  RTC.set(DS1307_SEC,1);
  RTC.set(DS1307_MIN,23);
  RTC.set(DS1307_HR,12);
  RTC.set(DS1307_DOW,4);
  RTC.set(DS1307_DATE,15);
  RTC.set(DS1307_MTH,7);
  RTC.set(DS1307_YR,10);
  RTC.start();

}

void loop()
{
  
  Serial.print(RTC.get(DS1307_HR,true));
  Serial.print(":");
  Serial.print(RTC.get(DS1307_MIN,false));
  Serial.print(":");
  Serial.print(RTC.get(DS1307_SEC,false));
  Serial.print(" ");
  Serial.print(RTC.get(DS1307_DATE,false));
  Serial.print("/");
  Serial.print(RTC.get(DS1307_MTH,false));
  Serial.print("/");
  Serial.print(RTC.get(DS1307_YR,false));
  Serial.println();
  
  delay(1000);
}




2 則留言:

  1. 您好!我目前正要著手時鐘IC與Arduino的實作練習
    但我實作需求希望到微秒的部分,請問DS1307有著個部份嗎?
    年 月 日 時 分 秒 微秒
    希望能顯示 2012/08/08 12:30:15:00
    2012/08/08 12:30:15:01
    2012/08/08 12:30:15:02
    或是有推薦的其他IC嗎?

    回覆刪除
  2. 作者已經移除這則留言。

    回覆刪除