秋月のリアルタイムクロック(RTC)モジュール

公開日: 電子工作 | , ,

今回は秋月電子のI2C接続のリアルタイムクロック(RTC)モジュールを買ったので、ちょっと試してみました。

RTCモジュールは、これ単独で時刻やカレンダーを計時・保持してくれる便利なモジュールです。

 

AE-RX-8025NB

秋月電子 リアルタイムクロック(RTC)モジュール

買ったのはこれです。

RX-8025NB使用 I2C接続リアルタイムクロック(RTC)モジュール – 秋月電子通商

値段が450円とリーズナブルなのと、電源電圧の範囲がとても広いのが、個人的に嬉しい特徴。

秋月電子 リアルタイムクロック(RTC)モジュール

仕様

計時(保持)電圧:1.15~5.5V
インターフェース:I2C
インターフェース電圧:1.7~5.5V
I2Cアドレス:0×32(固定)
I2Cスピード: 最大400kHz

モジュールの基板上には、I2Cプルアップ用抵抗(2.2kΩ)とINTAの表示用の赤色LEDが実装されていて、これらは半田ジャンパーで有効・無効が選べます。
ですが、バックアップ用のバッテリー接続は考慮されてなくて、どうせなら抵抗とかLEDを実装するよりダイオードとか入れててもらえた方が有りがたいなぁなんて思う次第。

 

Arduinoでテスト

例のごとくArduinoで試してみる。

秋月電子 リアルタイムクロック(RTC)モジュール

回路は、前回試したキャラクタ液晶を接続している状態で、RTCのVDD・SCL・SDA・GNDをArduinoの5V・A5・A4・GNDにそれぞれ繋ぎました。

Arduinoのソースは

#include <Wire.h><br />
#define LCD_ADRS  0x3E<br />
#define RTC_ADRS  0x32<br />
// SCL=A5 SDA=A4<br />
<br />
void setup()<br />
{<br />
  pinMode(13, OUTPUT);<br />
  Wire.begin();<br />
 <br />
  Wire.beginTransmission(RTC_ADRS);<br />
  Wire.write(0xE0);<br />
  Wire.write(0x20);  //24hourMode<br />
  Wire.write(0x00);  // PON Clear<br />
  Wire.endTransmission();<br />
  delay(1);<br />
 <br />
  Wire.beginTransmission(RTC_ADRS);<br />
  Wire.write(0x00);<br />
  Wire.write(0x55);  //sec<br />
  Wire.write(0x59);  //min<br />
  Wire.write(0x23);  //hour<br />
  Wire.write(0x00);  //week<br />
  Wire.write(0x31);  //day<br />
  Wire.write(0x12);  //month<br />
  Wire.write(0x15);  //year<br />
  Wire.endTransmission();<br />
  delay(1);<br />
  <br />
  LCD_init();<br />
}<br />
<br />
void loop()<br />
{<br />
  digitalWrite(13, HIGH);<br />
<br />
  byte seconds,minutes,hours,days,months,years;<br />
  Wire.requestFrom(RTC_ADRS,8);<br />
<br />
  Wire.read();<br />
  seconds = Wire.read();<br />
  minutes = Wire.read();<br />
  hours = Wire.read();<br />
  Wire.read();<br />
  days = Wire.read();<br />
  months = Wire.read();<br />
  years = Wire.read();<br />
<br />
  LCD_command(0x80|0x00);<br />
  <br />
  LCD_write('0'+(years>>4));<br />
  LCD_write('0'+(years&0xF));<br />
  LCD_write('/');<br />
  LCD_write('0'+(months>>4));<br />
  LCD_write('0'+(months&0xF));<br />
  LCD_write('/');<br />
  LCD_write('0'+(days>>4));<br />
  LCD_write('0'+(days&0xF));<br />
  <br />
  LCD_command(0x80|0x40);<br />
  <br />
  LCD_write('0'+(hours>>4));<br />
  LCD_write('0'+(hours&0xF));<br />
  LCD_write(':');<br />
  LCD_write('0'+(minutes>>4));<br />
  LCD_write('0'+(minutes&0xF));<br />
  LCD_write(':');<br />
  LCD_write('0'+(seconds>>4));<br />
  LCD_write('0'+(seconds&0xF));<br />
  <br />
  digitalWrite(13, LOW);<br />
  delay(100);<br />
}<br />
<br />
void LCD_write(byte t_data)<br />
{<br />
  Wire.beginTransmission(LCD_ADRS);<br />
  Wire.write(0x40);<br />
  Wire.write(t_data);<br />
  Wire.endTransmission();<br />
  delay(1);<br />
}<br />
<br />
void LCD_command(byte t_command)<br />
{<br />
  Wire.beginTransmission(LCD_ADRS);<br />
  Wire.write(0x00);<br />
  Wire.write(t_command);<br />
  Wire.endTransmission();<br />
  delay(10);<br />
}<br />
<br />
void LCD_init()<br />
{<br />
  LCD_command(0x38);<br />
  LCD_command(0x39);<br />
  LCD_command(0x14);<br />
  LCD_command(0x73);<br />
  LCD_command(0x52);  // 5V<br />
  //LCD_command(0x56);  // 3V<br />
  LCD_command(0x6C);<br />
  LCD_command(0x38);<br />
  LCD_command(0x01);<br />
  LCD_command(0x0C);<br />
}<br />

秋月電子 リアルタイムクロック(RTC)モジュール

このプログラムを実行すると、5秒後に2015年から2016年への年変りの瞬間が見られます。

注意点

RTCモジュールから値を読み込む時、読み込みアドレスを指定せずに読み込みを始めると、アドレス0xFから読み込まれます。
先のプログラムのloop()内では、この機能を利用して日付と時間の値を読み込んでいます。

また、アドレスを指定して読み込む時には、アドレス書き込み後にストップコンディションを送ってしまうと、アドレス指定が無効になってしまいます。(←ハマりポイントでした)

Wire.beginTransmission(RTC_ADRS);<br />
Wire.write(0xE0); // Control1<br />
Wire.endTransmission(false);<br />
Wire.requestFrom(RTC_ADRS,1);<br />
con1= Wire.read();<br />

このように、Wire.endTransmission(false)でfalseを付けて、ストップコンディションを送らないようにしてからWire.requestFrom()を実行すると指定のアドレスの値を取得できます。

 

0.1uFのバックアップ電源

このてのRTCモジュールは非常に省電力で動作します。
その省電力さ故に、電源のパスコンでもしばらく動作したりするそうです。

この秋月のRTCモジュールには、基板内のVDD~GND間に0.1uFのコンデンサが入っています。
この僅か0.1uFコンデンサで、どの程度RTCが動くのか?

秋月電子 リアルタイムクロック(RTC)モジュール

逆流防止の為にVDDにダイオードを入れて、簡単にではありますが試してみたら、こんな感じの結果でした。

  • VDET(電圧低下(2.1))検出まで約0.4秒
  • XST(発振停止)検出まで約0.8秒
  • PON(パワーオンリセット)まで約1.7秒

XSTでは計時が止まりますが、カレンダーの保持はされています。
PONにまで至るとカレンダー保持も無くなります。

さすがに、この程度の時間ではあまり意味はありませんが、電源が瞬断されても耐えられるのは大きいかと思います。
さらに、試しに0.1uFのコンデンサと並列になるように1uFコンデンサを追加して計測してみると、XST検出まで8秒以上持ちました。
8秒もあれば、バックアップ電池の交換時の簡易的なバックアップに使えて便利なんじゃないかなとか考えてます。

 

関連記事

thermometer overlay

パソコンで温度計 #4

前回までに作ったPC温度計のログデータを、計測と同時に撮影した映像にオーバーレイ表示(スーパーイ

記事を読む

Androidで気圧高度計

androidで気圧・高度計(LPS331AP使用)

Androidと大気圧センサー(LPS331AP)をイヤフォンジャックで繋いで気圧と高度、ついで

記事を読む

no image

PIC24FJ64GB002でADKを試す(その2)

 前回「PIC24FJ64GB002でADKを試す(その1)」では回路の説明までしたので、

記事を読む

no image

赤外線リモコン受信機(イヤホンジャック接続)を作ってみた

最近、このブログ何も書いて無かったので、作成中の物の紹介・・・  これは、Andro

記事を読む

ssh_connected

Raspberry PiをWindowsで操作する(SSH)

SSHを使って、Raspberry Piを外部PC(Windows)で操作する。

記事を読む

no image

PIC24FJ64GB002でADKを試す(その1)

先日、MicrochipからPIC向けのAndroid Open Accessoryのライブラリが公

記事を読む

米粒AVRで温度計

米粒AVRで温度計(STTS751使用)

前回までに紹介したI2CライブラリとLCDライブラリを使って作る、温度計のサンプルです。 温度

記事を読む

no image

Wimeji Client for Arduino

前回紹介したWimeji Client for WindowsXPをArduinoでやってみました。

記事を読む

thermometer

パソコンで温度計 #2

今回は温度表示とログ取りアプリを作ったので公開。 前回にArduino+STTS751で作った

記事を読む

no image

Android + Bluetoothドングル + PIC24F

@hrdakinori さんと言う方が、PIC24FとBluetoothドングルを使って、Andro

記事を読む

Arduinoで温湿度データロガー
Arduinoで温湿度計 #2

今回は、前回作った温湿度計にRTCモジュールとSDカードアダプタを

Arduinoで温湿度計
Arduinoで温湿度計

秋月電子の温湿度モジュールを使って、温湿度計を作ってみました。 以前

SDカード・マイクロSDカード
ArduinoでSDカード

電子工作で大量のデータを保存する方法を調べていると、 Arduin

秋月電子 リアルタイムクロック(RTC)モジュール
秋月のリアルタイムクロック(RTC)モジュール

今回は秋月電子のI2C接続のリアルタイムクロック(RTC)モジュールを

秋月電子 キャラクタLCD
秋月の小型キャラクタLCD

今回秋月電子で売られている小型のキャラクター液晶2種を買ったので、

PAGE TOP ↑