[I2C] EEPROM (AT24C32)

AT24C32 は Atmel 社の 32K (4KB) EEPROM です。RTC モジュール等にデータ記録用として搭載されています。



購入

RTC モジュールを購入するのが手っ取り早いです。以下の記事中の RTC には AT24C32 が載っています。

DIP パッケージ (ブレッドボードに挿せる) の EEPROM 単体も入手可能です。

...まぁ、試すだけなら DS3231 搭載 RTC モジュールを買った方が安かったりします。



動作確認

RTC モジュール搭載 EEPROM の場合には、Arduino (UNO) との接続は RTC モジュールの記事を参照してください。EEPROM (DIP) 単体だと以下のような接続になると思います。

複雑そうに見えますが、EEPROM を一つしか使わないのであれば 5, 6, 8 番ピン以外はすべて GND に接続すればいいです。

AT24C32 Arduino
1 A0 GND
2 A1 GND
3 A2 GND
4 GND GND
5 SDA A4
6 SCL A5
7 WP GND
8 VCC 5V

A0~A2 は I2C スレーブアドレスの決定に使われます (これにより最大で 8 個の EEPROM を接続できます)。WP はライトプロテクトです。

ライブラリは AT24CX Library を使います。

まず、EEPROM の I2C スレーブアドレスを確認します。私が購入したモジュールと同じなら、デフォルトで DS1307 (TinyRTC)0x50DS3231 のものが 0x57 になっているハズです。

サンプルスケッチ AT24CX_search_IC.ino を実行すると I2C スレーブアドレスを確認できます (シリアルモニタの bps は 115200 にしてください)。

DS1307 (TinyRTC)DS3231 のスレーブアドレスがそれぞれ 0x50 と 0x57 になっていますね。

さて、サンプルスケッチ AT24CX_demo.ino を実行すれば EEPROM の読み書きテストができるのですが、DS3231 の方はそのままでは正しく動作しません。

AT24CX Library は Atmel 社製の AT24C32/AT24C64/AT24C128/AT24C256/AT24C512 に対応してるライブラリなのですが、サンプルスケッチのデフォルトでは "AT24C32 / スレーブアドレス 0x50" になっているのです。製品が AT24C32 というのはいいとして、DS3231 はスレーブアドレスが 0x57 なので動作しません。

サンプルスケッチのこの部分を...

// EEPROM object
AT24CX mem;

このように変更するか、

// EEPROM object
AT24CX mem(732); // 0x57, 32K

このように変更します。

// EEPROM object
AT24C32 mem(7); // 0x57, 32K

スケッチを走らせてみて Write の値と Read の値が同じになっていれば正常です。スレーブアドレスが間違っていてもスケッチは実行されるので値をちゃんと確認しましょう。

言うまでもない事かもしれませんが、EEPROM の書き換え回数には上限があります。上限に達した時が (使い方によっては) RTC モジュールの寿命とも言えますので、ご注意を。

See Also:


ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: