赤道儀を駆動させる際に問題になることの1つにバックラッシュがあります。
バックラッシュとは運動方向に意図してもうけられた隙間の事です。この隙間があるからギアはスムーズに動くことができるのです。
しかし、その隙間によってモーターの動き出す時間と、ギアを伝って最終的に力が加わるまでに時間差が生じてしまいます。減速率を高めるために複数のギアを使っている場合、時間差は拡大してしまいます。
この時間差の影響を受けるのはオートガイドをしている時の赤緯体の駆動です。赤緯体は普段は停止していますがオートガイダーからDEC+あるいはDEC-の信号を受けた時にモーターが動きだし補正をします。同じ方向に補正を続けている時には問題は起きないのですが、補正方向が逆になった場合、信号と赤道儀の動作に時間差が生じます。
バックラッシュをなくすために、メーカーはギア数を減らしてマイクロステップ駆動(パルスモーターを電圧の微妙な調整でゆっくりと動かす事)を行ったり、あるいは、ハーモニックギアという特殊なギアを使ったりしていますが、どちらもコストがかかるため、使われているのは高級赤道儀に限られています。
そこでプログラムによって時間差を少なくする方法を考えました。
アルゴリズムは下の図の通りです。(これが筒状になって縦に連なっていると考えて下さい)
MOVE1~8はDEC+の信号を受けた時の駆動状態。MOVE9~16はDEC-の駆動状態です。(この場合1-2相励磁駆動なので8段階あります)
信号を受けていない時はSTOP1~16の何処かをループしています。
例えばSTOP1をループしているとします。
その時にDEC+の信号を受けます。すると、まずC1でチャタリング(ノイズ)のチェックを受けて信号が正しいと認識されるとMOVE2に進みます。(ノイズだった場合はSTOP1に戻ります)
そのまま信号を受け続けた場合、MOVE3、MOVE4と進んでいきます。
MOVE7の所で信号が途絶えたとします。するとSTOP7に行き、そこでループをします。
今度はSTOP7でDEC-の信号を受けたとします。
するとRV7に進みます。ここで、まずチャタリングのチェックを受け信号が正しいと認識されるとモーターの回転速度を通常より速めて数ステップDEC-の回転方向に駆動させます。(例えば2-2相励磁駆動で12ステップとか)
ここで注意ですが、回転数を速くしすぎるとギアに負担がかかるのと、モーターのトルクが下がってしまうので、普段の数倍程度が良いと思います。
そしてMOVR15へ進みMOVE14、MOVE13という具合に駆動します。
そしてMOVE9で信号が途絶えたとします。するとSTOP9へいきここをループします。
(たどった経路を赤で示してあります)
これらを繰り返していきます。すると、前回補正した方向と同じ方向に補正する場合はそのまま、逆方向に補正する場合は一瞬モーターを速く回してから補正することになります。
このアルゴリズムで大事な点はRV1~16でモーターをどれだけ回すかという事です。これは赤道儀に使用しているギアによって異なりますので、慎重に計測する事が求められます。
実際のプログラムはこちら→(このプログラムではPICのRB4~7にLED、RB0~3にモーターへの信号が出力される仕様です。)
; 赤道儀コントローラー赤経軸1-2相励磁駆動PIC16F648A VR2020/08 BY STARRYZOBI
; CLOCK 20.000MHz
; このバージョンでは恒星に対して0.5倍速から1.75倍速まで16段階の駆動を選択できる。
; バックラッシュを打ち消すために逆回転になった時にハイスピードで24ステップ回す。
; また、回転速度は徐々に速くして最高速になった後遅くする
;
; 0 = 1.75倍速
; 1 = 1.67倍速
; 2 = 1.58倍速
; 3 = 1.50倍速
; 4 = 1.42倍速
; 5 = 1.33倍速
; 6 = 1.25倍速
; 7 = 1.17倍速
; 8 = 1.08倍速
; 9 = 1.00倍速
; 10 = 0.92倍速
; 11 = 0.83倍速
; 12 = 0.75倍速
; 13 = 0.67倍速
; 14 = 0.58倍速
; 15 = 0.50倍速
LIST P=PIC16F648A ;
INCLUDE P16F648A.INC ;
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF & _BODEN_ON & _LVP_OFF & _MCLRE_OFF
GPR_1 EQU 020h ; GPRの1バイト目にGPR_1と言う名前を付ける
GPR_2 EQU 021h ; GPRの2バイト目にGPR_2と言う名前を付ける
GPR_3 EQU 022h ; GPR
GPR_4 EQU 023h ; GPR
GPR_5 EQU 024h
GPR_6 EQU 025h
GPR_7 EQU 024h
GPR_8 EQU 025h
GPR_9 EQU 026h
GPR_10 EQU 027h
GPR_11 EQU 028h
GPR_12 EQU 029h
GPR_13 EQU 02Ah
GPR_14 EQU 02Bh
GPR_15 EQU 02Ch
GPR_16 EQU 02Dh
GPR_17 EQU 02Eh
GPR_18 EQU 02Fh
GPR_19 EQU 030h
GPR_20 EQU 031h
GPR_21 EQU 032h
GPR_22 EQU 033h
GPR_23 EQU 034h
GPR_24 EQU 035h
ORG 0 ; リセットベクタ(0番地)を指定する。
INIT
; << PICの初期化 >>
CLRF PORTA
MOVLW 07h
MOVWF CMCON ; PORTAはI/Oデジタル
; < I/O方向定義>
BSF STATUS,RP0 ; バンク1へ切り替え
MOVLW 0FFh ; PORTAは全て入力
MOVWF TRISA
CLRF TRISB ; ファイルレジスタTRISBをクリア(0) → PORTBは全て出力
BCF STATUS,RP0 ; STATUSのRP0をクリア(0) → バンク0
; << 停止状態 >>
STOP1 CLRF PORTB
BTFSC PORTA,0
GOTO C1
BTFSC PORTA,1
GOTO RV1
GOTO STOP1
STOP2 CLRF PORTB
BTFSC PORTA,0
GOTO C2
BTFSC PORTA,1
GOTO RV2
GOTO STOP2
STOP3 CLRF PORTB
BTFSC PORTA,0
GOTO C3
BTFSC PORTA,1
GOTO RV3
GOTO STOP3
STOP4 CLRF PORTB
BTFSC PORTA,0
GOTO C4
BTFSC PORTA,1
GOTO RV4
GOTO STOP4
STOP5 CLRF PORTB
BTFSC PORTA,0
GOTO C5
BTFSC PORTA,1
GOTO RV5
GOTO STOP5
STOP6 CLRF PORTB
BTFSC PORTA,0
GOTO C6
BTFSC PORTA,1
GOTO RV6
GOTO STOP6
STOP7 CLRF PORTB
BTFSC PORTA,0
GOTO C7
BTFSC PORTA,1
GOTO RV7
GOTO STOP7
STOP8 CLRF PORTB
BTFSC PORTA,0
GOTO C8
BTFSC PORTA,1
GOTO RV8
GOTO STOP8
; << 停止状態 >>
STOP9 CLRF PORTB
BTFSC PORTA,1
GOTO C9
BTFSC PORTA,0
GOTO RV9
GOTO STOP9
STOP10 CLRF PORTB
BTFSC PORTA,1
GOTO C10
BTFSC PORTA,0
GOTO RV10
GOTO STOP10
STOP11 CLRF PORTB
BTFSC PORTA,1
GOTO C11
BTFSC PORTA,0
GOTO RV11
GOTO STOP11
STOP12 CLRF PORTB
BTFSC PORTA,1
GOTO C12
BTFSC PORTA,0
GOTO RV12
GOTO STOP12
STOP13 CLRF PORTB
BTFSC PORTA,1
GOTO C13
BTFSC PORTA,0
GOTO RV13
GOTO STOP13
STOP14 CLRF PORTB
BTFSC PORTA,1
GOTO C14
BTFSC PORTA,0
GOTO RV14
GOTO STOP14
STOP15 CLRF PORTB
BTFSC PORTA,1
GOTO C15
BTFSC PORTA,0
GOTO RV15
GOTO STOP15
STOP16 CLRF PORTB
BTFSC PORTA,1
GOTO C16
BTFSC PORTA,0
GOTO RV16
GOTO STOP16
; << チャタリング確認 >>
C1 CALL T483
BTFSS PORTA,0
GOTO STOP1
GOTO MOVE2
C2 CALL T483
BTFSS PORTA,0
GOTO STOP2
GOTO MOVE3
C3 CALL T483
BTFSS PORTA,0
GOTO STOP3
GOTO MOVE4
C4 CALL T483
BTFSS PORTA,0
GOTO STOP4
GOTO MOVE5
C5 CALL T483
BTFSS PORTA,0
GOTO STOP5
GOTO MOVE6
C6 CALL T483
BTFSS PORTA,0
GOTO STOP6
GOTO MOVE7
C7 CALL T483
BTFSS PORTA,0
GOTO STOP7
GOTO MOVE8
C8 CALL T483
BTFSS PORTA,0
GOTO STOP8
GOTO MOVE1
C9 CALL T483
BTFSS PORTA,1
GOTO STOP9
GOTO MOVE16
C10 CALL T483
BTFSS PORTA,1
GOTO STOP10
GOTO MOVE9
C11 CALL T483
BTFSS PORTA,1
GOTO STOP11
GOTO MOVE10
C12 CALL T483
BTFSS PORTA,1
GOTO STOP12
GOTO MOVE11
C13 CALL T483
BTFSS PORTA,1
GOTO STOP13
GOTO MOVE12
C14 CALL T483
BTFSS PORTA,1
GOTO STOP14
GOTO MOVE13
C15 CALL T483
BTFSS PORTA,1
GOTO STOP15
GOTO MOVE14
C16 CALL T483
BTFSS PORTA,1
GOTO STOP16
GOTO MOVE15
; << リバースモード >>
RV1 CALL T483
BTFSS PORTA,1
GOTO STOP1
MOVLW 19h
MOVWF PORTB
CALL T09
MOVLW 2Ch
MOVWF PORTB
CALL T07
MOVLW 46h
MOVWF PORTB
CALL T05
MOVLW 83h
MOVWF PORTB
CALL T03
MOVLW 19h
MOVWF PORTB
CALL T01
MOVLW 2Ch
MOVWF PORTB
CALL T00
MOVLW 46h
MOVWF PORTB
CALL T000
MOVLW 83h
MOVWF PORTB
CALL T0000
MOVLW 19h
MOVWF PORTB
CALL T0000
MOVLW 2Ch
MOVWF PORTB
CALL T0000
MOVLW 46h
MOVWF PORTB
CALL T0000
MOVLW 83h
MOVWF PORTB
CALL T0000
MOVLW 19h
MOVWF PORTB
CALL T0000
MOVLW 2Ch
MOVWF PORTB
CALL T0000
MOVLW 46h
MOVWF PORTB
CALL T0000
MOVLW 83h
MOVWF PORTB
CALL T0000
MOVLW 19h
MOVWF PORTB
CALL T0000
MOVLW 2Ch
MOVWF PORTB
CALL T000
MOVLW 46h
MOVWF PORTB
CALL T00
MOVLW 83h
MOVWF PORTB
CALL T01
MOVLW 19h
MOVWF PORTB
CALL T03
MOVLW 2Ch
MOVWF PORTB
CALL T05
MOVLW 46h
MOVWF PORTB
CALL T07
MOVLW 83h
MOVWF PORTB
CALL T09
GOTO MOVE9
RV2 CALL T483
BTFSS PORTA,1
GOTO STOP2
MOVLW 19h
MOVWF PORTB
CALL T09
MOVLW 2Ch
MOVWF PORTB
CALL T07
MOVLW 46h
MOVWF PORTB
CALL T05
MOVLW 83h
MOVWF PORTB
CALL T03
MOVLW 19h
MOVWF PORTB
CALL T01
MOVLW 2Ch
MOVWF PORTB
CALL T00
MOVLW 46h
MOVWF PORTB
CALL T000
MOVLW 83h
MOVWF PORTB
CALL T0000
MOVLW 19h
MOVWF PORTB
CALL T0000
MOVLW 2Ch
MOVWF PORTB
CALL T0000
MOVLW 46h
MOVWF PORTB
CALL T0000
MOVLW 83h
MOVWF PORTB
CALL T0000
MOVLW 19h
MOVWF PORTB
CALL T0000
MOVLW 2Ch
MOVWF PORTB
CALL T0000
MOVLW 46h
MOVWF PORTB
CALL T0000
MOVLW 83h
MOVWF PORTB
CALL T0000
MOVLW 19h
MOVWF PORTB
CALL T0000
MOVLW 2Ch
MOVWF PORTB
CALL T000
MOVLW 46h
MOVWF PORTB
CALL T00
MOVLW 83h
MOVWF PORTB
CALL T01
MOVLW 19h
MOVWF PORTB
CALL T03
MOVLW 2Ch
MOVWF PORTB
CALL T05
MOVLW 46h
MOVWF PORTB
CALL T07
MOVLW 83h
MOVWF PORTB
CALL T09
GOTO MOVE10
RV3 CALL T483
BTFSS PORTA,1
GOTO STOP3
MOVLW 13h
MOVWF PORTB
CALL T09
MOVLW 29h
MOVWF PORTB
CALL T07
MOVLW 4Ch
MOVWF PORTB
CALL T05
MOVLW 86h
MOVWF PORTB
CALL T03
MOVLW 13h
MOVWF PORTB
CALL T01
MOVLW 29h
MOVWF PORTB
CALL T00
MOVLW 4Ch
MOVWF PORTB
CALL T000
MOVLW 86h
MOVWF PORTB
CALL T0000
MOVLW 13h
MOVWF PORTB
CALL T0000
MOVLW 29h
MOVWF PORTB
CALL T0000
MOVLW 4Ch
MOVWF PORTB
CALL T0000
MOVLW 86h
MOVWF PORTB
CALL T0000
MOVLW 13h
MOVWF PORTB
CALL T0000
MOVLW 29h
MOVWF PORTB
CALL T0000
MOVLW 4Ch
MOVWF PORTB
CALL T0000
MOVLW 86h
MOVWF PORTB
CALL T0000
MOVLW 13h
MOVWF PORTB
CALL T0000
MOVLW 29h
MOVWF PORTB
CALL T000
MOVLW 4Ch
MOVWF PORTB
CALL T00
MOVLW 86h
MOVWF PORTB
CALL T01
MOVLW 13h
MOVWF PORTB
CALL T03
MOVLW 29h
MOVWF PORTB
CALL T05
MOVLW 4Ch
MOVWF PORTB
CALL T07
MOVLW 86h
MOVWF PORTB
CALL T09
GOTO MOVE11
RV4 CALL T483
BTFSS PORTA,1
GOTO STOP4
MOVLW 13h
MOVWF PORTB
CALL T09
MOVLW 29h
MOVWF PORTB
CALL T07
MOVLW 4Ch
MOVWF PORTB
CALL T05
MOVLW 86h
MOVWF PORTB
CALL T03
MOVLW 13h
MOVWF PORTB
CALL T01
MOVLW 29h
MOVWF PORTB
CALL T00
MOVLW 4Ch
MOVWF PORTB
CALL T000
MOVLW 86h
MOVWF PORTB
CALL T0000
MOVLW 13h
MOVWF PORTB
CALL T0000
MOVLW 29h
MOVWF PORTB
CALL T0000
MOVLW 4Ch
MOVWF PORTB
CALL T0000
MOVLW 86h
MOVWF PORTB
CALL T0000
MOVLW 13h
MOVWF PORTB
CALL T0000
MOVLW 29h
MOVWF PORTB
CALL T0000
MOVLW 4Ch
MOVWF PORTB
CALL T0000
MOVLW 86h
MOVWF PORTB
CALL T0000
MOVLW 13h
MOVWF PORTB
CALL T0000
MOVLW 29h
MOVWF PORTB
CALL T000
MOVLW 4Ch
MOVWF PORTB
CALL T00
MOVLW 86h
MOVWF PORTB
CALL T01
MOVLW 13h
MOVWF PORTB
CALL T03
MOVLW 29h
MOVWF PORTB
CALL T05
MOVLW 4Ch
MOVWF PORTB
CALL T07
MOVLW 86h
MOVWF PORTB
CALL T09
GOTO MOVE12
RV5 CALL T483
BTFSS PORTA,1
GOTO STOP5
MOVLW 16h
MOVWF PORTB
CALL T09
MOVLW 23h
MOVWF PORTB
CALL T07
MOVLW 49h
MOVWF PORTB
CALL T05
MOVLW 8Ch
MOVWF PORTB
CALL T03
MOVLW 16h
MOVWF PORTB
CALL T01
MOVLW 23h
MOVWF PORTB
CALL T00
MOVLW 49h
MOVWF PORTB
CALL T000
MOVLW 8Ch
MOVWF PORTB
CALL T0000
MOVLW 16h
MOVWF PORTB
CALL T0000
MOVLW 23h
MOVWF PORTB
CALL T0000
MOVLW 49h
MOVWF PORTB
CALL T0000
MOVLW 8Ch
MOVWF PORTB
CALL T0000
MOVLW 16h
MOVWF PORTB
CALL T0000
MOVLW 23h
MOVWF PORTB
CALL T0000
MOVLW 49h
MOVWF PORTB
CALL T0000
MOVLW 8Ch
MOVWF PORTB
CALL T0000
MOVLW 16h
MOVWF PORTB
CALL T0000
MOVLW 23h
MOVWF PORTB
CALL T000
MOVLW 49h
MOVWF PORTB
CALL T00
MOVLW 8Ch
MOVWF PORTB
CALL T01
MOVLW 16h
MOVWF PORTB
CALL T03
MOVLW 23h
MOVWF PORTB
CALL T05
MOVLW 49h
MOVWF PORTB
CALL T07
MOVLW 8Ch
MOVWF PORTB
CALL T09
GOTO MOVE13
RV6 CALL T483
BTFSS PORTA,1
GOTO STOP6
MOVLW 16h
MOVWF PORTB
CALL T09
MOVLW 23h
MOVWF PORTB
CALL T07
MOVLW 49h
MOVWF PORTB
CALL T05
MOVLW 8Ch
MOVWF PORTB
CALL T03
MOVLW 16h
MOVWF PORTB
CALL T01
MOVLW 23h
MOVWF PORTB
CALL T00
MOVLW 49h
MOVWF PORTB
CALL T000
MOVLW 8Ch
MOVWF PORTB
CALL T0000
MOVLW 16h
MOVWF PORTB
CALL T0000
MOVLW 23h
MOVWF PORTB
CALL T0000
MOVLW 49h
MOVWF PORTB
CALL T0000
MOVLW 8Ch
MOVWF PORTB
CALL T0000
MOVLW 16h
MOVWF PORTB
CALL T0000
MOVLW 23h
MOVWF PORTB
CALL T0000
MOVLW 49h
MOVWF PORTB
CALL T0000
MOVLW 8Ch
MOVWF PORTB
CALL T0000
MOVLW 16h
MOVWF PORTB
CALL T0000
MOVLW 23h
MOVWF PORTB
CALL T000
MOVLW 49h
MOVWF PORTB
CALL T00
MOVLW 8Ch
MOVWF PORTB
CALL T01
MOVLW 16h
MOVWF PORTB
CALL T03
MOVLW 23h
MOVWF PORTB
CALL T05
MOVLW 49h
MOVWF PORTB
CALL T07
MOVLW 8Ch
MOVWF PORTB
CALL T09
GOTO MOVE14
RV7 CALL T483
BTFSS PORTA,1
GOTO STOP7
MOVLW 1Ch
MOVWF PORTB
CALL T09
MOVLW 26h
MOVWF PORTB
CALL T07
MOVLW 43h
MOVWF PORTB
CALL T05
MOVLW 89h
MOVWF PORTB
CALL T03
MOVLW 1Ch
MOVWF PORTB
CALL T01
MOVLW 26h
MOVWF PORTB
CALL T00
MOVLW 43h
MOVWF PORTB
CALL T000
MOVLW 89h
MOVWF PORTB
CALL T0000
MOVLW 1Ch
MOVWF PORTB
CALL T0000
MOVLW 26h
MOVWF PORTB
CALL T0000
MOVLW 43h
MOVWF PORTB
CALL T0000
MOVLW 89h
MOVWF PORTB
CALL T0000
MOVLW 1Ch
MOVWF PORTB
CALL T0000
MOVLW 26h
MOVWF PORTB
CALL T0000
MOVLW 43h
MOVWF PORTB
CALL T0000
MOVLW 89h
MOVWF PORTB
CALL T0000
MOVLW 1Ch
MOVWF PORTB
CALL T0000
MOVLW 26h
MOVWF PORTB
CALL T000
MOVLW 43h
MOVWF PORTB
CALL T00
MOVLW 89h
MOVWF PORTB
CALL T01
MOVLW 1Ch
MOVWF PORTB
CALL T03
MOVLW 26h
MOVWF PORTB
CALL T05
MOVLW 43h
MOVWF PORTB
CALL T07
MOVLW 89h
MOVWF PORTB
CALL T09
GOTO MOVE15
RV8 CALL T483
BTFSS PORTA,1
GOTO STOP8
MOVLW 1Ch
MOVWF PORTB
CALL T09
MOVLW 26h
MOVWF PORTB
CALL T07
MOVLW 43h
MOVWF PORTB
CALL T05
MOVLW 89h
MOVWF PORTB
CALL T03
MOVLW 1Ch
MOVWF PORTB
CALL T01
MOVLW 26h
MOVWF PORTB
CALL T00
MOVLW 43h
MOVWF PORTB
CALL T000
MOVLW 89h
MOVWF PORTB
CALL T0000
MOVLW 1Ch
MOVWF PORTB
CALL T0000
MOVLW 26h
MOVWF PORTB
CALL T0000
MOVLW 43h
MOVWF PORTB
CALL T0000
MOVLW 89h
MOVWF PORTB
CALL T0000
MOVLW 1Ch
MOVWF PORTB
CALL T0000
MOVLW 26h
MOVWF PORTB
CALL T0000
MOVLW 43h
MOVWF PORTB
CALL T0000
MOVLW 89h
MOVWF PORTB
CALL T0000
MOVLW 1Ch
MOVWF PORTB
CALL T0000
MOVLW 26h
MOVWF PORTB
CALL T000
MOVLW 43h
MOVWF PORTB
CALL T00
MOVLW 89h
MOVWF PORTB
CALL T01
MOVLW 1Ch
MOVWF PORTB
CALL T03
MOVLW 26h
MOVWF PORTB
CALL T05
MOVLW 43h
MOVWF PORTB
CALL T07
MOVLW 89h
MOVWF PORTB
CALL T09
GOTO MOVE16
RV9 CALL T483
BTFSS PORTA,0
GOTO STOP9
MOVLW 83h
MOVWF PORTB
CALL T09
MOVLW 46h
MOVWF PORTB
CALL T07
MOVLW 2Ch
MOVWF PORTB
CALL T05
MOVLW 19h
MOVWF PORTB
CALL T03
MOVLW 83h
MOVWF PORTB
CALL T01
MOVLW 46h
MOVWF PORTB
CALL T00
MOVLW 2Ch
MOVWF PORTB
CALL T000
MOVLW 19h
MOVWF PORTB
CALL T0000
MOVLW 83h
MOVWF PORTB
CALL T0000
MOVLW 46h
MOVWF PORTB
CALL T0000
MOVLW 2Ch
MOVWF PORTB
CALL T0000
MOVLW 19h
MOVWF PORTB
CALL T0000
MOVLW 83h
MOVWF PORTB
CALL T0000
MOVLW 46h
MOVWF PORTB
CALL T0000
MOVLW 2Ch
MOVWF PORTB
CALL T0000
MOVLW 19h
MOVWF PORTB
CALL T0000
MOVLW 83h
MOVWF PORTB
CALL T0000
MOVLW 46h
MOVWF PORTB
CALL T000
MOVLW 2Ch
MOVWF PORTB
CALL T00
MOVLW 19h
MOVWF PORTB
CALL T01
MOVLW 83h
MOVWF PORTB
CALL T03
MOVLW 46h
MOVWF PORTB
CALL T05
MOVLW 2Ch
MOVWF PORTB
CALL T07
MOVLW 19h
MOVWF PORTB
CALL T09
GOTO MOVE1
RV10 CALL T483
BTFSS PORTA,0
GOTO STOP10
MOVLW 86h
MOVWF PORTB
CALL T09
MOVLW 4Ch
MOVWF PORTB
CALL T07
MOVLW 29h
MOVWF PORTB
CALL T05
MOVLW 13h
MOVWF PORTB
CALL T03
MOVLW 86h
MOVWF PORTB
CALL T01
MOVLW 4Ch
MOVWF PORTB
CALL T00
MOVLW 29h
MOVWF PORTB
CALL T000
MOVLW 13h
MOVWF PORTB
CALL T0000
MOVLW 86h
MOVWF PORTB
CALL T0000
MOVLW 4Ch
MOVWF PORTB
CALL T0000
MOVLW 29h
MOVWF PORTB
CALL T0000
MOVLW 13h
MOVWF PORTB
CALL T0000
MOVLW 86h
MOVWF PORTB
CALL T0000
MOVLW 4Ch
MOVWF PORTB
CALL T0000
MOVLW 29h
MOVWF PORTB
CALL T0000
MOVLW 13h
MOVWF PORTB
CALL T0000
MOVLW 86h
MOVWF PORTB
CALL T0000
MOVLW 4Ch
MOVWF PORTB
CALL T000
MOVLW 29h
MOVWF PORTB
CALL T00
MOVLW 13h
MOVWF PORTB
CALL T01
MOVLW 86h
MOVWF PORTB
CALL T03
MOVLW 4Ch
MOVWF PORTB
CALL T05
MOVLW 29h
MOVWF PORTB
CALL T07
MOVLW 13h
MOVWF PORTB
CALL T09
GOTO MOVE2
RV11 CALL T483
BTFSS PORTA,0
GOTO STOP11
MOVLW 86h
MOVWF PORTB
CALL T09
MOVLW 4Ch
MOVWF PORTB
CALL T07
MOVLW 29h
MOVWF PORTB
CALL T05
MOVLW 13h
MOVWF PORTB
CALL T03
MOVLW 86h
MOVWF PORTB
CALL T01
MOVLW 4Ch
MOVWF PORTB
CALL T00
MOVLW 29h
MOVWF PORTB
CALL T000
MOVLW 13h
MOVWF PORTB
CALL T0000
MOVLW 86h
MOVWF PORTB
CALL T0000
MOVLW 4Ch
MOVWF PORTB
CALL T0000
MOVLW 29h
MOVWF PORTB
CALL T0000
MOVLW 13h
MOVWF PORTB
CALL T0000
MOVLW 86h
MOVWF PORTB
CALL T0000
MOVLW 4Ch
MOVWF PORTB
CALL T0000
MOVLW 29h
MOVWF PORTB
CALL T0000
MOVLW 13h
MOVWF PORTB
CALL T0000
MOVLW 86h
MOVWF PORTB
CALL T0000
MOVLW 4Ch
MOVWF PORTB
CALL T000
MOVLW 29h
MOVWF PORTB
CALL T00
MOVLW 13h
MOVWF PORTB
CALL T01
MOVLW 86h
MOVWF PORTB
CALL T03
MOVLW 4Ch
MOVWF PORTB
CALL T05
MOVLW 29h
MOVWF PORTB
CALL T07
MOVLW 13h
MOVWF PORTB
CALL T09
GOTO MOVE3
RV12 CALL T483
BTFSS PORTA,0
GOTO STOP12
MOVLW 8Ch
MOVWF PORTB
CALL T09
MOVLW 49h
MOVWF PORTB
CALL T07
MOVLW 23h
MOVWF PORTB
CALL T05
MOVLW 16h
MOVWF PORTB
CALL T03
MOVLW 8Ch
MOVWF PORTB
CALL T01
MOVLW 49h
MOVWF PORTB
CALL T00
MOVLW 23h
MOVWF PORTB
CALL T000
MOVLW 16h
MOVWF PORTB
CALL T0000
MOVLW 8Ch
MOVWF PORTB
CALL T0000
MOVLW 49h
MOVWF PORTB
CALL T0000
MOVLW 23h
MOVWF PORTB
CALL T0000
MOVLW 16h
MOVWF PORTB
CALL T0000
MOVLW 8Ch
MOVWF PORTB
CALL T0000
MOVLW 49h
MOVWF PORTB
CALL T0000
MOVLW 23h
MOVWF PORTB
CALL T0000
MOVLW 16h
MOVWF PORTB
CALL T0000
MOVLW 8Ch
MOVWF PORTB
CALL T0000
MOVLW 49h
MOVWF PORTB
CALL T000
MOVLW 23h
MOVWF PORTB
CALL T00
MOVLW 16h
MOVWF PORTB
CALL T01
MOVLW 8Ch
MOVWF PORTB
CALL T03
MOVLW 49h
MOVWF PORTB
CALL T05
MOVLW 23h
MOVWF PORTB
CALL T07
MOVLW 16h
MOVWF PORTB
CALL T09
GOTO MOVE4
RV13 CALL T483
BTFSS PORTA,0
GOTO STOP13
MOVLW 8Ch
MOVWF PORTB
CALL T09
MOVLW 49h
MOVWF PORTB
CALL T07
MOVLW 23h
MOVWF PORTB
CALL T05
MOVLW 16h
MOVWF PORTB
CALL T03
MOVLW 8Ch
MOVWF PORTB
CALL T01
MOVLW 49h
MOVWF PORTB
CALL T00
MOVLW 23h
MOVWF PORTB
CALL T000
MOVLW 16h
MOVWF PORTB
CALL T0000
MOVLW 8Ch
MOVWF PORTB
CALL T0000
MOVLW 49h
MOVWF PORTB
CALL T0000
MOVLW 23h
MOVWF PORTB
CALL T0000
MOVLW 16h
MOVWF PORTB
CALL T0000
MOVLW 8Ch
MOVWF PORTB
CALL T0000
MOVLW 49h
MOVWF PORTB
CALL T0000
MOVLW 23h
MOVWF PORTB
CALL T0000
MOVLW 16h
MOVWF PORTB
CALL T0000
MOVLW 8Ch
MOVWF PORTB
CALL T0000
MOVLW 49h
MOVWF PORTB
CALL T000
MOVLW 23h
MOVWF PORTB
CALL T00
MOVLW 16h
MOVWF PORTB
CALL T01
MOVLW 8Ch
MOVWF PORTB
CALL T03
MOVLW 49h
MOVWF PORTB
CALL T05
MOVLW 23h
MOVWF PORTB
CALL T07
MOVLW 16h
MOVWF PORTB
CALL T09
GOTO MOVE5
RV14 CALL T483
BTFSS PORTA,0
GOTO STOP14
MOVLW 89h
MOVWF PORTB
CALL T09
MOVLW 43h
MOVWF PORTB
CALL T07
MOVLW 26h
MOVWF PORTB
CALL T05
MOVLW 1Ch
MOVWF PORTB
CALL T03
MOVLW 89h
MOVWF PORTB
CALL T01
MOVLW 43h
MOVWF PORTB
CALL T00
MOVLW 26h
MOVWF PORTB
CALL T000
MOVLW 1Ch
MOVWF PORTB
CALL T0000
MOVLW 89h
MOVWF PORTB
CALL T0000
MOVLW 43h
MOVWF PORTB
CALL T0000
MOVLW 26h
MOVWF PORTB
CALL T0000
MOVLW 1Ch
MOVWF PORTB
CALL T0000
MOVLW 89h
MOVWF PORTB
CALL T0000
MOVLW 43h
MOVWF PORTB
CALL T0000
MOVLW 26h
MOVWF PORTB
CALL T0000
MOVLW 1Ch
MOVWF PORTB
CALL T0000
MOVLW 89h
MOVWF PORTB
CALL T0000
MOVLW 43h
MOVWF PORTB
CALL T000
MOVLW 26h
MOVWF PORTB
CALL T00
MOVLW 1Ch
MOVWF PORTB
CALL T01
MOVLW 89h
MOVWF PORTB
CALL T03
MOVLW 43h
MOVWF PORTB
CALL T05
MOVLW 26h
MOVWF PORTB
CALL T07
MOVLW 1Ch
MOVWF PORTB
CALL T09
GOTO MOVE6
RV15 CALL T483
BTFSS PORTA,0
GOTO STOP15
MOVLW 89h
MOVWF PORTB
CALL T09
MOVLW 43h
MOVWF PORTB
CALL T07
MOVLW 26h
MOVWF PORTB
CALL T05
MOVLW 1Ch
MOVWF PORTB
CALL T03
MOVLW 89h
MOVWF PORTB
CALL T01
MOVLW 43h
MOVWF PORTB
CALL T00
MOVLW 26h
MOVWF PORTB
CALL T000
MOVLW 1Ch
MOVWF PORTB
CALL T0000
MOVLW 89h
MOVWF PORTB
CALL T0000
MOVLW 43h
MOVWF PORTB
CALL T0000
MOVLW 26h
MOVWF PORTB
CALL T0000
MOVLW 1Ch
MOVWF PORTB
CALL T0000
MOVLW 89h
MOVWF PORTB
CALL T0000
MOVLW 43h
MOVWF PORTB
CALL T0000
MOVLW 26h
MOVWF PORTB
CALL T0000
MOVLW 1Ch
MOVWF PORTB
CALL T0000
MOVLW 89h
MOVWF PORTB
CALL T0000
MOVLW 43h
MOVWF PORTB
CALL T000
MOVLW 26h
MOVWF PORTB
CALL T00
MOVLW 1Ch
MOVWF PORTB
CALL T01
MOVLW 89h
MOVWF PORTB
CALL T03
MOVLW 43h
MOVWF PORTB
CALL T05
MOVLW 26h
MOVWF PORTB
CALL T07
MOVLW 1Ch
MOVWF PORTB
CALL T09
GOTO MOVE7
RV16 CALL T483
BTFSS PORTA,0
GOTO STOP16
MOVLW 83h
MOVWF PORTB
CALL T09
MOVLW 46h
MOVWF PORTB
CALL T07
MOVLW 2Ch
MOVWF PORTB
CALL T05
MOVLW 19h
MOVWF PORTB
CALL T03
MOVLW 83h
MOVWF PORTB
CALL T01
MOVLW 46h
MOVWF PORTB
CALL T00
MOVLW 2Ch
MOVWF PORTB
CALL T000
MOVLW 19h
MOVWF PORTB
CALL T0000
MOVLW 83h
MOVWF PORTB
CALL T0000
MOVLW 46h
MOVWF PORTB
CALL T0000
MOVLW 2Ch
MOVWF PORTB
CALL T0000
MOVLW 19h
MOVWF PORTB
CALL T0000
MOVLW 83h
MOVWF PORTB
CALL T0000
MOVLW 46h
MOVWF PORTB
CALL T0000
MOVLW 2Ch
MOVWF PORTB
CALL T0000
MOVLW 19h
MOVWF PORTB
CALL T0000
MOVLW 83h
MOVWF PORTB
CALL T0000
MOVLW 46h
MOVWF PORTB
CALL T000
MOVLW 2Ch
MOVWF PORTB
CALL T00
MOVLW 19h
MOVWF PORTB
CALL T01
MOVLW 83h
MOVWF PORTB
CALL T03
MOVLW 46h
MOVWF PORTB
CALL T05
MOVLW 2Ch
MOVWF PORTB
CALL T07
MOVLW 19h
MOVWF PORTB
CALL T09
GOTO MOVE8
; << L回転 >>
MOVE1 MOVLW 11h
MOVWF PORTB
CALL SEL
BTFSS PORTA,0
GOTO STOP1
MOVE2 MOVLW 23h
MOVWF PORTB
CALL SEL
BTFSS PORTA,0
GOTO STOP2
MOVE3 MOVLW 22h
MOVWF PORTB
CALL SEL
BTFSS PORTA,0
GOTO STOP3
MOVE4 MOVLW 46h
MOVWF PORTB
CALL SEL
BTFSS PORTA,0
GOTO STOP4
MOVE5 MOVLW 44h
MOVWF PORTB
CALL SEL
BTFSS PORTA,0
GOTO STOP5
MOVE6 MOVLW 8Ch
MOVWF PORTB
CALL SEL
BTFSS PORTA,0
GOTO STOP6
MOVE7 MOVLW 88h
MOVWF PORTB
CALL SEL
BTFSS PORTA,0
GOTO STOP7
MOVE8 MOVLW 19h
MOVWF PORTB
CALL SEL
BTFSS PORTA,0
GOTO STOP8
GOTO MOVE1
; << R回転 >>
MOVE9 MOVLW 81h
MOVWF PORTB
CALL SEL
BTFSS PORTA,1
GOTO STOP9
MOVE16 MOVLW 89h
MOVWF PORTB
CALL SEL
BTFSS PORTA,1
GOTO STOP16
MOVE15 MOVLW 48h
MOVWF PORTB
CALL SEL
BTFSS PORTA,1
GOTO STOP15
MOVE14 MOVLW 4Ch
MOVWF PORTB
CALL SEL
BTFSS PORTA,1
GOTO STOP14
MOVE13 MOVLW 24h
MOVWF PORTB
CALL SEL
BTFSS PORTA,1
GOTO STOP13
MOVE12 MOVLW 26h
MOVWF PORTB
CALL SEL
BTFSS PORTA,1
GOTO STOP12
MOVE11 MOVLW 12h
MOVWF PORTB
CALL SEL
BTFSS PORTA,1
GOTO STOP11
MOVE10 MOVLW 13h
MOVWF PORTB
CALL SEL
BTFSS PORTA,1
GOTO STOP10
GOTO MOVE9
; <<速度選択 >>
SEL BTFSS PORTA,2
CALL SEL110 ; xxx0
BTFSS PORTA,2
RETURN
CALL SEL111 ; xxx1
RETURN
SEL110 BTFSS PORTA,3 ; xxx0
CALL SEL114 ; xx00
BTFSS PORTA,3
RETURN
CALL SEL112 ; xx10
RETURN
SEL111 BTFSS PORTA,3 ; xxx1
CALL SEL115 ; xx01
BTFSS PORTA,3
RETURN
CALL SEL113 ; xx11
RETURN
SEL112 BTFSS PORTA,4 ; xx10
CALL SEL123 ; x010
BTFSS PORTA,4
RETURN
CALL SEL122 ; x110
RETURN
SEL113 BTFSS PORTA,4 ; xx11
CALL SEL120 ; x011
BTFSS PORTA,4
RETURN
CALL SEL118 ; x111
RETURN
SEL114 BTFSS PORTA,4 ; xx00
CALL SEL121 ; x000
BTFSS PORTA,4
RETURN
CALL SEL119 ; x100
RETURN
SEL115 BTFSS PORTA,4 ; xx01
CALL SEL117 ; x001
BTFSS PORTA,4
RETURN
CALL SEL116 ; x101
RETURN
SEL116 BTFSS PORTA,5 ; x101
CALL T05 ; 0101=5
BTFSS PORTA,5
RETURN
CALL T13 ; 1101=13
RETURN
SEL117 BTFSS PORTA,5 ; x001
CALL T01 ; 0001=1
BTFSS PORTA,5
RETURN
CALL T09 ; 1001=9
RETURN
SEL118 BTFSS PORTA,5 ; x111
CALL T07 ; 0111=7
BTFSS PORTA,5
RETURN
CALL T15 ; 1111=15
RETURN
SEL119 BTFSS PORTA,5 ; x100
CALL T04 ; 0100=4
BTFSS PORTA,5
RETURN
CALL T12 ; 1100=12
RETURN
SEL120 BTFSS PORTA,5 ; x011
CALL T03 ; 0011=3
BTFSS PORTA,5
RETURN
CALL T11 ; 1011=11
RETURN
SEL121 BTFSS PORTA,5 ; x000
CALL T00 ; 0000=0
BTFSS PORTA,5
RETURN
CALL T08 ; 1000=8
RETURN
SEL122 BTFSS PORTA,5 ; x110
CALL T06 ; 0110=6
BTFSS PORTA,5
RETURN
CALL T14 ; 1110=14
RETURN
SEL123 BTFSS PORTA,5 ; x010
CALL T02 ; 0010=2
BTFSS PORTA,5
RETURN
CALL T10 ; 1010=10
RETURN
; << 178290サイクル待つルーチン=1.75 >>
T00 MOVLW 8Eh ; =142
MOVWF GPR_11
T00LP CALL T1248S
DECFSZ GPR_11,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T00LP
CALL T359
RETURN
; << 187201サイクル待つルーチン=1.67 >>
T01 MOVLW 95h ; =149
MOVWF GPR_15
T01LP CALL T1248S
DECFSZ GPR_15,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T01LP
CALL T499
RETURN
; << 197057サイクル待つルーチン=1.58 >>
T02 MOVLW 9Dh ; =157
MOVWF GPR_16
T02LP CALL T1248S
DECFSZ GPR_16,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T02LP
CALL T331
RETURN
; << 208001サイクル待つルーチン=1.5 >>
T03 MOVLW 0A6h ; =166
MOVWF GPR_17
T03LP CALL T1248S
DECFSZ GPR_17,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T03LP
RETURN
; << 220239サイクル待つルーチン=1.42 >>
T04 MOVLW 0AFh ; =175
MOVWF GPR_18
T04LP CALL T1248S
DECFSZ GPR_18,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T04LP
CALL T959
RETURN
; << 234314サイクル待つルーチン=1.33 >>
T05 MOVLW 0BBh ; =187
MOVWF GPR_1
T05LP CALL T1248S
DECFSZ GPR_1,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T05LP
RETURN
; << 249350サイクル待つルーチン=1.25 >>
T06 MOVLW 0C7h ; =199
MOVWF GPR_2
T06LP CALL T1248S
DECFSZ GPR_2,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T06LP
RETURN
; << 267377サイクル待つルーチン=1.17 >>
T07 MOVLW 0D5h ; =213
MOVWF GPR_3
T07LP CALL T1248S
DECFSZ GPR_3,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T07LP
CALL T483
RETURN
; << 288193サイクル待つルーチン=1.08 >>
T08 MOVLW 0E6h ; =230
MOVWF GPR_4
T08LP CALL T1248S
DECFSZ GPR_4,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T08LP
RETURN
; << 312000サイクル待つルーチン=1 >>
T09 MOVLW 0F9h ; =249
MOVWF GPR_5
T09LP CALL T1248S
DECFSZ GPR_5,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T09LP
RETURN
; << 340824サイクル待つルーチン=0.92 >>
T10 MOVLW 17h ; =23
MOVWF GPR_6
T10LP CALL T1248S
DECFSZ GPR_6,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T10LP
CALL T09
RETURN
; << 374655サイクル待つルーチン=0.83 >>
T11 MOVLW 32h ; =50
MOVWF GPR_7
T11LP CALL T1248S
DECFSZ GPR_7,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T11LP
CALL T09
RETURN
; << 416004サイクル待つルーチン=0.75 >>
T12 MOVLW 53h ; =83
MOVWF GPR_8
T12LP CALL T1248S
DECFSZ GPR_8,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T12LP
CALL T09
RETURN
; << 467862サイクル待つルーチン=0.67 >>
T13 MOVLW 7Ch ; =124
MOVWF GPR_9
T13LP CALL T1248S
DECFSZ GPR_9,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T13LP
CALL T09
CALL T483
RETURN
; << 535039サイクル待つルーチン=0.58 >>
T14 MOVLW 0B2h ; =178
MOVWF GPR_10
T14LP CALL T1248S
DECFSZ GPR_10,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T14LP
CALL T09
RETURN
; << 624004サイクル待つルーチン=0.5 >>
T15 CALL T09
CALL T09
RETURN
; <<1248サイクル待つサブルーチン >>
T1248S MOVLW 0F9h ; F9h=249
MOVWF GPR_12 ; (ループ回数として249をセット)
T1248LP NOP
NOP ; 何もせず1サイクル消費
DECFSZ GPR_12,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T1248LP
RETURN ; このサブルーチン呼出し元に戻る
; << 259376サイクル待つルーチン >>
TT259374 MOVLW 0CFh ; CFh=207
MOVWF GPR_13 ; (ループ回数として207をセット)
T5296LP CALL T1248S ;
DECFSZ GPR_13,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T5296LP
NOP
NOP ;
RETURN ; このサブルーチン呼出し元に戻る
; <<483サイクル待つサブルーチン >>
T483 MOVLW 078h ; 78h=120
MOVWF GPR_14 ; (ループ回数として120をセット)
T483LP NOP
DECFSZ GPR_14,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T483LP
RETURN
; <<499サイクル待つサブルーチン >>
T499 MOVLW 07Ch ; =124
MOVWF GPR_19 ; (ループ回数として120をセット)
T499LP NOP
DECFSZ GPR_19,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T499LP
RETURN
; <<959サイクル待つサブルーチン >>
T959 MOVLW 0EEh ; =239
MOVWF GPR_20 ; (ループ回数として120をセット)
T959LP NOP
DECFSZ GPR_20,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T959LP
RETURN
; <<359サイクル待つサブルーチン >>
T359 MOVLW 059h ; =89
MOVWF GPR_22 ; (ループ回数として120をセット)
T359LP NOP
DECFSZ GPR_22,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T359LP
RETURN
; <<331サイクル待つサブルーチン >>
T331 MOVLW 052h ; =82
MOVWF GPR_21 ; (ループ回数として120をセット)
T331LP NOP
DECFSZ GPR_21,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T331LP
RETURN
; << 125303サイクル待つルーチン=1.75 >>
T000 MOVLW 64h ; =100
MOVWF GPR_23
T000LP CALL T1248S
DECFSZ GPR_23,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T000LP
RETURN
; << 125303サイクル待つルーチン=1.75 >>
T0000 MOVLW 32h ; =50
MOVWF GPR_24
T0000LP CALL T1248S
DECFSZ GPR_24,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T0000LP
RETURN
END
0コメント