過去の投稿日別表示

[ リスト | 詳細 ]

全1ページ

[1]

イメージ 1

このZS-042というモジュールは、リアルタイムクロック(RTC)のDS3231とEEPROMのAT24C32が載っている。
I2Cで、それぞれ別々にアクセスでき、時刻とともに計測データなどを記録するのに便利になってる。
I2Cのアドレスは、RTCが0x68、EEPROMが、何もしなければ0x57。
DS3231の精度は、±2ppm (0℃〜+40℃)となっていて、最大で年1分程度の狂いなので、そこそこの値段の腕時計と同じくらいになる。
また、消費電流は、時間を保持するだけなら1μAなので、ボタン電池が200mAhだとすると、20年くらいは計時し続ける計算になる。

 
DS3231は、電圧は、2.3−5.5V。推奨3.3V。
バックアップのバッテリ電圧は、2.3−5.5V。推奨3.0V。
ピンは、32K、SQW、SCL、SDA、VCC、GND。
(反対側にあるターミナルは、I2Cのカスケード用)
32Kは、制御ビットをセットすることで、32KHzのパルスが出力される。
SQWは、SquareWave=方形波に意味。
制御ビットをオンにすることで、指定した周波数(1,1k,2k,4kHz)の方形波が出力できる。
また、設定した時刻に方形波を出力するアラームにもできる。
アラームは2つあり、日時分秒、日時分が設定でき、それぞれ秒毎、分毎、時毎、日毎が指定できる。
なお、日は曜日の指定にもできる。

データの内容は、下記のようになる。
00h 秒:上4ビットの下3ビットが10の位、下4ビットが1の位。
01h 分:上4ビットの下3ビットが10の位、下4ビットが1の位。
02h 時:上4ビットが
12時間表記の場合は、0、12/24=1、AM/PM、10の位、
24時間表記の場合は、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:温度 符号付で上の10Bitで温度を表す。最小単位は0.25℃。
11hの8ビットで、1の位までの温度を表し、12hの上2Bitで、小数点以下を表す。

Arduinoのライブラリ。DS1307用だけど使えるようだ。
http://www.pjrc.com/teensy/td_libs_DS1307RTC.html
PCの時刻をセットできるので便利。
DS1307とTIMEの両方をArduinoのライブラリに入れて、
サンプルの「settime」を実行すればPCの時刻がセットされる。

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 <Wire.h>
#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 使ってみたい方は↓

この記事に

開く コメント(0)

開く トラックバック(0)

全1ページ

[1]


.


みんなの更新記事