TJ3BでEEPROMを使う

今更ですが、コンパスのキャリブレーションのために値を覚えさせようと思ったのですが、TJ3BでEEPROMを使うという情報がなく、苦労しました。
TJ3BでEEPROMを使って値を覚えさせることが分かってみればけっこう簡単にできてしまったので、そのやり方を残しておきたいと思います。

この情報は上級者向けです。



TJ3BのマイコンPIC18F2620にはEEPROMが搭載されています。
EEPROMが何か知らない人はここ以外のページで調べてみてください。
「EEPROM 使い方」などと検索すると大量に出てきます。

※注意
調べるとすぐに出てきますが、EEPROMには書き込み制限回数があります。
仕様をよく理解せず無限ループ内でEEPROMの書き込みをするなどして、EEPROMの書き込みができなくなってもこちらは責任を持てません。
仕様を理解したうえで、自己責任で使ってください。

さて、EEPROMを使ってできることを簡単に言うと、スイッチを切っても値を覚えることができる、ということです。この必要性を感じない人は通常の変数を使うべきなので、EEPROMは使うべきではありません。

使用回数に制限があるといっても、10万回や100万回という回数なので、コンパスのキャリブレーションのように日々数回程度やる作業であれば、数十年毎日使っても制限を超えることはありません。安心して使ってください。無限ループや、繰り返しの中で書き込みを行わないように注意すれば大丈夫です。

C-STYLEのc-codeにてEEPROMの読み書き関数が用意されていますので、それを使いました。
サンプルプログラムです。
LCDがない人はprintfを駆使して確認してください。やり方が分からない人は変数の値の確認すら難しいと思うので、EEPROMの使用はおススメしません。



これを実行すると、もともとEEPROMの8番に入っていた値(おそらく255)が3秒LCDに表示された後、100が表示されてプログラムが終わります。
スイッチを一度切って、もう一度実行すると、次は最初に100が3秒表示され、そのあと変わりません。これは100という数字を1回目に8番に覚えさせたので、スイッチを切ってもそれを覚えていて表示できたということです。
これができたら試しに4行目の100の値を変えて試してみてください。

eep_getcとeep_putcという関数を使っています。

変数 = eep_getc(アドレス) ;

アドレスの番号の箱に入っている値を変数に読み出します。
アドレスには0~1023までの数字を入れられます。変数には0~255までの数字が入ります。

eep_putc(アドレス, 値);

アドレスの番号の箱に、値を覚えさせます。
アドレスには0~1023までの数字を入れます。値には0~255までの値を入れます。

不安だったので、TJ3BでEEPROMを使用してもよいのか、念のためダイセン電子工業さんにも問い合わせてみました。現在はモーターの出力調整に先頭から6バイト使用しており、それ以外であれば使用しても問題ないとのこと。(2017/9/20現在)ソフトの更新により、使用範囲が増える場合もあるため、念のため使用する際はD_EIO.hとD_EIO.cを確認してください、とのことでした。
つまり、今はアドレス0~5は使用してはいけないが、6~1023であれば使ってもよいということです。この先もこれらのファイルを確認して使われていなければ使ってよいとのことなので、事前に確認してみてください。

フィールドと白線のしきい値をコンフィグ化すれば、センサーモニターとにらめっこしなくても検出の自動化ができそうですね。

技術情報一覧へ

コメント

このブログの人気の投稿

センサー自作のための参考情報

TJ3BでHMC5883L(QMC5883L)を使う方法

TJ3Bにm5stck UnitV AI Cameraをつなぐ(暫定版)