「RCサーボ2」の続きです。 前回説明したように、TIMER3 の割込み処理によって自動的にRCサーボの制御信号が送り続けられています。 今回は0.5秒間隔のイベントタイマーとメイン処理で制御角度を変更してクマさんの動きを作ります。 < PICデバイス=PIC18F1320 >

制御角度を規程するワークの値を0.5秒間隔で書き換えてクマさんの動きを作ります。 ワークに送られるデータ・テーブルはプログラム・メモリー上にあって、下図の様に4byte x 10行です。 -60度、±0度、+60度と言う3つの値(TIMER3 のカウンター設定値)が並んでいるだけです。

rsctbl1


メイン処理で書き換えるワークはデータ・メモリー上にあって、下図の内11行目~14行目の4byteです。


rsc_symbol


TIMER0にで作った0.5秒間隔で4byteのデータを転送する書き換え処理を繰り返すことで実現し、4byte転送10回毎に転送元(プログラム・メモリー側)アドレスを rcstbl1 に戻します。 下図は転送元アドレス設定を行うアセンブラ・ソースです。


rcs_block_t_1

転送先のアドレスは、転送処理の先頭で rcs0hth に設定し、下図のように 4byte をブロック転送します。
73行目の TBLRD *+ で転送元から TABLAT にデータを読み出して転送元アドレスを+1し、74行目の MOVFF TABLAT,POSTINC0 で TABLAT の値を転送先データ・メモリーに書き込んで転送先アドレスを+1しています。 これを4回繰り返して転送を完了します。

rcs_block_t_2

クマさんの軽快な動きは以上のソースで実現していますが、もっとゆっくりとした繊細な動きをさせる場合は問題が予想されます。

4byteブロック転送の最中にTIMER3割り込みが発生すると 16bit データの上位と下位が同期しないままRCサーボ制御信号を作り出す可能性があります。 ワークを2つ準備して、TIMER3 割込み処理が書き換え中のワークを参照しないようにすると言った対策が有効ですが、今回の様にラフな制御であればこのまま使えます。


以下で、一連の記事で紹介したソース・ファイル(プロジェクト)をダウンロード出来ます。
LHA書庫です。
 http://jyosou-robot.livedoor.biz/pic/RRP1320-0/RRP1320-0-3.lzh


RCサーボ関連記事のインデックスはこちらです。 → RCサーボ


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。