2016-06-24 23:36 | カテゴリ:PIC応用回路

リモコンとしてある程度実用に供する
EEPROMを使う



PICの電子工作をしていると、ちょっとしたデータを電源OFFしても記憶しておきたい時がありました。

先日から製作しているVRを利用したジョイスティックの、実際の動作範囲や補正係数を電源投入後に内部で計算し、それに基づいて、内部処理をするのですが、電源をOFFにしてしまうと、それらのデータもリセットされ、再び電源を入れた際に、また同じ事をしなければなりません。
もし、この様な補正データなどをPICの中に記憶して、次回起動したときにそれが利用できればありがたいです。

実は、ある種類のPICには、内部にEEPROM(不揮発性の読み書き可能なROM)があり、そのデータは、電源を切っても保持されているので、これを利用すれば上記の目的がかないます。
PICの製造元であるマイクロチップ社のWEBを見ていたら、このEEPROMにアクセスする方法が書いてありましたので、ひょっとして皆さんのお役に立つかと思いまとめてみました。

EEPROMに読み書きするには、いくつかの方法が用意されています。
簡単な方法では、XC8には、EEPROMに書き込む関数や読み出す関数がちゃんと用意されています。
しかし、EEPROMのどの部分(アドレス)に書き込むのか?また、どのデータを読み出すのかなど、アドレスをちゃんと管理しなければならず、面倒です。

eeprom01.jpg

eeprom02.jpg

eeprom03.jpg

eeprom04.jpg

そこで、私が利用した方法は、EEPROM Qualifierという方法です。

これは、プログラム内で使用する変数の定義を、EEPROM内に記憶領域をとるという方法で、非常に簡単です。
プログラム中では、EEPROMを意識する必要は無く、通常の変数として、扱います。
電源を再投入したときには、値がちゃんと保持されています。

これが実際の私のプログラムで使用した部分です。(これだけです)
通常の変数と同様に読み書きできます。(たぶん実行速度は遅くなると思いますが)

eeprom_EXA.jpg

実際に詳細はこちらを御参照ください。

http://microchip.wikidot.com/faq:36


と言う訳で、EEPROMの利用により、補正値の長時間保持にも成功し、当初考えていた赤外線リモコンの送信機がやっと出来ました。

左右二組のXY軸のジョイスティックと、左右にプッシュボタンを備え、毎秒約20回程度の頻度で、各ジョイスティックのAD変換値とプッシュボタンの状態を赤外線RS232通信で送信する仕様です。
初回のみ電源投入後、黄色LEDが早く点滅している間、左右のジョイスティックをゆっくり、ぐりぐり回転させます。
LEDの点滅が終了したら、OKです。





実際の使用では、単に電源を入れて1-2秒待って、ジョイスティックを動かすと赤外線通信がなされ、PCに表示されます。
現時点のプログラムは、動作確認用のため、一連のデータ通信には、3秒の「待ち時間」が挿入されています。




最終的なプログラムはここです。(動作確認用のDelay3秒が入っています)

Prog030.txt


これで、完成です !!
お付き合いいただいて、ありがとうございました!
【ジャンル】:趣味・実用 【テーマ】:ホビー・おもちゃ
コメント(4)

管理者のみに表示する