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

公開日: 電子工作 | , ,

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

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

 

AE-RX-8025NB

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

買ったのはこれです。

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

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

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

仕様

計時(保持)電圧:1.15~5.5V
インターフェース:I2C
インターフェース電圧:1.7~5.5V
I2Cアドレス:0x32(固定)
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秒もあれば、バックアップ電池の交換時の簡易的なバックアップに使えて便利なんじゃないかなとか考えてます。

 

関連記事

Androidで温度計

Androidで温度計(STTS751使用)

  Androidに温度センサー(STTS751)を繋いで温度表示してみました。 温度

記事を読む

no image

Android+Arduinoでリモコン3のおまけ

Androidとは関係ないのですが、前回の記事  Android+Arduinoでリモコ

記事を読む

Raspbianの起動SDカードを再利用

一度、Raspbianのイメージを書き込んだSDカードは、フォーマットが違う為にWindowsでは利

記事を読む

no image

SoundIRModemライブラリのサンプル

 SoundIRModemライブラリは、米粒AVR(Tiny10)とAndroid端末をイ

記事を読む

no image

Android+Arduinoでリモコン3 その1(AndroidAccessory接続)

何度か、Android+リモコンのネタを書いたことがあるのですが、今回はAndroid Access

記事を読む

パソコンで温度計

ありきたりのPC温度計ですが、なんとなく作りたくなったので作ってみる。 コントローラーは手軽な

記事を読む

no image

米粒AVRの動作周波数

  米粒AVR(ATtiny10)のデフォルトでは内臓発振器利用の1MHzが指定されてい

記事を読む

no image

Android Open Accessory開発時のWiFiデバッグ

Android Open Accessory開発時のデバッグは、ADBをWiFiで接続しろと、USB

記事を読む

no image

AVRISPmk2

米粒AVR(ATtiny10)のプログラム書き込み用にAVRISPmk2を購入しました。 先人

記事を読む

no image

S2 Resistor Color Code 公開しました。

このアプリは、抵抗のカラーコードから抵抗値を素早く見る為のAndroidアプリです。 4本帯と、5

記事を読む

Arduinoで温湿度計 #2

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

Arduinoで温湿度計

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

ArduinoでSDカード

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

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

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

秋月の小型キャラクタLCD

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

PAGE TOP ↑