Arduinoで遊ぼう - リアルタイムクロック
Posted by arms22 on 2009年05月04日

秋月電子のリアルタイムクロックモジュールをArduinoで使ってみました。このモジュールはセイコーのリアルタイムクロックIC「RTC-8564NB」を搭載している。IC内に高精度クリスタルが内蔵されているので正確な時間を得ることができる。ICの詳細はメーカのリファレンスシートを参照してほしい。
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
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をはじめよう
posted with amazlet at 09.05.04
Massimo Banzi
オライリージャパン
売り上げランキング: 3668
価格: ¥ 2,100
オライリージャパン
売り上げランキング: 3668
価格: ¥ 2,100
Ads by Google
27 Comments
なんて良いタイミングでw
ちょうどmake:tokyo用に作っていたものに秋月RTC使おうと工作していました。
使用させていただきます。
見学として行くので是非のぞきに行きます。
ちょうどmake:tokyo用に作っていたものに秋月RTC使おうと工作していました。
使用させていただきます。
見学として行くので是非のぞきに行きます。
やや、これはどうもです。
RTCは電光掲示板で必要だったので使ってみました。
MTM03来られるんですね~
ブースでお待ちしております。
お茶は出ませんがw
RTCは電光掲示板で必要だったので使ってみました。
MTM03来られるんですね~
ブースでお待ちしております。
お茶は出ませんがw
秋月のRTCキットをArduinoで使用する方法を検索していたら、こちらにたどり着きました。
ありがたく、ライブラリをダウンロードさせていただきました。
ライブラリについて質問があります。
init()やsync()で、RTCの動作を停止させるために0x00のあとに0x04を送っていますが、私が先日購入した秋月のRTC(RTC-8564NB)付属のデータシートを見ると、STOPはbit5になっています。
0x04だとbit6がセットされてしまいますので、私が購入したRTCの場合は、0x04を0x02に修正した方がいいのでしょうか?
ありがたく、ライブラリをダウンロードさせていただきました。
ライブラリについて質問があります。
init()やsync()で、RTCの動作を停止させるために0x00のあとに0x04を送っていますが、私が先日購入した秋月のRTC(RTC-8564NB)付属のデータシートを見ると、STOPはbit5になっています。
0x04だとbit6がセットされてしまいますので、私が購入したRTCの場合は、0x04を0x02に修正した方がいいのでしょうか?
TOM.Yさん
ご指摘ありがとうございます。
それはライブラリのバグなので修正してご利用ください。
お手数おかけして申し訳ないです。。
そのうち修正して再度アップします。
ご指摘ありがとうございます。
それはライブラリのバグなので修正してご利用ください。
お手数おかけして申し訳ないです。。
そのうち修正して再度アップします。
調べていただき、ありがとうございます。
おかげさまでRTCから時刻の取得と設定ができましたし、Wireライブラリの使い方もわかりました。これからバックアップ回路も組んでみたいと思います。ありがとうございました。
訂正
0x04 → 0x40
0x02 → 0x20
ですね。すみません…
おかげさまでRTCから時刻の取得と設定ができましたし、Wireライブラリの使い方もわかりました。これからバックアップ回路も組んでみたいと思います。ありがとうございました。
訂正
0x04 → 0x40
0x02 → 0x20
ですね。すみません…
このコメントは管理人のみ閲覧できます
確認しました。
回路図が逆になってました。。orz
RTCの5番がSDAで6番がSCLです。
すみません、後日修正しておきます。
回路図が逆になってました。。orz
RTCの5番がSDAで6番がSCLです。
すみません、後日修正しておきます。
確認ありがとうございます。
これで安心してはんだ付けできます。
プログラムが組める電子ブロックみたいな感覚でArduino使ってます。
電子回路はまったくの初心者なので、ほんとこのようなサイトの情報は参考になってます。
これで安心してはんだ付けできます。
プログラムが組める電子ブロックみたいな感覚でArduino使ってます。
電子回路はまったくの初心者なので、ほんとこのようなサイトの情報は参考になってます。
このコメントは管理人のみ閲覧できます
RTCのライブラリ、使わせていただいてます。ありがとうございます。
で、今まではArduino IDE 017の標準LCDライブラリを改造した
74HC164経由のLCD出力ライブラリで使ってました。
その時は問題なかったのですが、標準LCDライブラリに変更したら
Rtc.begin();の所から進まず、WDTにリセットを掛けられてしまっているようです。
74HC164経由LCDライブラリは標準LCDライブラリを削っただけで、
大したことはしていないはずで、こっちで動くのに標準で動かないのも
分からないです。
なにか、心当たりなどありましたら、アドバイスお願いします。
PS.回路図 直していただけるとありがたいです。
で、今まではArduino IDE 017の標準LCDライブラリを改造した
74HC164経由のLCD出力ライブラリで使ってました。
その時は問題なかったのですが、標準LCDライブラリに変更したら
Rtc.begin();の所から進まず、WDTにリセットを掛けられてしまっているようです。
74HC164経由LCDライブラリは標準LCDライブラリを削っただけで、
大したことはしていないはずで、こっちで動くのに標準で動かないのも
分からないです。
なにか、心当たりなどありましたら、アドバイスお願いします。
PS.回路図 直していただけるとありがたいです。
> その時は問題なかったのですが、標準LCDライブラリに変更したら
> Rtc.begin();の所から進まず、WDTにリセットを掛けられてしまっているようです。
メモリ不足になっていないか調べてみてください。
また、ArduinoならWDTを使っていないと思うので、
ハードウェア的な要因でリセットがかかっているのではないかと思います。
> PS.回路図 直していただけるとありがたいです。
後日修正しておきます。
> Rtc.begin();の所から進まず、WDTにリセットを掛けられてしまっているようです。
メモリ不足になっていないか調べてみてください。
また、ArduinoならWDTを使っていないと思うので、
ハードウェア的な要因でリセットがかかっているのではないかと思います。
> PS.回路図 直していただけるとありがたいです。
後日修正しておきます。
結局どうやらArduino IDE 0017のLCDライブラリが原因の様です。
0018から抜き出したライブラリに差し替えたら問題が解消されました。
また、自分の74HC164用改造ライブラリは、0017 LCDライブラリから使わない部分を削って軽量化してあり、
0017 LCDライブラリのバグ部分も削られていました。
という事で、一応解決の様です。
お騒がせしてすみませんでした。
0018から抜き出したライブラリに差し替えたら問題が解消されました。
また、自分の74HC164用改造ライブラリは、0017 LCDライブラリから使わない部分を削って軽量化してあり、
0017 LCDライブラリのバグ部分も削られていました。
という事で、一応解決の様です。
お騒がせしてすみませんでした。
はじめまして
私もニキシー管時計を製作し、RTCの制御ライブラリを使用させていただきました。
おかげさまで、RTCの制御が理解できました。
ありがとうございました。
私もニキシー管時計を製作し、RTCの制御ライブラリを使用させていただきました。
おかげさまで、RTCの制御が理解できました。
ありがとうございました。
このコメントは管理人のみ閲覧できます
本文と回路図の部品名称が異なっている部分を修正しました。
R4->R1
R5->R2
R6->R3
D3->D1
D4->D2
R4->R1
R5->R2
R6->R3
D3->D1
D4->D2
このコメントは管理人のみ閲覧できます
次のように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
時間は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
とても有益な情報をありがとうございます。
RTC8564ライブラリが本文中リンクよりダウンロードできませんでした。もう公開はしていないのでしょうか?
もし良ければ改めて公開していただけないでしょうか。
RTC8564ライブラリが本文中リンクよりダウンロードできませんでした。もう公開はしていないのでしょうか?
もし良ければ改めて公開していただけないでしょうか。
すぐ上のコメントのkenです。
RTC8564ライブラリを見つけることができました。
お手数をおかけしなくても何とかなりました。
使わせていただきます。ありがとうございます。
RTC8564ライブラリを見つけることができました。
お手数をおかけしなくても何とかなりました。
使わせていただきます。ありがとうございます。
場所を変えて再度アップロードしました。
http://code.google.com/p/arms22/downloads/detail?name=RTC8564-001.zip
http://code.google.com/p/arms22/downloads/detail?name=RTC8564-001.zip
はじめまして、
すみませんが小さい質問があります。
D1とD2はどんなシエナダイオードが必要ですか。
今日5.1V 5っを買いました、でも心配してます。
大丈夫ですか。他の方は必要ですか。
すみませんが小さい質問があります。
D1とD2はどんなシエナダイオードが必要ですか。
今日5.1V 5っを買いました、でも心配してます。
大丈夫ですか。他の方は必要ですか。
VFが小さいダイオード(ショットキー)ならなんでも良いとおもいます。
時刻設定、PCから設定できるようにできますか?
あと、時刻設定の関数(でいいのですか?)はあるのでしょうか?
あと、時刻設定の関数(でいいのですか?)はあるのでしょうか?
できると思いますよー。
PCからシリアルで時刻情報を送って、Arduino側で受けて設定すればいいんじゃないかなー。
PCからシリアルで時刻情報を送って、Arduino側で受けて設定すればいいんじゃないかなー。
とても参考なる回路ありがとうございます。
Leave a reply
該当の記事は見つかりませんでした。