ArduinoEEPROMを使用してパワーサイクル間でデータを保存する方法

ArduinoEEPROMを使用してパワーサイクル間でデータを保存する方法

Arduinoがオフのときにデータを保存できることをご存知ですか?フラッシュメモリに保存されているスケッチではありません。私はEEPROMの可変データについて話している。読み書きの方法と、プロジェクトで何ができるかを紹介しますので、ぜひご参加ください。





Arduinoを初めて使用する場合は、必ず 初心者ガイド





EEPROMとは何ですか?

EEPROMはの略です 電気的に消去可能なプログラム可能な読み取り専用メモリ 。これは一種の不揮発性メモリです。それが何を意味するのか理解していなくても心配しないでください。電源を切った状態でもデータを保存するだけです( 、データを保持するために電気が必要です)。





EEPROMは、Matrix Creator Pi HATで使用されるフィールドプログラマブルゲートアレイ(FPGA)など、無数のプロセッサに組み込まれています。すべてのArduinoにはEEPROMがありますが、容量はモデルごとに異なります。各ボードの詳細については、購入ガイドをご覧ください。

それはどのように機能しますか?

EEPROMは電気的に消去され、 ファウラー-ノルドハイムトンネリング 。使用するために技術的な詳細を知る必要はありません。基本的な前提は、電気を使用してバイナリデータ(バイナリとは)を変更することです。電子的に読み取り、消去、再書き込みが可能です。



幸いなことに、 Arduino言語 コンピュータサイエンスの学位を必要とせずに、データを簡単に変更できます。

平均寿命

ArduinoでEEPROMを使用するのは簡単ですが、寿命は限られています。 EEPROMは、100,000回の読み取り/消去サイクルを処理するように指定されています。これは、EEPROMが不安定になる前に、データを100,000回書き込んだ後、消去/再書き込みできることを意味します。実際には、 Atmel (Arduinoの「チップ」のメーカー)半導体は、すべてのプロセッサの許容誤差に応じて、より多くのサイクル数またはより少ないサイクル数を処理する場合があります。





場所が何度も書き込まれ、消去されると、信頼性が低下し始める可能性があります。正しいデータを返さないか、隣接ビットから値を返す可能性があります。

これは多くの書き込みのように聞こえるかもしれませんが、プログラムで( ループ 、 例えば)。データを読み取ってもシリコンは劣化しません。 書くだけです 。恐れることなくEEPROMから好きなだけデータを読み取ることができます!





この制限は各メモリ位置に適用されることに注意することが重要です。 ArduinoではEEPROMで1,000以上のメモリ位置を使用できる場合があるため、1つの位置に何度も書き込むと、影響を受けるのはその位置だけであり、他の場所には影響しません。後で話し合います ウェアレベリング 、データを均等に分散することでEEPROMの摩耗を減らすことができます。これはSSDが利用するものです。

それは何に役立ちますか?

EEPROMはArduinoプロジェクトに非常に役立ちます。電源を切ってもデータを記憶しているので、Arduinoの状態を保存できます。たぶん、その位置や残りの「弾薬」の量を記憶するレーザー砲塔を構築することができます。これを使用してアプライアンスを制御し、アプライアンスがアクティブ化された回数をログに記録できます。

EEPROMは、設定やハイスコアなどに最適です。複雑なデータを定期的に書き込みたい場合は、イーサネットシールド(SDスロットが組み込まれている)またはRaspberryPiを検討してください。

読み書き

理論が終わったので、いくつかのデータを読み書きする方法を見てみましょう!まず、ライブラリを含めます(これはArduino IDEに付属しています):

#include

次に、いくつかのデータを書き込みます。

EEPROM.write(0, 12);

これは番号を書き込みます 12 EEPROMの場所へ 0 。各書き込みには3.3ミリ秒かかります( MS 、1000ms = 1秒)。手紙を書くことができないことに注意してください( char )、0から255までの数字のみが許可されます。これが、EEPROMが設定やハイスコアには理想的ですが、プレーヤーの名前や単語にはあまり適していない理由です。この方法を使用してテキストを保存することは可能です(アルファベットの各文字を数字にマップできます)が、複数のメモリ位置(各文字に1つの位置)が必要になります。

そのデータの読み取り方法は次のとおりです。

8GBのRAMのページングファイルサイズ
EEPROM.read(0);

ゼロは、以前に書き込んだアドレスです。以前にアドレスに書き込んだことがない場合は、最大値( 255 )。

利用可能なもう少し便利な方法がいくつかあります。小数点以下の桁数または文字列を格納したいとします。

EEPROM.put(2,'12.67');

これにより、データが複数の場所に書き込まれます。これは、自分で簡単に書き込むことができますが、それでも便利です。これが書き込まれた場所の数を追跡する必要があるため、誤ってデータを上書きすることはありません。あなたは使用する必要があります 得る このデータを再度取得する方法:

float f = 0.00f;
EEPROM.get(2, f);

getからの値はfloatに保存されます NS 変数。これがどのように初期化されるかに注意してください 0.00f 値として。 NS NS この変数に多数を格納する可能性があることをコンパイラーに通知するため、コンパイル中にいくつかの追加構成をセットアップします。

NS EEPROMドキュメントArduinoのWebサイト もっとたくさんの例があります。

ウェアレベリング

ウェアレベリングは、EEPROMの摩耗を減らし、寿命を延ばすために使用される手法です。小さなプロジェクトのみに取り組んでいる場合は、これについて心配する必要はありません。

EEPROMの寿命を延ばすためにできる最も簡単なことは、書き込みを特定の場所に制限することです。これを行うには、最初にアドレスを読み取ります。書き込みたい値がすでに存在する場合は、再度書き込む必要はありません(データを読み取っても害はありません)。これを行う方法は次のとおりです。

int safeWrite(int data, address) {
if(EEPROM.read(address) != data) {
EEPROM.write(address, data);
}
}

これは非常に単純なコードですが、整数に対してのみ機能します。車輪の再発明の代わりに、ArduinoEEPROMライブラリに組み込まれている関数を使用してください。

EEPROM.update(address, val);

このメソッドには、 書きます 方法ですが、必要な書き込みの数が大幅に減る可能性があります。

大量のデータを書き込む必要があり、シリコンの消耗が心配な場合は、より多くのデータを使用しますが、書き込み回数を追跡できます。これがでの大まかな実装です 擬似コード

var address = 0
var writeCount = 0
if(writeCount > 75,000)
writeCount = 0
address += 1
EEPROM.write(address, data)

アドレスとwriteCountをEEPROMに保存する必要があります(そしてwriteCountはアドレスの場所に分割する必要があります)。ほとんどの場合、このレベルの保護は必要ありません。 Arduinoもとても安いので、バックアップを購入する方が簡単かもしれません!

これで、いくつかの素晴らしいプロジェクトを作成するのに十分な知識が得られます。あなたが何かクールなものを作ったら私たちに知らせてください!写真に写っているすべてのデバイスを認識できますか?以下にコメントを残してください!

共有 共有 つぶやき Eメール VirtualBoxLinuxマシンを過給するための5つのヒント

仮想マシンによって提供されるパフォーマンスの低下にうんざりしていませんか? VirtualBoxのパフォーマンスを向上させるためにすべきことは次のとおりです。

次を読む
関連トピック
  • DIY
  • Arduino
  • エレクトロニクス
著者について ジョーコバーン(136件の記事が公開されました)

Joeは、英国のリンカーン大学でコンピュータサイエンスを卒業しています。彼はプロのソフトウェア開発者であり、ドローンを飛ばしたり音楽を書いたりしていないときは、写真を撮ったりビデオを制作したりしていることがよくあります。

ジョーコバーンのその他の作品

ニュースレターを購読する

ニュースレターに参加して、技術的なヒント、レビュー、無料の電子書籍、限定セールを入手してください。

購読するにはここをクリックしてください
カテゴリ Diy