なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

Arduinoで遊ぼう - リアルタイムクロック

Posted by arms22 on 2009年05月04日 27  1

秋月電子のリアルタイムクロックモジュールをArduinoで使ってみました。このモジュールはセイコーのリアルタイムクロックIC「RTC-8564NB」を搭載している。IC内に高精度クリスタルが内蔵されているので正確な時間を得ることができる。ICの詳細はメーカのリファレンスシートを参照してほしい。

Arduinoと接続する



Real Time Clock Module with Arduino
リアルタイムクロックモジュールとArduinoの接続にはI2Cバスを使う。ArduinoのI2Cバスはアナログ入力の4番と5番にある。R1、R2はI2Cバスのプルアップ抵抗だ。
回路図には5V1Fの電気二重層コンデンサを使ったバックアップ回路をのせている。R3はコンデンサの充電電流を制限するための抵抗、D1はコンデンサの電気がArduino側に逆流するのを防ぐ為のダイオード、D2はR3をパイパスする。


RTC8564ライブラリをダウンロードする


例によってまたライブラリを作ったので公開する。
http://code.google.com/p/arms22/downloads/detail?name=RTC8564-001.zip
http://xfind.hp.infoseek.co.jp/electric/arduino/RTC8564001.zip


RTC8564ライブラリの使い方


1.RTC8564ライブラリをarduino-00xx/hardware/libraries/以下にコピーする。
2.新しいスケッチを作成する。
3.メニューからSketch > Import Library > Wireを選択する。
4.メニューからSketch > Import Library > RTC8564を選択する。
※Wireライブラリのインポートも必要

サンプルスケッチ


#include <Wire.h>
#include <RTC8564.h>

void setup()
{
  Serial.begin(9600);
  Rtc.begin();
}

void loop()
{
  delay(1000);
  Rtc.available();
  
  Serial.print(0x2000+Rtc.years(),HEX);
  Serial.print("/");
  Serial.print(Rtc.months(),HEX);
  Serial.print("/");
  Serial.print(Rtc.days(),HEX);
  Serial.print(" ");
  Serial.print(Rtc.hours(),HEX);
  Serial.print(":");
  Serial.print(Rtc.minutes(),HEX);
  Serial.print(":");
  Serial.println(Rtc.seconds(),HEX);
}

available関数でリアルタイムクロックICから時間情報を読み込む。読み込んだ時間情報はyears()、months()、days()、hours()、minutes()、seconds()を使って取得する。これらの関数は時間をBCDフォーマットで返す。Decimalフォーマットで返す必要がある場合、次のようにRTC8564::Decimalを引数に渡す。
Rtc.seconds(RTC8564::Decimal)



Arduinoをはじめよう
Arduinoをはじめよう
posted with amazlet at 09.05.04
Massimo Banzi
オライリージャパン
売り上げランキング: 3668
価格: ¥ 2,100



Ads by Google

27 Comments

hsgw(LED CUBEの人) says..."おお!"
なんて良いタイミングでw
ちょうどmake:tokyo用に作っていたものに秋月RTC使おうと工作していました。
使用させていただきます。
見学として行くので是非のぞきに行きます。
2009.05.14 14:45 | URL | #- [edit]
arms22 says..."No title"
やや、これはどうもです。
RTCは電光掲示板で必要だったので使ってみました。

MTM03来られるんですね~
ブースでお待ちしております。
お茶は出ませんがw
2009.05.14 23:04 | URL | #j7sy4omY [edit]
TOM.Y says..."ありがとうございます"
秋月のRTCキットをArduinoで使用する方法を検索していたら、こちらにたどり着きました。
ありがたく、ライブラリをダウンロードさせていただきました。

ライブラリについて質問があります。
init()やsync()で、RTCの動作を停止させるために0x00のあとに0x04を送っていますが、私が先日購入した秋月のRTC(RTC-8564NB)付属のデータシートを見ると、STOPはbit5になっています。
0x04だとbit6がセットされてしまいますので、私が購入したRTCの場合は、0x04を0x02に修正した方がいいのでしょうか?
2009.08.15 11:26 | URL | #- [edit]
arms22 says..."No title"
TOM.Yさん

ご指摘ありがとうございます。
それはライブラリのバグなので修正してご利用ください。
お手数おかけして申し訳ないです。。

そのうち修正して再度アップします。
2009.08.16 10:05 | URL | #j7sy4omY [edit]
TOM.Y says..."No title"
調べていただき、ありがとうございます。
おかげさまでRTCから時刻の取得と設定ができましたし、Wireライブラリの使い方もわかりました。これからバックアップ回路も組んでみたいと思います。ありがとうございました。

訂正
0x04 → 0x40
0x02 → 0x20
ですね。すみません…
2009.08.16 12:51 | URL | #- [edit]
says..."管理人のみ閲覧できます"
このコメントは管理人のみ閲覧できます
2009.10.14 15:51 | | # [edit]
arms22 says..."Re: SCA/SDA"
確認しました。
回路図が逆になってました。。orz
RTCの5番がSDAで6番がSCLです。
すみません、後日修正しておきます。
2009.10.15 08:50 | URL | #- [edit]
ゆたかの says..."Re: SCA/SDA"
確認ありがとうございます。
これで安心してはんだ付けできます。
プログラムが組める電子ブロックみたいな感覚でArduino使ってます。
電子回路はまったくの初心者なので、ほんとこのようなサイトの情報は参考になってます。
2009.10.15 19:52 | URL | #AbZbc6b6 [edit]
says..."管理人のみ閲覧できます"
このコメントは管理人のみ閲覧できます
2010.01.10 23:26 | | # [edit]
まりす says..."液晶ライブラリとの相性"
RTCのライブラリ、使わせていただいてます。ありがとうございます。
で、今まではArduino IDE 017の標準LCDライブラリを改造した
74HC164経由のLCD出力ライブラリで使ってました。
その時は問題なかったのですが、標準LCDライブラリに変更したら
Rtc.begin();の所から進まず、WDTにリセットを掛けられてしまっているようです。
74HC164経由LCDライブラリは標準LCDライブラリを削っただけで、
大したことはしていないはずで、こっちで動くのに標準で動かないのも
分からないです。
なにか、心当たりなどありましたら、アドバイスお願いします。

PS.回路図 直していただけるとありがたいです。

2010.04.02 01:55 | URL | #- [edit]
arms22 says..."Re: 液晶ライブラリとの相性"
> その時は問題なかったのですが、標準LCDライブラリに変更したら
> Rtc.begin();の所から進まず、WDTにリセットを掛けられてしまっているようです。

メモリ不足になっていないか調べてみてください。
また、ArduinoならWDTを使っていないと思うので、
ハードウェア的な要因でリセットがかかっているのではないかと思います。


> PS.回路図 直していただけるとありがたいです。

後日修正しておきます。
2010.04.02 09:27 | URL | #- [edit]
まりす says..."液晶ライブラリとの相性解決"
結局どうやらArduino IDE 0017のLCDライブラリが原因の様です。
0018から抜き出したライブラリに差し替えたら問題が解消されました。
また、自分の74HC164用改造ライブラリは、0017 LCDライブラリから使わない部分を削って軽量化してあり、
0017 LCDライブラリのバグ部分も削られていました。
という事で、一応解決の様です。
お騒がせしてすみませんでした。
2010.04.02 21:21 | URL | #- [edit]
kanon700 says..."No title"
はじめまして
私もニキシー管時計を製作し、RTCの制御ライブラリを使用させていただきました。
おかげさまで、RTCの制御が理解できました。
ありがとうございました。
2010.05.24 17:36 | URL | #- [edit]
says..."管理人のみ閲覧できます"
このコメントは管理人のみ閲覧できます
2010.06.23 17:09 | | # [edit]
arms22 says..."Re: 回路図の部品表記について"
本文と回路図の部品名称が異なっている部分を修正しました。
R4->R1
R5->R2
R6->R3
D3->D1
D4->D2
2010.06.25 00:14 | URL | #- [edit]
says..."管理人のみ閲覧できます"
このコメントは管理人のみ閲覧できます
2010.10.28 14:22 | | # [edit]
arms22 says..."Re: RTCへの日時設定方法は?"
次のように7バイトの配列を用意して、時間を書き込み、sync関数で設定してください。
時間はBCDフォーマットで指定する必要があります。

byte date_and_time[7];

date_and_time[0] = 0x59; // 59秒
date_and_time[1] = 0x59; // 59分
date_and_time[2] = 0x12; // 12時
date_and_time[3] = 0x31; // 31日
date_and_time[4] = 0x00; // 日曜日
date_and_time[5] = 0x12; // 12月
date_and_time[6] = 0x99; // 1900 + 99 = 1999

Rtc.sync(date_and_time);


詳細はアプリケーションノートを参照してください。

http://ndap3-net.ebz.epson.co.jp/w/www/PDFS/epdoc_qd.nsf/476ea3d67f5f3e5649256a7e002aab9f/1dafda8d3c66a9c94925707d003e5f7d/$FILE/ETM11J-06_R8564JENB.pdf
2010.10.29 11:32 | URL | #- [edit]
I.A. says..."No title"
 さっそくありがとうございます。NTPからのデータをBCDに変換するところから取りかかります。
2010.10.30 20:38 | URL | #eNWB8Zlg [edit]
ken says..."No title"
とても有益な情報をありがとうございます。
RTC8564ライブラリが本文中リンクよりダウンロードできませんでした。もう公開はしていないのでしょうか?
もし良ければ改めて公開していただけないでしょうか。
2010.11.23 16:58 | URL | #mQop/nM. [edit]
ken says..."No title"
すぐ上のコメントのkenです。
RTC8564ライブラリを見つけることができました。
お手数をおかけしなくても何とかなりました。
使わせていただきます。ありがとうございます。
2010.11.23 22:49 | URL | #mQop/nM. [edit]
arms22 says..."Re: No title"
場所を変えて再度アップロードしました。
http://code.google.com/p/arms22/downloads/detail?name=RTC8564-001.zip
2010.11.24 00:22 | URL | #- [edit]
ken says..."No title"
早速にも再アップロードのご対応ありがとうございます。
時刻のセットも完了し、順調に稼働しています。
2010.11.24 10:44 | URL | #- [edit]
ギョーム says..."No title"
はじめまして、

すみませんが小さい質問があります。
D1とD2はどんなシエナダイオードが必要ですか。
今日5.1V 5っを買いました、でも心配してます。
大丈夫ですか。他の方は必要ですか。
2011.06.21 19:41 | URL | #6O3eNixM [edit]
arms22 says..."Re: No title"
VFが小さいダイオード(ショットキー)ならなんでも良いとおもいます。
2011.06.21 23:08 | URL | #- [edit]
にょふにょふ says..."No title"
時刻設定、PCから設定できるようにできますか?
あと、時刻設定の関数(でいいのですか?)はあるのでしょうか?
2012.09.21 17:39 | URL | #- [edit]
arms22 says..."Re: No title"
できると思いますよー。
PCからシリアルで時刻情報を送って、Arduino側で受けて設定すればいいんじゃないかなー。
2012.09.21 23:06 | URL | #- [edit]
のりこ says..."No title"
とても参考なる回路ありがとうございます。
2013.10.27 16:12 | URL | #zliNgu6s [edit]

Leave a reply






管理者にだけ表示を許可する

該当の記事は見つかりませんでした。