ホーム > カテゴリ > ロボット・電子工作・マイコン >

EEPROM(I2C版)の使い方 [Arduino]

EEPROMは電源をオフにしてもデータが消えない半導体メモリです。

Arduino UNOでは標準で1024byteのEEPROMがありますが、今回は外部のEEPROM(I2C接続)を使用します。

使用部品・材料

総額で約315円です。(Arduino本体の値段を除く)

部品/材料値段備考
ブレッドボード¥270秋月電子の通販コード(P-00315)
シリアルIスケアC EEPROM 24LC64-I/P¥45秋月電子の通販コード(I-00194)
カーボン抵抗器数円2kΩ(2個)を使用。

※仕様書では2kΩですが、手元にない場合は10kΩでも動作します。

配線図

I2CのSCL/SDAのプルアップ抵抗には2kΩを使用します。

次は公式データシートより引用(24aa64_24lc64.pdf)

※R/W = 1 読み込み。R/W =0 読み込み、書き込み。

今回の配線によるデバイスアドレスは「A0=H(1)、A1=H(1)、A2=H(1)」にしていますので「10101110」になります。Arduinoの場合は7bitのみを使用しますので右に1bitシフトした「1010111」(0x57)がデバイスアドレスとなります。

A0,A1,A2の3bitありますので、最大8個のEEPROMを接続可能です。

アドレス

今回の24LC64-I/Pは64kビットですので

8192byte = 64kビット = 64 / 8 = 8 x 1024

アドレスは0番地から8191番地まで使用可能です。

姉妹品の24LC256は256kビットで32767番地まで、24LC512は512kビットなので65535番地までとなります。

スケッチ(プログラム)

アドレス0番地から5番地までに「数値」を書き込みます。次にその番地から値を取得してシリアルモニターへ表示します。

#include <Wire.h>
 
// デバイスアドレス(スレーブ)
uint8_t DEVICE_ADDRESS = 0x57; // 1010111
 
void setup() { 
  Serial.begin(9600); 
  
  // マスタとしてI2Cバスに接続する
  Wire.begin();       

  // アドレス0番地から5番地までデータを書き込む
  for (int i=0; i< 6; i++){
   Wire.beginTransmission(DEVICE_ADDRESS);    
      // 対象アドレスに移動
      Wire.write(i >> 8);     // Address(High Byte)   
      Wire.write(i & 0x00FF); // Address(Low Byte)
      // データの書き込み
      Wire.write(i+1);
    Wire.endTransmission();
    delay(5);
  }
  
  // アドレス0番地から5番地までデータを読み込む
  for (int i=0; i< 6; i++){
    Wire.beginTransmission(DEVICE_ADDRESS);
      // 対象アドレスに移動
      Wire.write(i >> 8);     // Address(High Byte)   
      Wire.write(i & 0x00FF); // Address(Low Byte)
    Wire.endTransmission();
    
    // デバイスへ1byteのレジスタデータを要求する
    Wire.requestFrom(DEVICE_ADDRESS, 1);
      
    while (Wire.available() == 0 ){}
    Serial.println(Wire.read());
  }
}
 
void loop() {
}

実行結果





掲示板

ArduinoやRaspberry Piなどの電子工作の掲示板を作成しました。質問やわからない事は電子工作 (Arduino・ラズパイ等)でユーザー同士で情報を共有して下さい。

関連記事



公開日:2017年07月22日
記事NO:02488