Sample Program

R/C Transmitter Control Program for PPF-08i Ver.0.1


'
'*********************************************************
'
' R/C Transmitter Control Program for PPF-08i Ver.0.1
'
'                 rctr01.bas  2000/7/25 by K. Hirata
'
'*********************************************************
'
' PIC16F84 20MHz用
' Futaba, T4VF, SKYSPORT4用
'
'***********************
' 初期設定
'***********************
'
Symbol ONtime=W0
Symbol T1=W1
Symbol T2=W2
Symbol T3=W3
Symbol Freq=W4
Symbol LL=W5
Symbol RR=W6
Symbol SpeedStep=W7
Symbol ModeNum=W8
Symbol Amplitude=W9
Symbol ONtime_int=W10
Symbol i=W11
Symbol Ptime=18 'パルス周期(18ms)
Symbol ONtime_min=250 '350 'ONの時間の最小値(375/(20/4)/100=0.70ms)
Symbol ONtime_cent=575 'ONの時間の中立値(550/(20/4)/100=1.10ms)
Symbol ONtime_max=870 '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=200 '周波数(/100Hz)
Amplitude=30 '振幅(0-100)
'Goto HighSpeed
'Goto SmallAmp
'
'************************************
' メインルーチン(運動設定モード)
'************************************
'
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 ONtime=T1 to T2 step SpeedStep 'ONの時間(/2.5usec)
  Pulsout 7, ONtime
  Pause 2 'OFFtime '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 'OFFtime 'OFFの時間(2/5=0.4msec)
  Pulsout 7,ONtime_cent 'ONの時間(/2.5usec=1.1msec)
  Pause 2 'OFFtime 'OFFの時間(2/5=0.4msec)
  Pulsout 7,150 'ONの時間(/2.5usec=0.6msec)
  Pause 2 'OFFtime 'OFFの時間(2/5=0.4msec)
  ONtime_int=5850-ONtime ''ONの時間(11.7ms-ONtime)
  Pulsout 7, ONtime_int
  Pause 2 'OFFtime 'OFFの時間(2/5=0.4msec)
Next ONtime
T2=T2-1: T1=T1+1
For ONtime=T2 to T1 step -SpeedStep 'ONの時間(/2.5usec)
  Pulsout 7, ONtime
  Pause 2 'OFFtime '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 'OFFtime 'OFFの時間(2/5=0.4msec)
  Pulsout 7,ONtime_cent 'ONの時間(/2.5usec=1.1msec)
  Pause 2 'OFFtime 'OFFの時間(2/5=0.4msec)
  Pulsout 7,150 'ONの時間(/2.5usec=0.6msec)
  Pause 2 'OFFtime 'OFFの時間(2/5=0.4msec)
  ONtime_int=5850-ONtime ''ONの時間(11.7ms-ONtime)
  Pulsout 7, ONtime_int
  Pause 2 'OFFtime 'OFFの時間(2/5=0.4msec)
Next ONtime
T2=T2+1: T1=T1-1
Goto Loop
End
'
'******************************
' 静止・サブルーチン
'******************************
'
StopMotion:
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 'OFFtime '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 'OFFtime 'OFFの時間(2/5=0.4msec)
Pulsout 7,150 'ONの時間(/2.5usec=0.6msec)
Pause 2 'OFFtime 'OFFの時間(2/5=0.4msec)
ONtime_int=5850-ONtime_cent 'ONの時間(11.7ms-ONtime)
Pulsout 7, ONtime_int
Pause 2 'OFFtime 'OFFの時間(2/5=0.4msec)
Goto Loop
'
'******************************
' 振幅設定・サブルーチン
'******************************
'
' 振幅・大
'
LargeAmp:
Amplitude=60 '振幅(0-100)
Goto Amp
'
' 振幅・小
'
SmallAmp:
Amplitude=30 '振幅(0-100)
Goto Amp
'
'******************************
' 周波数設定・サブルーチン
'******************************
'
LowSpeed:
Freq=150 '周波数(/100Hz)
Goto Speed
'
HighSpeed:
Freq=250 '周波数(/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

[ Microcomputer ] [ Hirata HOME ] [ Power and Energy Engineering Division ] [ NMRI HOME ]
Contact khirata@nmri.go.jp