電源を落としてもデータが消えてほしくないときに使うEEPROM。Arduinoには標準で搭載されていますが、その量はわずか1KBしかありません。1KB=1024バイトなので、英数字で千文字ちょっとです。

微量なりになにかと使い道がある便利な機能ですが、今回はもっとたくさんのデータを保存しなければならない機会があったので、使い方をメモっておきます。

配線

EEOROMのICにはプルアップ・プルダウン抵抗を取り付けます。1,2,3ピンはアドレス指定ピン、7ピンはライトプロテクトの設定ピンですが、Arduinoと一対一で通信するためにはこの設定で問題ありません。

コンデンサははICのノイズ除去の目的で取り付けています。103(0.01μF)~104(0.1μF)くらいの定数のセラミックコンデンサを使うことが一般的です。

※図中では24LC1025を使っていますが、実際に使っているICは24FC1025です

ライブラリの準備

24FC1025はI2Cで通信するシリアル通信タイプのEEPROMです。普通ならwire.hを使ってデータシートを見ながらパケットを作って・・・と、読み書きできるようになるまでかなりの時間と労力がかかってしまいます。

しかし、インターネットとは素晴らしいもので、簡単な操作で読み書きができてしまう関数を作っている方がいらっしゃいました。ありがたいことにライブラリを公開されていたので、使わせて頂くことにします。こちらのサイトからダウンロードできます。

ダウンロードが完了したら、スケッチ >> ライブラリをインクルード >> .ZIP形式のライブラリをインクルード をクリックするとダイアログが立ち上がるので、先ほどダウンロードしたライブラリを取り込みます。

最新のArduino IDEは圧縮形式のまま取りこめるので便利ですね。

スケッチ >> ライブラリをインクルード >>で下の方までスクロールして、「skMC24xxx」があれば成功です。

テストプログラムを実行

ファイル >> スケッチ例 >> skMC24xx >> MC24_1024をクリックします。

すると、サンプルスケッチが呼び出されます。内容は、65533番地からa,b,c,d,e,fを書きこんだ後に同じ番地を読み出すというものです。24FC1025は512kbitsのブロックが二つで1024kbits(=1Mbits)を構成しているので、ブロックをまたぐ(~65535番地と65536番地~)操作も一つの関数でできるということを確かめているサンプルです。

スケッチは既にできているので、あとはコンパイルして書きこむだけです。私はArduino nanoを使いましたが、UNOでも全く同じ動きでした。

書き込んでシリアルモニタを立ち上げると・・・

一瞬、「???」となりましたが、これはprintのフォーマットでHEX(16進数)を指定しているためでした。61はunicodeで”a”を指すため、しっかり書いた通りに読めていますね。試しにprintの中のHEXフォーマットを下記の通り消すと、しっかりaが表示されました。

 //Serial.print(dt2[0],HEX) ;
   ↓
Serial.print(dt2[0]) ;

参考サイト