シーケンス動作をさせるためにPICで使えそうなもの、と資料を見るとデータ用にEEPROMが用意されていることが分かる。PIC12F675には128バイトのEEPROMが組み込まれており、プログラムで読み書きが可能だ。
データをEEPROMに書き込むのは少々面倒そうなので、ここでは読み出しだけでシーケンス動作を実現させたい。書込みはソースファイルで指定してHEXファイルに埋め込み、プログラムと一緒に書いてしまおう。
シーケンス動作については次のようなフォーマットを考えてみた。位置指定は1から255の間で設定するので1バイト分必要だ。また、時間は割り込みの単位時間となる20ミリ秒単位で指定するとよさそうだ。こちらも1から255で設定するので1バイト分、合計2バイトを組で使うことになる。
時間0の指定を行うと先頭に戻るというループにし、位置0はサーボ制御を行わないことにする。これで最大64stepの動作が可能となる。ちょっと少ない気もするがテストなので我慢することにしよう。
EEPROMの読み出しは(書込みに比べると)簡単だ。読み出しアドレスをEEADR(9bh)にセットし、EECON1(9Ch)のRDビット(第0ビット)をセットするとEEDAT(9Ah)にデータが入る。
今回はEEPROMの読み出しをメインプログラムで担当することにした。サーボには位置と残り時間と2つのパラメータがあるので、時間が0になった時点で次のサーボデータを呼び出しセットするのがメインルーチンの役目となる。
| ;内蔵EEPROMからデータを読み込んで移動 |
| ▼▼ | LIST P=PIC12F675 |
|---|---|
| ▼▼ | INCLUDE "P12F675.INC" |
| ▼▼ | __CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF |
| errorlevel-302; エラー302以下は無表示 | |
| ▼▼ | CBLOCK | 20h |
|---|---|---|
| RC1POS; RC1のサーボ位置(1-中心-80-FF) | ||
| ▼▼ | RC1TIM | ; RC1の保持時間(0で次データ読み出し) | |||
|---|---|---|---|---|---|
| EERPOS; EEPROMの読み出し位置 | |||||
| ▼▼ | COUNT | ; LOOPワーク | |||
|---|---|---|---|---|---|
| ▼▼ | WBUF | ; LOOPワーク | |||
| ▼▼ | SBUF | ; LOOPワーク | |||
| ENDC | |||||
| ▼▼ | ORG | 0 | |
|---|---|---|---|
| ▼▼ | GOTO | MAIN | |
| ORG4 | |||
Copyright © ITmedia, Inc. All Rights Reserved.