目次
前
次
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
配列に初期値を格納する方式だと
呼び出し側の変更は、わずかだと
わかります。
目次
前
次