連載
» 2005年07月22日 15時43分 公開

夏でも楽しい工作教室:PICでもっと遊ぶその3「EEROMを使ってサーボを“ガガガ”と動かす」 (1/3)

前回、AD変換回路をくみ上げて何とかサーボを動かした。あくまでテスト用、ということで可変ボリュームを使ったが、本来の野望を実現するためにはシーケンス動作してくれないと困る。というわけで今回はEEROMをはじめとするメモリを活用することになる。

[小林哲雄,ITmedia]

勝手に動かすデータとしてEEROMを使う

 シーケンス動作をさせるために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になった時点で次のサーボデータを呼び出しセットするのがメインルーチンの役目となる。

 ;
 ; RCサーボの制御テスト 16bit timer version
 ;内蔵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)
 ;RC2POS
▼▼  RC1TIM ; RC1の保持時間(0で次データ読み出し)
 EERPOS; EEPROMの読み出し位置
 
 
▼▼  COUNT ; LOOPワーク
▼▼  WBUF ; LOOPワーク
▼▼  SBUF ; LOOPワーク
 ENDC
 
▼▼  ORG 0
▼▼  GOTO MAIN
 ORG4
 ;(ソースコードは次のページに続く……)
       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

この記事が気に入ったら
ITmedia PC USER に「いいね!」しよう