部品実験 元に戻る

DS3231 2024/7/30

本文目次

本文以外目次
1.簡単に使う
2.I2Cスレーブアドレス
3.レジスタ
 レジスタ一覧
4.概要
1.DS3231 Arduinoプログラム(本文以外)

本   文
1.簡単に使う
下記についてはArduinoでDS3231のライブラリをインストールしてコマンドを使用している。
(1)アクセスの仕方(DS3231の値を読む方法)
  I2C通信の信号は3種類 ②値を要求する ③値の返信
  ②値を要求する場合は 要求する装置の「スレーブアドレス」+要求する値の「レジスタアドレス」です。
  ③値の返信は 要求する装置の「スレーブアドレス」+要求する値の「レジスタ内容」です。
   要求する値のレジスタアドレスを簡単に下記に記載します。  実際はもっと有ります 「3.レジスタ」参照
  Alarm 2 registers Alarm 1 registers watch registers
アドレス 0x0D 0x0C 0x0B 0x0A 0x09 0x08 0x07 0x06 0x05 0x04 0x03 0x02 0x01 0x00
データ内容 曜日

(2-1)年データを取得する。  使用コマンド myRTC.getYear()
a.②値を要求する
(a)読取るDS3231のスレーブアドレス番号
(b)要求する値のレジスタの選択
->
ー>
68
0x06
b.③値の返信
(a)読取るDS3231のスレーブアドレス番号
(b)要求する値のレジスタの内容
->
ー>
68
0x22


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


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


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


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

[目次に戻る]


2.I2Cアドレスの選択
I2Cのアドレスは7bitで値設定は 0x68

EEPROM は デフォルトは 0x57  A0 A1 A2で変更可能 0x50~0x57
[目次に戻る]


3.レジスター
レジスタ一覧
ADD bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 Function Range
0x00 0 10 Seconds Seconds Seconds 00~59
0x01 0 10 Minutes Minutes Minutes 00~59
0x02 0 12/24 AM/PM 10 Hour Hour Hours 1~12+AM/PM
00~23
20 Hour
0x03 0 0 0 0 0 Day Day 1~7
0x04 0 0 10 Date Date Date 01~31
0x05 Century 0 0 10 Month Month Month/Century 01~12+Century
0x06 10 Year Year Year 00~99
0x07 A1M1 10 Seconds Seconds Alarm 1 Seconds 00~59
0x08 A1M2 10 Minutes Minutes Alarm 1 Minutes 00~59
0x09 A1M3 12/24 AM/PM 10 Hour Hour Alarm 1 Hours 1~12+AM/PM
00~23
20 Hour
0x0A A1M4 DY/DT 10 Date Day Alarm 1 Day 1~7
Date Alarm 1 Date 1~31
0x0B A2M2 10 Minutes Minutes Alarm 2 Minutes 00~59
0x0C A2M3 12/24 AM/PM 10 Hour Hour Alarm 2 Hours 1~12+AM/PM
00~23
20 Hour
0x0D A2M4 DY/DT 10 Date Day Alarm 2 Day 1~7
Date Alarm 2 Date 1~31
0x0E EOSC BBSQW CONV RS2 RS1 INTCN A2IE A1IE Control
0x0F OSF 0 0 0 EN32kHz BSY A2F A1F Control/Status
0x10 SIGN DATA DATA DATA DATA DATA DATA DATA Aging Offset
0x11 SIGN DATA DATA DATA DATA DATA DATA DATA MSB of Temp
0x12 DATA DATA 0 0 0 0 0 0 LSB of Temp

(1)0x00~0x0D 時計レジスタ
  Alarm 2 registers Alarm 1 registers watch registers
アドレス 0x0D 0x0C 0x0B 0x0A 0x09 0x08 0x07 0x06 0x05 0x04 0x03 0x02 0x01 0x00
データ内容 曜日

a.Clock and Calendar

時計とカレンダー 時間とカレンダーの情報は、適切なレジスタ バイトを読み取ることによって取得されます。
図 1 は、RTC レジスタを示しています。
時間とカレンダーのデータは、適切なレジスタ バイトを書き込むことによって設定または初期化されます。
時間とカレンダーのレジスタの内容は、2 進化 10 進数 (BCD) 形式です。
DS3231 は、12 時間モードまたは 24 時間モードで実行できます。
時間レジスタのビット 6 は、12 時間モードまたは 24 時間モード選択ビットとして定義されています。
ハイの場合、12 時間モードが選択されます。
12 時間モードでは、ビット 5 は AM/PM ビットで、ロジック ハイは PM です。
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 に書き込むことで設定できます。
アラームは、アラーム一致条件で INT/SQW 出力をアクティブにするようにプログラムできます (制御レジスタのアラーム イネーブル ビットと INTCN ビットによって)。
各時刻/日付アラーム レジスタのビット 7 はマスク ビットです (表 2)。 各アラームのマスク ビットがすべてロジック 0 の場合、タイムキーピング レジスタの値が、時刻/日付アラーム レジスタに格納されている対応する値と一致した場合にのみアラームが発生します。
アラームは、秒、分、時間、日、または日付ごとに繰り返すようにプログラムすることもできます。
表 2 に、可能な設定を示します。
表に記載されていない構成では、非論理的な動作になります。
DY/DT ビット (アラーム日/日付レジスタのビット 6) は、そのレジスタのビット 0 ~ 5 に格納されているアラーム値が曜日を反映するか、月日を反映するかを制御します。
DY/DT が論理 0 に書き込まれると、アラームは月日との一致の結果になります。
DY/DT が論理 1 に書き込まれると、アラームは曜日との一致の結果になります。
RTC レジスタ値がアラーム レジスタ設定と一致すると、対応するアラーム フラグ「A1F」または「A2F」ビットが論理 1 に設定されます。 対応するアラーム割り込みイネーブル「A1IE」または「A2IE」も論理 1 に設定され、INTCN ビットが論理 1 に設定されている場合、アラーム条件によって INT/SQW 信号がアクティブになります。
一致は、時刻および日付レジスタの 1 秒に 1 回の更新でテストされます。

c.ALARM 1 REGISTER MASK BITS (BIT 7)
DY/DT 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/DT 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 制御レジスタ 
 
はデフォルト値
EOSC
0 論理 0 に設定すると、発振器が起動します。
1 論理 1 に設定すると、DS3231 が VBAT に切り替わったときに発振器が停止します。
発振器の有効化:Enable Oscillator (EOSC)。
このビットは、最初に電源が投入されたときにクリアされます (論理 0)。
DS3231 が VCC によって電源供給されている場合、EOSC ビットの状態に関係なく、発振器は常にオンになります。
EOSC が無効になっている場合、すべてのレジスタ データは静的です。
BBSQW
0 BBSQW が論理0の場合、VCC < VPF のときに INT/SQW ピンは高インピーダンスになります。
1 INTCN = 0 で VCC < VPF のときに論理 1 に設定すると、このビットは方形波を有効にします。
バッテリバックアップ方形波有効:Battery-Backed Square-Wave Enable (BBSQW).
このビットは、最初に電源が投入されたときに無効 (論理 0) になります。
CONV
0
1 変換が進行中でない場合に1に設定すると温度センサーは温度をデジタル コードに変換し、TCXO アルゴリズムを実行して、発振器への容量アレイを更新します。
温度変換:Convert Temperature (CONV)
ユーザーは、コントローラに新しい TCXO 実行を強制する前に、ステータス ビット BSY を確認する必要があります。
ユーザーが開始した温度変換は、内部の 64 秒更新サイクルには影響しません。
ユーザーが開始した温度変換は、約 2 ミリ秒間 BSY ビットに影響しません。
CONV ビットは、書き込まれた時点から変換が終了するまで 1 のままです。変換が終了すると、CONV と BSY の両方が 0 になります。
CONV ビットは、ユーザーが開始した変換のステータスを監視するときに必要
RS2
RS1
RS2 RS1 矩形波出力
0 0 1Hz
0 1 1.024kHz
1 0 4.096kHz
1 1 8.192kHz
レート選択:Rate Select (RS2 and RS1).
これらのビットは、方形波が有効になっているときに方形波出力の周波数を制御します。
次の表は、RS ビットで選択できる方形波周波数を示しています。
これらのビットは両方とも、電源が最初に投入されたときにロジック 1 (8.192kHz) に設定されます。
INTCN
0 INTCN ビットが論理 0 に設定されている場合、INT/SQW ピンに方形波が出力されます。
1 INTCN ビットが論理 1 に設定されている場合、タイム キーピング レジスタとアラーム レジスタのいずれかが一致すると、INT/SQW 出力がアクティブになります (アラームも有効になっている場合)。
割り込み制御:Interrupt Control (INTCN)
このビットは INT/SQW 信号を制御します。
対応するアラーム フラグは、INTCN ビットの状態に関係なく常に設定されます。
INTCN ビットは、電源が最初に投入されたときに論理 1 に設定されます。
A2IE
0 A2IE ビットが論理 0 に設定されている場合、または INTCN が論理 0 に設定されている場合、A2F ビットは割り込み信号を開始しません。
1 このビットが論理 1 に設定されている場合、ステータス レジスタのアラーム 2 フラグ (A2F) ビットが INT/SQW をアサートできます (INTCN = 1 の場合)。
アラーム 2 割り込み有効:Alarm 2 Interrupt Enable (A2IE).
電源が最初に投入されると、A2IE ビットは無効 (論理 0) になります。
A1IE
0 A1IE ビットが論理 0 に設定されている場合、または INTCN が論理 0 に設定されている場合、A1F ビットは INT/SQW 信号を開始しません。
1 このビットが論理 1 に設定されている場合、ステータス レジスタのアラーム 1 フラグ (A1F) ビットが INT/SQW をアサートすることを許可します (INTCN = 1 の場合)
アラーム 1 割り込み有効 :Alarm 1 Interrupt Enable(A1IE)。
電源が最初に投入されると、A1IE ビットは無効 (論理 0) になります。
[レジスター一覧へ戻る]

(3)0x0F ステータスレジスタ
OSF
0 --0書込み出来ます。
1 発振器が停止しているか、一定期間停止していたことを示す。
発振器停止フラグ:Oscillator Stop Flag (OSF)。
計時データの有効性を判断するために使用できます。
このビットは、発振器が停止するたびに論理 1 に設定されます。
以下は、OSF ビットが設定される可能性のある条件の例です:
1) 初めて電源が投入されたとき。
2) VCC と VBAT の両方に存在する電圧が、発振をサポートするのに不十分です。
3) EOSC ビットがバッテリ バックアップ モードでオフになっています。
4) 水晶振動子への外部の影響 (ノイズ、リークなど)。
このビットは、論理 0 に書き込まれるまで論理 1 のままです。
EN32kHz
0
1
32kHz 出力の有効化 :Enable 32kHz Output(EN32kHz)。
このビットは 32kHz ピンの状態を制御します。
ロジック 1 に設定すると、32kHz ピンが有効になり、32.768kHz 方形波信号を出力します。
ロジック 0 に設定すると、32kHz ピンは高インピーダンス状態になります。
このビットの初期電源投入状態はロジック 1 で、DS3231 に電源が供給されると (発振器が動作している場合)、32kHz ピンに 32.768kHz 方形波信号が表示されます。
BS-Y
0 デバイスが 1 分間アイドル状態になるとクリアされます。
1 温度センサーへの変換信号がアサートされるとロジック 1 になり
ビジー :Busy(BSY)
このビットは、デバイスが TCXO 機能の実行でビジーであることを示します。
A2F
0 --0書込み出来ます。
1 アラーム21 フラグ ビットの論理 1 は、時刻がアラーム 2 レジスタと一致したことを示します。
A2IE ビットが論理 1 でINTCN ビットが論理 1 に設定されている場合、INT/SQW ピンもアサートされます。
アラーム 2 フラグ :Alarm 2 Flag (A2F)

A2F は、論理 0 に書き込まれるとクリアされます。
このビットは、論理 0 にのみ書き込むことができます。
論理 1 に書き込もうとしても、値は変更されません。
A1F
0 --0書込み出来ます。
1 アラーム 1 フラグ ビットの論理 1 は、時刻がアラーム 1 レジスタと一致したことを示します。
A1IE ビットが論理 1 で、INTCN ビットが論理 1 に設定されている場合、INT/SQW ピンもアサートされます。
アラーム 1 フラグ:Alarm 1 Flag (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

[レジスター一覧へ戻る]
[目次に戻る]


4.概要
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 INT/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

[目次に戻る]