1.概要
| DS3231 は、温度補償型水晶発振器 (TCXO) と水晶を内蔵した、低コストで極めて正確な
I2C リアルタイム クロック (RTC) です。 このデバイスにはバッテリー入力が組み込まれており、デバイスの主電源が中断されても正確な計時を維持します。
水晶共振器を内蔵しているため、デバイスの長期精度が向上するとともに、製造ラインの部品数も削減されます。 DS3231 は、商用および工業用温度範囲で使用可能で、16 ピン、300 ミル SO パッケージで提供されます。 RTC は、秒、分、時間、曜日、日付、月、年に関する情 報を維持します。 月末の日付は、閏年補正を含め、31 日未満の月には自動的に調整されます。 このクロックは、AM/PM インジケーター付きの 24 時間形式または 12 時間形式で動作します。 プログラム可能な 2 つの時刻アラームとプログラム可能な方形波出力が提供されます。 アドレスとデータは、I2C 双方向バスを介してシリアルに転送されます。 高精度の温度補償電圧リファレンスおよびコンパレータ回路は、VCC の状態を監視して電源障害を検出し、リセット出力を提供し、必要に応じてバックアップ電源に自動的に切り替えます。 |
![]() |
| ● | 高精度 RTC がすべての計時機能を完全に管理 ? リアルタイム クロックが秒、分、時間、日付、月、曜日、年をカウントし、うるう年補正は 2100 年まで有効 |
| * | 0°C ~ +40°C で精度 ±2ppm |
| * | -40°C ~ +85°C で精度 ±3.5ppm |
| * | デジタル温度センサー出力: ±3°C 精度 |
| * | エージング トリムのレジスタ ? RST 出力/プッシュボタン リセット デバウンス入力 |
| * | 2 つの時刻アラーム ? プログラム可能な方形波出力信号 |
| ● | シンプルなシリアル インターフェイスでほとんどのマイクロコントローラに接続 |
| * | 高速 (400kHz) I2C インターフェイス |
| ● | 連続計時用のバッテリー バックアップ入力 |
| * | 低消費電力動作でバッテリー バックアップの実行時間を延長 |
| * | 3.3V 動作 |
| ● | 動作温度範囲:商業用(0°C ~ +70°C)および工業用(-40°C ~ +85°C) |
| ● | Underwriters LaboratoriesR(UL)認定 |
回路図

Pinアサイン
| Pin | DEVICE | DESCRIPTION |
| 1 | 32k | 32kHz 出力。 このオープンドレイン ピンには外部プルアップ抵抗が必要です。 有効にすると、出力はどちらの電源でも動作します。 使用しない場合はオープンのままにできます。 |
| 2 | SQW | このオープン ドレイン ピンには、5.5V 以下の電源に接続された外部プルアップ抵抗が必要です。 この多機能ピンは、制御レジスタ (0Eh) の INTCN ビットの状態によって決まります。 INTCN が論理 0 に設定されている場合、このピンは方形波を出力し、その周波数は RS2 ビットと RS1 ビットによって決まります。 INTCN が論理 1 に設定されている場合、タイムキーピング レジスタとアラーム レジスタのいずれかが一致すると、INT/SQW ピンがアクティブになります (アラームが有効になっている場合)。 電源が最初に投入されたときに INTCN ビットが論理 1 に設定されているため、ピンはデフォルトでアラームが無効の割り込み出力になります。 プルアップ電圧は、VCC の電圧に関係なく、最大 5.5V です。 使用しない場合は、このピンを未接続のままにすることができます。 |
| 3 | SCL | シリアル クロック入力。 このピンは、I2Cシリアル インターフェイスのクロック入力であり、シリアル インターフェイス上のデータ移動を同期するために使用されます。 このピンには、VCC の電圧に関係なく、最大 5.5V を使用できます。 |
| 4 | SDA | シリアル データ入力/出力。 このピンは、I2Cシリアル インターフェイスのデータ入力/出力です。 このオープン ドレイン ピンには、外部プルアップ抵抗が必要です。 プルアップ電圧は、VCC の電圧に関係なく、最大 5.5V です。 |
| 5 | VCC | プライマリ電源用の DC 電源ピン。 このピンは、0.1μF ~ 1.0μF のコンデンサを使用してデカップリングする必要があります。 使用しない場合は、グランドに接続します。 |
| 6 | GND | Ground |
EEPROM I2Cアドレス
| A2 | A1 | A0 | ADD | |
| 1 | 0 | 0 | 0 | 0x50 |
| 2 | 0 | 0 | 1 | 0x51 |
| 3 | 0 | 1 | 0 | 0x52 |
| 4 | 0 | 1 | 1 | 0x53 |
| 5 | 1 | 0 | 0 | 0x54 |
| 6 | 1 | 0 | 1 | 0x55 |
| 7 | 1 | 1 | 0 | 0x56 |
| 8 | 1 | 1 | 1 | 0x57 |
2.簡単に使う
下記についてはArduinoでDS3231のライブラリをインストールしてコマンドを使用している。(1)アクセスの仕方(DS3231の値を読む方法)
I2C通信の信号は3種類 ②値を要求する ③値の返信
| ②値を要求する場合は 要求する装置の「スレーブアドレス」+要求する値の「レジスタアドレス」です。 ③値の返信は 要求する装置の「スレーブアドレス」+要求する値の「レジスタ内容」です。 要求する値のレジスタアドレスを簡単に下記に記載します。 実際はもっと有ります 「3.レジスタ」参照 |
| Alarm 2 registers | Alarm 1 registers | ||||||
| アドレス | 0x0D | 0x0C | 0x0B | 0x0A | 0x09 | 0x08 | 0x07 |
| データ内容 | 日 | 時 | 分 | 日 | 時 | 分 | 秒 |
| watch registers | |||||||
| アドレス | 0x06 | 0x05 | 0x04 | 0x03 | 0x02 | 0x01 | 0x00 |
| データ内容 | 年 | 月 | 日 | 曜日 | 時 | 分 | 秒 |
(2-1)年データを取得する。 使用コマンド myRTC.getYear()
a.②値を要求する
| (a)読取るDS3231のスレーブアドレス番号 (b)要求する値のレジスタの選択 |
-> ー> |
68 0x06 |
| (a)読取るDS3231のスレーブアドレス番号 (b)要求する値のレジスタの内容 |
-> ー> |
68 0x22 |

(2-2)時間データを取得する。 使用コマンド myRTC.getHour(h12Flag, pmFlag)
a.②値を要求する
| (a)読取るDS3231のスレーブアドレス番号 (b)要求する値のレジスタの選択 |
-> ー> |
68 0x02 |
| (a)読取るDS3231のスレーブアドレス番号 (b)要求する値のレジスタの内容 |
-> ー> |
68 0x09 |

(3-1) 年データを設定する 使用コマンド myRTC.setYear(22);
時間と秒だけが信号が違っていたので、(3-2)(3-3)で示す。
a.①値を設定する
| (a)読取るDS3231のスレーブアドレス番号 (b)要求する値のレジスタの選択 (c)設定する値 |
-> ー> ー> |
68 0x06 0x22 |

(3-2) 時間データを設定する 使用コマンド myRTC.setHour(9);
10時から9時へ変更 時間だけが書込む前に値を要求・取得している。
「c.①値を設定する」だけで良いと思う。 a.およびb.の必要性は不明です。
a.②値を要求する
| (a)読取るDS3231のスレーブアドレス番号 (b)要求する値のレジスタの選択 |
-> ー> |
68 0x02 |
| (a)読取るDS3231のスレーブアドレス番号 (b)要求する値のレジスタの内容 |
-> ー> |
68 0x10 |
| (a)読取るDS3231のスレーブアドレス番号 (b)要求する値のレジスタの選択 (c)設定する値 |
-> ー> ー> |
68 0x02 0x09 |

(3-3) 秒データを設定する 使用コマンド myRTC.setMinute(0);
「a.①値を設定する」だけで良いと思が、なぜ32khzピンに方形波を出しているか、また出す事を設定しているか判らない。
a.①値を設定する
| (a)読取るDS3231のスレーブアドレス番号 (b)要求する値のレジスタの選択 (c)設定する値 |
-> ー> ー> |
68 0x01 0x00 |
| (a)読取るDS3231のスレーブアドレス番号 (b)要求する値のレジスタの選択 |
-> ー> |
68 0x0F |
| (a)読取るDS3231のスレーブアドレス番号 (b)要求する値のレジスタの内容 |
-> ー> |
68 0x08 |
| (a)読取るDS3231のスレーブアドレス番号 (b)要求する値のレジスタの選択 (c)設定する値 |
-> ー> ー> |
68 0x0F 0x08 |

3.I2Cアドレスの選択
I2Cのアドレスは7bitで値設定は 0x68EEPROM は デフォルトは 0x57 A0 A1 A2で変更可能 0x50~0x57
4.レジスター
レジスタ一覧| ADD | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
| 0x00 | 0 | 10 Seconds | Seconds | |||||
| 0x01 | 0 | 10 Minutes | Minutes | |||||
| 0x02 | 0 | 12/ |
10 Hour | Hour | ||||
| 20 Hour | ||||||||
| 0x03 | 0 | 0 | 0 | 0 | 0 | Day | ||
| 0x04 | 0 | 0 | 10 Date | Date | ||||
| 0x05 | Century | 0 | 0 | 10 Month | Month | |||
| 0x06 | 10 Year | Year | ||||||
| 0x07 | A1M1 | 10 Seconds | Seconds | |||||
| 0x08 | A1M2 | 10 Minutes | Minutes | |||||
| 0x09 | A1M3 | 12/ |
10 Hour | Hour | ||||
| 20 Hour | ||||||||
| 0x0A | A1M4 | DY/ |
10 Date | Day | ||||
| Date | ||||||||
| 0x0B | A2M2 | 10 Minutes | Minutes | |||||
| 0x0C | A2M3 | 12/ |
10 Hour | Hour | ||||
| 20 Hour | ||||||||
| 0x0D | A2M4 | DY/ |
10 Date | Day | ||||
| Date | ||||||||
| 0x0E | BBSQW | CONV | RS2 | RS1 | INTCN | A2IE | A1IE | |
| 0x0F | OSF | 0 | 0 | 0 | EN32kHz | BSY | A2F | A1F |
| 0x10 | SIGN | DATA | DATA | DATA | DATA | DATA | DATA | DATA |
| 0x11 | SIGN | DATA | DATA | DATA | DATA | DATA | DATA | DATA |
| 0x12 | DATA | DATA | 0 | 0 | 0 | 0 | 0 | 0 |
| ADD | Function | Range |
| 0x00 | Seconds | 00~59 |
| 0x01 | Minutes | 00~59 |
| 0x02 | Hours | 1~12+ 00~23 |
| 0x03 | Day | 1~7 |
| 0x04 | Date | 01~31 |
| 0x05 | Month/Century | 01~12+Century |
| 0x06 | Year | 00~99 |
| 0x07 | Alarm 1 Seconds | 00~59 |
| 0x08 | Alarm 1 Minutes | 00~59 |
| 0x09 | Alarm 1 Hours | 1~12+ 00~23 |
| 0x0A | Alarm 1 Day | 1~7 |
| Alarm 1 Date | 1~31 | |
| 0x0B | Alarm 2 Minutes | 00~59 |
| 0x0C | Alarm 2 Hours | 1~12+ 00~23 |
| 0x0D | Alarm 2 Day | 1~7 |
| Alarm 2 Date | 1~31 | |
| 0x0E | Control | ー |
| 0x0F | Control/Status | ー |
| 0x10 | Aging Offset | ー |
| 0x11 | MSB of Temp | ー |
| 0x12 | LSB of Temp | ー |
(1)0x00~0x0D 時計レジスタ
| Alarm 2 registers | Alarm 1 registers | ||||||
| アドレス | 0x0D | 0x0C | 0x0B | 0x0A | 0x09 | 0x08 | 0x07 |
| データ内容 | 日 | 時 | 分 | 日 | 時 | 分 | 秒 |
| watch registers | |||||||
| アドレス | 0x06 | 0x05 | 0x04 | 0x03 | 0x02 | 0x01 | 0x00 |
| データ内容 | 年 | 月 | 日 | 曜日 | 時 | 分 | 秒 |
a.Clock and Calendar
|
時計とカレンダー 時間とカレンダーの情報は、適切なレジスタ バイトを読み取ることによって取得されます。
レジスタ一覧 は、RTC レジスタを示しています。 時間とカレンダーのデータは、適切なレジスタ バイトを書き込むことによって設定または初期化されます。 時間とカレンダーのレジスタの内容は、2 進化 10 進数 (BCD) 形式です。 DS3231 は、12 時間モードまたは 24 時間モードで実行できます。 時間レジスタのビット 6 は、12 時間モードまたは 24 時間モード選択ビットとして定義されています。 ハイの場合、12 時間モードが選択されます。 12 時間モードでは、ビット 5 は 24 時間モードでは、ビット 5 は 20 時間ビット (20 ~ 23 時間) です。 年レジスタが 99 から 00 にオーバーフローすると、世紀ビット (月レジスタのビット 7) が切り替わります。 曜日レジスタは午前 0 時に増加します。 曜日に対応する値はユーザー定義ですが、連続している必要があります (つまり、1 が日曜日に等しい場合、2 は月曜日に等しいなど)。 非論理的な時刻と日付のエントリは、未定義の動作になります。 時刻と日付のレジスタの読み取りまたは書き込みを行うときは、内部レジスタの更新時にエラーが発生しないように、セカンダリ (ユーザー) バッファーが使用されます。 時刻と日付のレジスタの読み取りを行うときは、START が発生するたびに、およびレジスタ ポインタがゼロにロールオーバーするときに、ユーザー バッファーが内部レジスタに同期されます。 時刻情報は、クロックが動作している間、これらのセカンダリ レジスタから読み取られます。 これにより、読み取り中にメイン レジスタが更新された場合に、レジスタを再度読み取る必要がなくなります。 秒レジスタが書き込まれるたびに、カウントダウン チェーンがリセットされます。 書き込み転送は、DS3231 からの確認応答エッジで発生します。 カウントダウン チェーンがリセットされると、ロールオーバーの問題を回避するために、残りの時間と日付のレジスタは 1 秒以内に書き込まれる必要があります。 1Hz の矩形波出力が有効になっている場合、発振器がすでに動作していれば、秒データ転送の 500 ミリ秒後にハイに遷移します。 |
b.Alarms アラーム
| DS3231 には、2 つの時刻/日付アラームが含まれています。 アラーム 1 は、レジスタ 07h ~ 0Ah に書き込むことで設定できます。 アラーム 2 は、レジスタ 0Bh ~ 0Dh に書き込むことで設定できます。 説明している表は[c.ALARM 1 REGISTER MASK BITS]又は[d.ALARM 2 REGISTER MASK BITS]で以下表と言う。 アラームは、アラーム一致条件で 各時刻/日付アラーム レジスタのビット 7 はマスク ビットです (表 )。 各アラームのマスク ビットがすべてロジック 0 の場合、タイムキーピング レジスタの値が、時刻/日付アラーム レジスタに格納されている対応する値と一致した場合にのみアラームが発生します。 アラームは、秒、分、時間、日、または日付ごとに繰り返すようにプログラムすることもできます。 表に、可能な設定を示します。 表に記載されていない構成では、非論理的な動作になります。 DY/ DY/ DY/ RTC レジスタ値がアラーム レジスタ設定と一致すると、対応するアラーム フラグ「A1F」または「A2F」ビットが論理 1 に設定されます。 対応するアラーム割り込みイネーブル「A1IE」または「A2IE」も論理 1 に設定され、INTCN ビットが論理 1 に設定されている場合、アラーム条件によって 一致は、時刻および日付レジスタの 1 秒に 1 回の更新でテストされます。 |
c.ALARM 1 REGISTER MASK BITS (BIT 7)
| DY/ |
A1M4 | A1M3 | A1M2 | A1M1 | Alarm Rate |
| x | 1 | 1 | 1 | 1 | Alarm once per second 1 秒に 1 回アラーム |
| x | 1 | 1 | 1 | 0 | Alarm when seconds match 秒が一致したらアラーム |
| x | 1 | 1 | 0 | 0 | Alarm when minutes and seconds match 分と秒が一致したらアラーム |
| x | 1 | 0 | 0 | 0 | Alarm when hours, minutes, and seconds match 時間、分、秒が一致したらアラーム |
| 0 | 0 | 0 | 0 | 0 | Alarm when date, hours, minutes, and seconds match 日付、時間、分、秒が一致したらアラーム |
| 1 | 0 | 0 | 0 | 0 | Alarm when day, hours, minutes, and seconds match 曜日、時間、分、秒が一致したらアラーム |
d.ALARM 2 REGISTER MASK BITS (BIT 7)
| DY/ |
A1M4 | A1M3 | A1M2 | Alarm Rate |
| x | 1 | 1 | 1 | Alarm once per minute (00 seconds of every minute) 1 分に 1 回アラーム (毎分 00 秒) |
| x | 1 | 1 | 0 | Alarm when minutes match 分が一致したらアラーム |
| x | 1 | 0 | 0 | Alarm when hours and minutes match 時間と分が一致したらアラーム |
| 0 | 0 | 0 | 0 | Alarm when date, hours, and minutes match 日付、時間、分が一致したらアラーム |
| 1 | 0 | 0 | 0 | Alarm when day, hours, and minutes match 曜日、時間、分が一致したらアラーム |
(2)0x0E 制御レジスタ
|
はデフォルト値 |
このビットは、最初に電源が投入されたときにクリアされます (論理 0)。 DS3231 が VCC によって電源供給されている場合、EOSC ビットの状態に関係なく、発振器は常にオンになります。 EOSC が無効になっている場合、すべてのレジスタ データは静的です。 |
||||||||||||||||
| BBSQW |
このビットは、最初に電源が投入されたときに無効 (論理 0) になります。 |
|||||||||||||||
| CONV |
ユーザーは、コントローラに新しい TCXO 実行を強制する前に、ステータス ビット BSY を確認する必要があります。 ユーザーが開始した温度変換は、内部の 64 秒更新サイクルには影響しません。 ユーザーが開始した温度変換は、約 2 ミリ秒間 BSY ビットに影響しません。 CONV ビットは、書き込まれた時点から変換が終了するまで 1 のままです。変換が終了すると、CONV と BSY の両方が 0 になります。 CONV ビットは、ユーザーが開始した変換のステータスを監視するときに必要 |
|||||||||||||||
| RS2 RS1 |
これらのビットは、方形波が有効になっているときに方形波出力の周波数を制御します。 次の表は、RS ビットで選択できる方形波周波数を示しています。 これらのビットは両方とも、電源が最初に投入されたときにロジック 1 (8.192kHz) に設定されます。 |
|||||||||||||||
| INTCN |
このビットは INT/SQW 信号を制御します。 対応するアラーム フラグは、INTCN ビットの状態に関係なく常に設定されます。 INTCN ビットは、電源が最初に投入されたときに論理 1 に設定されます。 |
|||||||||||||||
| A2IE |
電源が最初に投入されると、A2IE ビットは無効 (論理 0) になります。 |
|||||||||||||||
| A1IE |
電源が最初に投入されると、A1IE ビットは無効 (論理 0) になります。 |
(3)0x0F ステータスレジスタ
| OSF |
計時データの有効性を判断するために使用できます。 このビットは、発振器が停止するたびに論理 1 に設定されます。 以下は、OSF ビットが設定される可能性のある条件の例です: 1) 初めて電源が投入されたとき。 2) VCC と VBAT の両方に存在する電圧が、発振をサポートするのに不十分です。 3) EOSC ビットがバッテリ バックアップ モードでオフになっています。 4) 水晶振動子への外部の影響 (ノイズ、リークなど)。 このビットは、論理 0 に書き込まれるまで論理 1 のままです。 |
||||
| EN32kHz |
このビットは 32kHz ピンの状態を制御します。 ロジック 1 に設定すると、32kHz ピンが有効になり、32.768kHz 方形波信号を出力します。 ロジック 0 に設定すると、32kHz ピンは高インピーダンス状態になります。 このビットの初期電源投入状態はロジック 1 で、DS3231 に電源が供給されると (発振器が動作している場合)、32kHz ピンに 32.768kHz 方形波信号が表示されます。 |
||||
| BS-Y |
このビットは、デバイスが TCXO 機能の実行でビジーであることを示します。 |
||||
| A2F |
A2F は、論理 0 に書き込まれるとクリアされます。 このビットは、論理 0 にのみ書き込むことができます。 論理 1 に書き込もうとしても、値は変更されません。 |
||||
| A1F |
A1F は、論理 0 に書き込まれるとクリアされます。 このビットは、論理 0 にのみ書き込むことができます。 論理 1 に書き込もうとしても、値は変更されません。 |
(4)0x10 Aging Offset
|
エージング オフセット エージング オフセット レジスタは、ユーザー指定の値を使用して、容量アレイ レジスタのコードに加算または減算します。 コードは 2 の補数でエンコードされ、ビット 7 は符号ビットを表します。 1 つの LSB は、水晶ピンで容量アレイに挿入または切断される 1 つの小型コンデンサを表します。 エージング オフセット レジスタの容量値は、デバイスが各温度補償に対して計算する容量値に加算または減算されます。 オフセット レジスタは、通常の温度変換中、温度が前回の変換から変化した場合、または手動ユーザー変換中 (CONV ビットの設定) に容量アレイに追加されます。 エージング レジスタが 32kHz 出力周波数に及ぼす影響をすぐに確認するには、エージング レジスタを変更するたびに手動変換を開始する必要があります。 正のエージング値はアレイに容量を追加し、発振器周波数を遅くします。 負の値はアレイから容量を削除し、発振器周波数を増加します。 LSB あたりの ppm の変化は、温度によって異なります。 周波数対温度曲線は、このレジスタで使用される値によってシフトします。 +25°C では、1 LSB で通常約 0.1ppm の周波数変化がもたらされます。 エージング レジスタの使用は、EC テーブルで定義されている精度を達成するために必要ではありませんが、特定の温度でのエージングを補正するために使用できます。 温度に対する精度に対するレジスタの影響を示すグラフについては、「一般的な動作特性」セクションを参照してください。 |
(5)0x11 0x12 温度レジスタ(上位 下位)
上位ビットが整数部
下位ビットが小数点で分解能は0.25
[レジスター一覧へ戻る]

