目次

Rotary Encoder テストパターン生成

 秋月電子のロータリーエンコーダドライブ
 回路キットを半田付けしました。




 ロータリーエンコーダは、手持ちがありますが
 プログラムでエミュレートして、動作をテスト
 しようと考えました。

 ロータリーエンコーダからは、タイミングチャートで
 次のように信号が出力されてきます。



 左回転、右回転で、2信号の出力パターンが異なって
 いますが、4パターン出力でよいと、わかります。

 2進数で出力パターンをみていくと、以下。

11→01→00→10
11→10→00→01

 OUT命令を利用して、これらのパターンを出力すると
 信号パターンをエミュレートできます。
 サブルーチンで、上のパターンだけを生成して
 みると、次のコードでよいはず。

100 @XOUT
110 OUT 1,1:OUT 2,1:WAIT W
120 OUT 1,0:OUT 2,1:WAIT W
130 OUT 1,0:OUT 2,0:WAIT W
140 OUT 1,1:OUT 2,0:WAIT W
150 RTN

 遅延は、変数Wに入れた値で指定します。

 OUT命令は、個別のピンの処理の他に
 OUT_1からOUT_6を、まとめてバスと
 しても扱えるので、次の記述でもよい
 はず。

100 @XOUT
110 OUT 3:WAIT W
120 OUT 1:WAIT W
130 OUT 0:WAIT W
140 OUT 2:WAIT W
150 RTN

 このサブルーチンを使うプログラムを
 書いてみると、以下。

10 '
20 LET W,120
30 @LOOP
40 GSB @XOUT
50 IF BTN() GOTO @EXIT
60 GOTO @LOOP
70 @EXIT
80 OUT 0
90 END
100 @XOUT
110 OUT 3:WAIT W
120 OUT 1:WAIT W
130 OUT 0:WAIT W
140 OUT 2:WAIT W
150 RTN

 サブルーチンは、配列に格納した値を
 取り出して使うと、短くできます。

100 @XOUT
110 FOR I=1 TO 4
120   OUT [I]:WAIT W
130 NEXT
140 RTN

 配列を利用する場合、値を格納する必要が
 あるので、呼び出し側で指定します。
 これもサブルーチンで用意しておけば
 呼び出すだけでよくなります。

200 @INIT
210 LET [1],3,1,0,2
220 ' LET [1],3,2,0,1
230 W = 120
240 RTN

 220行目では、コメントにしていますが
 別の出力パターンを格納しています。

 後で変更しやすいようにコメントで
 内容を確保しておくのは、重要。

 用意した2サブルーチンで、書き換えてみると
 次のようになります。

10 '
20 GSB @INIT
30 @LOOP
40 GSB @XOUT
50 IF BTN() GOTO @EXIT
60 GOTO @LOOP
70 @EXIT
80 OUT 0
90 END
100 @XOUT
110 OUT 3:WAIT W
120 OUT 1:WAIT W
130 OUT 0:WAIT W
140 OUT 2:WAIT W
150 RTN
200 @INIT
210 LET [1],3,1,0,2
220 ' LET [1],3,2,0,1
230 W = 120
240 RTN

 配列に初期値を格納する方式だと
 呼び出し側の変更は、わずかだと
 わかります。


目次

inserted by FC2 system