秋月のリアルタイムクロック(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秒もあれば、バックアップ電池の交換時の簡易的なバックアップに使えて便利なんじゃないかなとか考えてます。

 

関連記事

秋月電子 キャラクタLCD

秋月の小型キャラクタLCD

今回秋月電子で売られている小型のキャラクター液晶2種を買ったので、ちょっと比較してみる。 買っ

記事を読む

no image

AVRISPmk2

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

記事を読む

Arduino + STTS751

パソコンで温度計

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

記事を読む

no image

Softmodem Terminal 公開しました。

需要がどれほど有るのか疑問に思いつつ、以前のエントリ(AndroidでSoftModemを試してみた

記事を読む

no image

ボツネタ~CAN的な何か

少し前に必死になって作ってたデバイス+アプリですが、気持ちが萎えてしまい、結果ボツと

記事を読む

no image

気になる物

HT-03Aで使えるのかどうかは知らないけど、Bluetooth-シリアルモジュール(BT-MOD1

記事を読む

no image

米粒AVR(ATtiny10)

通称「米粒AVR」で知られるTiny10を使ってみたくて、秋月の通販で買ってみました。 超小型

記事を読む

raspi-pin-header

そうだ、Raspberry Pi用にピンヘッダーのオス・メス変換アダプタを作ろう

  Raspberry PiのI/O端子は、ピンヘッダーとなっていて、電極が出っ張ってる

記事を読む

no image

USBホストケーブルとUSBケーブルの違い

USBホストケーブル(OTGケーブル)と普通のUSBケーブルの違いは、USBホストケーブルとして振る

記事を読む

Androidから米粒AVRへデータを送る

米粒AVRでSoftModem的なこと その2

前回は「米粒AVRからAndroidへデータを送る」ことを試しました。 今回はその逆の「And

記事を読む

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

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

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

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

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

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

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

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

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

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

PAGE TOP ↑