• Skip to main content
  • Skip to primary sidebar
  • Skip to footer
  • HOME
  • Arduino
    • Arduino初心者編
    • Arduino基礎編
    • Arduino応用編
    • Arduino実践編
  • Raspberry Pi
  • microbit
  • XBee
  • Scratch
  • Contact Us
  • Privacy Policy

STEMSHIP

ものづくりを通して、科学を学ぼう!

現在の場所:ホーム / Arduino / Arduino初心者編 / Arduino初心者編:外部EEPROMにデータを保存する

Arduino初心者編:外部EEPROMにデータを保存する

2020年8月30日 by STEMSHIP コメントを書く

内部メモリが十分でない場合は、外部EEPROMモジュールを使用することも可能です。例えば、RTCモジュールDS3231はタイマに加えて、4096バイトのEEPROMメモリを搭載したAT24C32チップを搭載しています。タイマとEEPROMは電源とI²Cバスを共有していますが、それ以外は完全に独立しています。このモジュールは、もともとデータロガーとして使用するために開発されたものなので、このような構成になっています。

図1 DS3231 AT24C32 I2Cモジュール

タイマとEEPROMのI²Cアドレスは異なるため、両方のチップを別々に制御することができます。さらに、AT24C32のEEPROMチップは、はんだパッドをブリッジすることでI²Cバスアドレスを変更できます。手順は液晶バックパック(HD44780)の場合と全く同じです。このように、1つのI²Cバスで最大8個のメモリを動作させることができます。

I²CアドレスA0A1A2
80LowLowLow
81HighLowLow
82LowHighLow
83HighHighLow
84LowLowHigh
85HighLowHigh
86LowHighHigh
87(デフォルト)HighHighHigh
表1 はんだパッドとI²Cアドレスの対応表

はんだパッドをブリッジすることで、チップの対応する入力に Lowを設定できます。ブリッジをしない場合は、プルアップ抵抗でHighを自動的に設定しています。したがって、はんだパッドが変更されていない状態でのデフォルトアドレスは87です

RTCモジュールに含まれるAT24C32を使用して、前回の例を再現してみましょう。

図2 RTCモジュールのEEPROMチップを使用した回路

EEPROMを簡単に制御できるように、ライブラリ uEEPROMlib.h をインストールします。

図3 ライブラリuEEPROMLibは、ライブラリマネージャを介してインストールすることができます。

下記のプログラムは基本的には前回と同様のプログラムなので、相違点だけを以下にコメントします。

#define BUTTON1 9
#define BUTTON2 8
#define LED 6

#include "uEEPROMLib.h"

uEEPROMLib externalMemory(87);        //(1)

byte Brightness;
long Timer;

void setup() {
  pinMode(BUTTON1,INPUT_PULLUP);
  pinMode(BUTTON2,INPUT_PULLUP);
  pinMode(LED,OUTPUT);
  
  Wire.begin();        //(2)
  Brightness = externalMemory.eeprom_read(0);        //(3)
  
  analogWrite(LED, Brightness);
}

void loop() {
  if(!digitalRead(BUTTON1))
  {
    if(Brightness < 255)
      Brightness++;
    analogWrite(LED, Brightness);

    Timer = millis() + 1000;
    while(!digitalRead(BUTTON1))
    {
      if(millis() > Timer)
      {
        if(Brightness < 255)
          Brightness++;
        analogWrite(LED, Brightness);  
        delay(10);  
      }
    }
    externalMemory.eeprom_write(0,Brightness);        //(4)
  }

  if(!digitalRead(BUTTON2))
  {
    if(Brightness > 0)
      Brightness--;
    analogWrite(LED, Brightness);

    Timer = millis() + 1000;
    while(!digitalRead(BUTTON2))
    {
      if(millis() > Timer)
      {
        if(Brightness > 0)
          Brightness--;
        analogWrite(LED, Brightness);  
        delay(10);  
      }
    }
    externalMemory.eeprom_write(0,Brightness);
  }
}

(1) クラスuEEPROMLibのインスタンスとしてのオブジェクト。外部メモリは、このモジュールを表しています。ここではI²Cアドレスを引数として渡す必要があります。

(2) I²C接続はマスタとして開始されます。Wire.h ライブラリはすでに uEEPROMLib.h の中で実行されているため、インクルードする必要はありませんが、2回インクルードしてもコンパイラが無視するので、間違いではありません。

(3) 本オブジェクトの関数 eeprom_read()は、引数として渡されたメモリアドレス(本チップ上では 0~4095 の範囲)から 1 バイトのデータを読み込みます。

(4) 書き込みも同様で、ここで使用されている関数eeprom_write()は、メモリアドレスとデータ(1バイト)を引数にすることで書き込まれます。

ここでも、各メモリアドレスは8ビットしか格納できません。しかし、ライブラリには、より大きなデータを簡単に分割できる関数が用意されています。興味のある方は、他のライブラリと同様に、対応するドキュメントに詳細な情報が記載されています。

Filed Under: Arduino初心者編 関連タグ:EEPROM

Reader Interactions

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

最初のサイドバー

CONTACT US

  • Facebook
  • Twitter
  • Youtube

More to See

Arduinoベースのセンサノード:XBeeデータ収集ノードの製作

2021年9月27日 By STEMSHIP

Arduinoベースのセンサノード:Arduinoを使った温度センサの作製

2021年9月21日 By STEMSHIP

XBeeモジュールとBMP280センサを使用してデータ収集する

2021年5月31日 By STEMSHIP

XBeeモジュールでMicroPythonを使ってセンサを読み取る

2021年5月24日 By STEMSHIP

XBeeモジュールでセンサを読み取る:センサノードの設定と測定

2021年5月17日 By STEMSHIP

カテゴリー

  • Arduino (44)
    • Arduino初心者編 (15)
    • Arduino基礎編 (11)
    • Arduino実践編 (4)
    • Arduino応用編 (11)
    • Arduino番外編 (3)
  • MakeyMakey (1)
  • microbit (11)
  • Raspberry Pi (13)
  • Scratch (6)
  • STEM教育 (5)
  • XBee (15)
  • ものづくり教育 (2)
  • 子供の教育 (2)
  • 科学 (6)
  • 算数 (5)

Tags

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Footer

最近の投稿

  • Arduinoベースのセンサノード:スケッチ(プログラム)の作製
  • Arduinoベースのセンサノード:XBeeデータ収集ノードの製作
  • Arduinoベースのセンサノード:Arduinoを使った温度センサの作製
  • XBeeモジュールとBMP280センサを使用してデータ収集する
  • XBeeモジュールでMicroPythonを使ってセンサを読み取る

タグ

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Search

2025年5月
月 火 水 木 金 土 日
 1234
567891011
12131415161718
19202122232425
262728293031  
« 10月    

Copyright © 2025 · STEMSHIP.COM