SSブログ

リアルタイムクロック/RTC DS3231+AT24C32 [ハード]

RTC.jpg

このモジュールは、リアルタイムクロック(RTC)のDS3231とEEPROMのAT24C32が載っている。
I2Cで、それぞれ別々にアクセスでき、時刻とともに計測データなどを記録するのに便利になってる。
I2Cのアドレスは、RTCが0x68、EEPROMが、何もしなければ0x57。

DS3231のデータシート
DS3231は、高精度、低消費電力が売りで、
確かにDS1307に比べると電池の持ちがかなりいいいようだ。

なお、「高精度」というと1秒も狂わないと思ってる人がいるようだけど、
単独で動いてる時計としては高精度な方ということ。
今、電波時計が流行ってるけど、結局時計メーカーでさえ単独で狂わないのをあきらめて、電波で補正することを選んだように、単独で正確な時刻を刻むのは無理。

DS3231は、電圧は、2.3-5.5V。推奨3.3V。
バックアップのバッテリ電圧は、2.3-5.5V。推奨3.0V。
ピンは、32K、SQW、SCL、SDA、VCC、GND。
(反対側にあるターミナルは、I2Cのカスケード用)

32Kは、FLAGをセットすることで、32KHzのパルスが出力される。
SQWは、FLAGでアラームをセットすることで、設定時刻になると
これもFLAGでセットされた周波数の方形波が出力される。
データの内容は、下記のようになる。
00h 秒:上4ビットの下3ビットが10の位、下4ビットが1の位。
01h 分:上4ビットの下3ビットが10の位、下4ビットが1の位。
02h 時:上4ビットが0、12/24=1、AM/PM、10の位、
または、  0、12/24=0、20の位、10の位、
下4ビットが1の位。
03h 曜日:下3ビット。ユーザーが決める。
04h日:上4ビットの下2ビットが10の位、下4ビットが1の位。 
05h月:上4ビットの上1ビットが世紀、下1ビットが10の位、下4ビットが1の位。
06h年:上4ビットが10の位、下4ビットが1の位。 
07h-0Ah:ALARM 1
0Bh-0Dh:ALARM 2
0Eh-0Fh:制御/ステータス
10h:オフセット値
11h-12h:温度

Arduinoのライブラリ。DS1307用だけど使えるようだ。
PCの時刻をセットできるので便利。

DS1307とTIMEの両方をArduinoのライブラリに入れて、
サンプルの「settime」を実行すればPCの時刻がセットされる。

EEPROM=AT24C32のデータシート
AT24C32は、32Kビット=4KバイトのEEPROM。
A0、A1,A2(写真の右下にある)は、短絡することでEEPROMの下位アドレスを変更できる。
デバイスアドレスは、1010、A2、A1、A0、R/W。(W=0、R=1)。

具体的には、何もしなければ0x57。A0を半田などで短絡させると最下位が0になるので、
アドレスは、0x56になる。これは、EEPROMを複数使う時に使い分けるためにあるので、
1つだけなら、何もしないで使える。
書き込みは、デバイスアドレス+ワードアドレス2バイト+データ
読み込みは、データなしで書き込んだ後に、デバイスアドレスでリードする。

使い方はこんな感じ。
EEPROMのでーたアドレス0に”A”を書き込んで、
アドレス0を読みだして、シリアルに表示しているだけ。
#include 
#define address 0x57
byte data;

void setup()
{ 
 Wire.begin();
 Serial.begin(9600);
 delay(1000); 
//WRITE!!!!*******************************
 Wire.beginTransmission(address);
 Wire.write(0x00);      //First Word Address
 Wire.write(0x00);      //Second Word Address
 Wire.write(0x41);      //Write an 'A'
 delay(10);
 Wire.endTransmission();
 delay(10);
 //READ!!!!*********************************
 Wire.beginTransmission(address);
 Wire.write(0x00);      //First Word Address
 Wire.write(0x00);      //Second Word Address
 Wire.endTransmission();
 delay(10);
 Wire.requestFrom(address, 1);
 delay(10);
 data = Wire.read();
 Serial.write(data);      //Read the data and print to Serial port
 Serial.println();
 delay(10);
}

void loop()
{
}

RTC/リアルタイムクロックモジュール+EEPROM
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

いろいろ覚えることも多く、知りえた知識を貯めておこうと思います。先はまるで見えないですけどね。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。