パーツ解説

リアルタイムクロック DS1307 の使い方

投稿日:2021-08-14 更新日:

今回は秋月電子で販売されているこちらのリアルタイムクロック(以下 RTC)の DS1307 について紹介します。

RTC とは

まずは RTC について説明します。電子工作で「クロック」といえば、普通は 〇Hz のような一定の周波数の信号のことを指すことが多いですが、RTC は〇時〇分といった時刻を数えています。

PIC 等のマイコンで時計を作ろうとしたときに、一定の周波数の信号を数えれば時刻を計算することが出来ますが、その仕事をやってくれる IC が RTC です。

RTC を使用することで PIC は他の計算に専念できたり、RTC にバックアップ電源を供給することで PIC の電源を切っても時刻を保持できたりといった利点があります。

 

DS1307 の特徴

秋月電子で取り扱っているものだけでもいくつかの RTC がありますが、DS1307 の特徴としては以下のものが挙げられます。

  • I2C 接続
  • バックアップ電源専用ピンあり
  • 外付けの水晶発振子が必要

まずはインターフェースですが、I2C接続なので2本の信号線で接続できて便利です。

次に、バックアップ電源の専用ピンがついています。これがない場合は、主電源とバックアップ電源を切り替えたり逆流を防止したりする必要が生じますが、そのような問題を気にすることがなくなるのでとても便利です。

バックアップ電源には3Vのリチウム電池を繋ぐのが手軽で確実です。他にもダイオードとコンデンサを使って主電源から貯めておくという手段もあります。(主電源は5Vなので注意)

注意点としては、クロック源として 32.768kHz の水晶発振子を外付けする必要があります。ただ水晶発振子は秋月電子で30円で買えますし、実装スペースも大して必要ないので、それほど気にすることでもないと思います。

 

レジスタ

ここからは実際の制御に必要な情報を見ていきます。

DS1307 のレジスタは次のようになっています。

00h ~ 06h に日付や時刻のデータが入っていて、07h が設定のレジスタとなっています。08h ~ 3Fh は自由に使える RAM になっていて、バックアップ電源によって疑似的に不揮発メモリとして使っても良いかもしれません。

 

データは BCD (Binary Coded Decimal) という形になっていて、8ビットのうち上位4ビットが10の位、下位4ビットが1の位となっています。

扱いにくいと思うかもしれませんが、7セグLED など一桁ずつ制御する場合には都合が良いのだと思います。

 

次に「時」についてですが、12時間表示と 24時間表示の好きな方を選べるようになっています。Hoursレジスタの bit 6 が0であれば 24時間表示、1であれば 12時間表示となります。

12時間表示の場合、10の位は1bitで足りるので、bit 5 は PM/AM となります。普通の BCD 形式でデータを入力すれば、10の位の数は高々2なので bit 6 は0となり、24時間表示になります。

 

曜日を表す Dayレジスタは1~7の値を取りますが、何曜日がどの数字かは決まっていないので、月曜始まりでも日曜始まりでも好きなように決めていいです。

 

Controlレジスタは SQW/OUT ピンの矩形波出力に関するピンで、RS は周波数の設定、SQWE は矩形波出力の ON/OFF、OUT は矩形波出力が OFF の場合の出力を設定します。(下図参照)

1Hzの矩形波は Secondsレジスタと同期しているので、これをマイコンに送れば秒まで同期可能です。

 

最後に、Secondsレジスタの bit 7 に CH (Clock Halt) ビットがあります。リセット後はこのビットが1になっていてクロックが動かないので、必ず0にする必要があります。(私はこれに気付かず4~5時間頭を悩ませていました。なんでControlレジスタに入っていないんだよ~)

 

プログラム

DS1307 と通信してデータを送受信するライブラリのようなものを書いてみました。

日付や時刻のデータは通信の簡単のために配列として、インデックスを定数として定義することで、例えば秒だったら dateTime[SEC] のように使うことにしました。

また、BCD のデータをそのままインクリメントする関数や、BCD と普通の数字を変換する関数も一応用意しておきました。

この中で使っている I2Cライブラリについてはこちらの記事をご覧ください。

▼I2Cライブラリ

今回の記事は以上です。ご覧いただきありがとうございました。

この記事では都合上実際に動作テストはしていませんが、この IC を使って卓上時計を作ったので実例はこちらをご覧ください。

PICとグラフィックLCDでシンプルな卓上時計を作ってみた

 

-パーツ解説

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

APDS-9960の近接センサーを使ってみる

前回 APDS-9960 のジェスチャーセンサーを使用しました。今回はジェスチャーに加えて近接センサーも使用してみたいと思います。 前回の記事はこちら PICでジェスチャーセンサーを使ってみる[APD …

APDS-9960のRGBセンサーを使ってみる

前々回のジェスチャーセンサー、前回の近接センサーに引き続き、APDS-9960 の最後の機能である照度・RGBセンサーを使ってみました。 最初に言っておきますが、今回は動作確認程度のかなり適当な内容に …

aitendoのI2CキャラクタLCDが安くて便利

ブレッドボード上で情報を表示したり簡易的なデバッグをしたりするのに便利なのがキャラクタLCD です。 今回は aitendo で販売されているこちらの LCD を使ってみました。 ちなみに以前秋月電子 …

PICで7セグドライバTM1630を使ってみた

今回は秋月電子で販売されている7セグメントLEDドライバ TM1630 を使用してみました。 TM16301つで7セグ5桁または8セグ4桁をダイナミック点灯で制御することができます。※カソードコモンじ …

PICでジェスチャーセンサーを使ってみる[APDS-9960]

今回は以前から気になっていた秋月電子で販売されているこちらのジェスチャーセンサー APDS-9960 を使ってみました。ネットの情報も少なく、Arduinoのライブラリを使うだけしか書いてなかったりし …