Sample Program
R/C Transmitter Control Program for PF-300 Ver.0.1
'
'*********************************************************
'
' R/C Transmitter Control Program for PF-300 Ver.0.1
'
' rctr300a.bas 2000/7/30 by K. Hirata
'
'*********************************************************
'
' PIC16F84 20MHz用
' Futaba, T4VF, SKYSPORT4用
' 2サーボ駆動用
'
'***********************
' 初期設定
'***********************
'
Symbol ONtime1=W0
Symbol ONtime2=W1
Symbol T1=W2
Symbol T2=W3
Symbol T3=W4
Symbol T4=W5
Symbol Freq=W6
Symbol LL=W7
Symbol RR=W8
Symbol SpeedStep=W9
Symbol Amplitude=W10
Symbol ONtime_int=W11
Symbol Ptime=18 'パルス周期(18ms)
Symbol ONtime_min=360' 350 'ONの時間の最小値(375/(20/4)/100=0.70ms)
Symbol ONtime_cent=575 'ONの時間の中立値(550/(20/4)/100=1.10ms)
Symbol ONtime_max=790' 800 'ONの時間の最大値(562/(20/4)/100=1.60ms)
'
input 0: input 1: input 2: input 3
input 4: input 5: input 6: output 7
'
Poke $81,0 'プルアップ抵抗の設定
'
'************************************
' 初期設定
'************************************
'
Freq=250 '周波数(/100Hz)
Amplitude=40 '振幅(0-100)
'
'************************************
' メインルーチン(運動設定モード)
'************************************
'
Loop:
'
' 運動の設定
'
If pin0=0 then LeftL:
If pin1=0 then Center:
If pin2=0 then RightR:
Goto StopMotion '何も押されていない場合
Leaning:
'
' 周波数の設定
'
If pin5=0 then HighSpeed:
If pin6=0 then LowSpeed:
Speed:
'
' 振幅の設定
'
If pin3=0 then LargeAmp:
If pin4=0 then SmallAmp:
Amp:
'
' 尾ひれの往復運動
'
For ONtime1=T1 to T2 step SpeedStep 'ONの時間(/2.5usec)
T4=T3/4+T1 '90degの位置
If ONtime1=T4 then NextONtime2 '90deg〜180deg
NextONtime1: '0〜90deg
ONtime2=T4-ONtime1+T1 '逆向きに動く
Goto NextONtime3
NextONtime2: '90deg〜180deg
ONtime2=ONtime1-T4+T1 '1/4周期引く
NextONtime3:
ONtime_int=6400-ONtime1 'ONの時間(12.8ms-ONtime)
ONtime_int=ONtime_int-ONtime1
'
Pulsout 7, ONtime_int
Pause 2 'OFFtime 'OFFの時間(2/5=0.4msec)
Pulsout 7, ONtime1
Pause 2 'OFFの時間(2/5=0.4msec)
Pulsout 7, ONtime1
Pause 2 'OFFの時間(2/5=0.4msec)
Pulsout 7, ONtime_cent 'ONの時間(/2.5usec=1.1msec)
Pause 2 'OFFの時間(2/5=0.4msec)
Pulsout 7, ONtime_cent 'ONの時間(/2.5usec=1.1msec)
Pause 2 'OFFの時間(2/5=0.4msec)
Pulsout 7, 150 'ONの時間(/2.5usec=0.6msec)
Pause 2 'OFFの時間(2/5=0.4msec)
Next ONtime1
T2=T2-1: T1=T1+1
'
For ONtime1=T2 to T1 step -SpeedStep 'ONの時間(/2.5usec)
T4=T3/4+T1 '270degの位置
If ONtime1=T4 then NextONtime5
NextONtime4: '180〜270deg
ONtime2=ONtime1+T4-T1 '1/4周期加える
Goto NextONtime6
NextONtime5: '270deg〜360deg
ONtime2=T4+T2-ONtime1
NextONtime6:
ONtime_int=6400-ONtime1 'ONの時間(12.8ms-ONtime)
ONtime_int=ONtime_int-ONtime1
'
Pulsout 7, ONtime_int
Pause 2 'OFFの時間(2/5=0.4msec)
Pulsout 7, ONtime1
Pause 2 'OFFの時間(2/5=0.4msec)
Pulsout 7, ONtime1
Pause 2 'OFFの時間(2/5=0.4msec)
Pulsout 7, ONtime_cent 'ONの時間(/2.5usec=1.1msec)
Pause 2 'OFFtime 'OFFの時間(2/5=0.4msec)
Pulsout 7, ONtime_cent 'ONの時間(/2.5usec=1.1msec)
Pause 2 'OFFの時間(2/5=0.4msec)
Pulsout 7,150 'ONの時間(/2.5usec=0.6msec)
Pause 2 'OFFの時間(2/5=0.4msec)
Next ONtime1
T2=T2+1: T1=T1-1
Goto Loop
End
'
'******************************
' 静止・サブルーチン
'******************************
'
StopMotion:
Pulsout 7,ONtime_cent 'ONの時間(/2.5usec=1.1msec)
Pause 2 'OFFの時間(2/5=0.4msec)
Pulsout 7,ONtime_cent 'ONの時間(/2.5usec=1.1msec)
Pause 2 'OFFの時間(2/5=0.4msec)
Pulsout 7,ONtime_cent 'ONの時間(/2.5usec=1.1msec)
Pause 2 'OFFの時間(2/5=0.4msec)
Pulsout 7,ONtime_cent 'ONの時間(/2.5usec=1.1msec)
Pause 2 'OFFの時間(2/5=0.4msec)
Pulsout 7,150 'ONの時間(/2.5usec=0.6msec)
Pause 2 'OFFの時間(2/5=0.4msec)
ONtime_int=6400-ONtime_cent 'ONの時間(12.8ms-ONtime)
ONtime_int=ONtime_int-ONtime_cent
Pulsout 7, ONtime_int
Pause 2 'OFFの時間(2/5=0.4msec)
Goto Loop
'
'******************************
' 振幅設定・サブルーチン
'******************************
'
' 振幅・大
'
LargeAmp:
Amplitude=60 '振幅(0-100)
Goto Amp
'
' 振幅・小
'
SmallAmp:
Amplitude=40 '振幅(0-100)
Goto Amp
'
'******************************
' 周波数設定・サブルーチン
'******************************
'
HighSpeed:
If Freq=250 then HighSpeed2
Freq=250 '周波数(/100Hz)
Goto Speed
HighSpeed2:
Freq=300 '周波数(/100Hz)
Goto Speed
'
LowSpeed:
If Freq=200 then LowSpeed2
Freq=200 '周波数(/100Hz)
Goto Speed
LowSpeed2:
Freq=150 '周波数(/100Hz)
Goto Speed
'
'******************************
' 傾き設定・サブルーチン
'******************************
'
LeftL:
RR=Amplitude
LL=0
Gosub Mode_set
Goto Leaning
'
RightR:
RR=100
LL=100-Amplitude
Gosub Mode_set
Goto Leaning
'
Center:
RR=Amplitude/2
RR=50+RR
LL=Amplitude/2
LL=50-LL
Gosub Mode_set
Goto Leaning
'
'******************************
' モードセット・サブルーチン
'******************************
'
Mode_set:
T1=ONtime_max-Ontime_min
T1=T1/100
T1=T1*LL
T1=ONtime_min+T1
'
T2=ONtime_max-Ontime_min
T2=T2/100
T2=T2*RR
T2=ONtime_min+T2
'
T3=T2-T1 '1/2周期のデータ数
T3=2*T3 '1周期のデータ数(4の倍数)
SpeedStep=10000/Freq/Ptime*10 '設定した周波数に対応するデータ数
SpeedStep=T3/SpeedStep '刻み幅(ステップ)
Return
|