シーケンス動作をさせるために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.