PIC-BASICを用いたステッピングモーターの制御プログラムを作成しています。
プログラムで行いたいこと
スイッチ1を押すと、ステッピングモーターの回転方向が変わる。
スイッチ2を押すたびに、ステッピングモーターが、停止、3段階の回転速度の変化を行う
下記に自作したプログラムを掲示しています。このプログラムでは、動かないとのことでした。
しかし、改善すべき点がわかっていないため、ご指摘いただきたいです。
↓自作したプログラム
define OSC 40
Define ADC_BITS 10
Define ADC_CLOCK 3
Define ADC_SAMPLEUS 50
COUNTER VAR byte
PUSHCOUNTER1 VAR byte
PUSHCOUNTER2 VAR byte
LEDNum VAR byte
SwFlag1 VAR byte
SwFlag2 VAR byte
Motor VAR byte(4)
'エイリアスの定義
LED1 var PORTA.2
LED2 var PORTA.3
LED3 var PORTA.4
LED4 var PORTA.5
SW1 var PORTC.3
SW2 var PORTC.4
'定数の定義
LEDON con 0
LEDOFF con 1
SwON con 0
SwOFF con 1
'A/Dコンバータの機能等の設定
ADCON0 = %00000001
ADCON1 = %00001101 ' LowRef=Vss,HighRef=Vdd, AN0-1,D2-8
ADCON2 = %10010011 ' Shift result to righ, INT RC clock
'入出力ピンの設定
TRISA = %10000011 ' AN0-1=in, D2-6=out , OSC1=out, OSC2=in
TRISB = %00000000 ' PORTBのピン全てを出力に設定
TRISC = %11011000 'RC0,1,2,5ピンを出力設定,その他のPORTCピンは入力
'ポートの初期設定
PortC.0 = 0 '7SEG LED OFF
PortC.5 = 0
PortB = $00 'PortBに16進00を出力
LED1 = LEDOFF
LED2 = LEDOFF
LED3 = LEDOFF
LED4 = LEDOFF
SW1 = SwOFF
SW2 = SwOFF
'励磁パターンの定義
Motor(0) = $01
Motor(1) = $02
Motor(2) = $04
Motor(3) = $08
Motor(4) = $00
COUNTER = 0
PUSHCOUNTER1 = 0
PUSHCOUNTER2 = 0
LEDNum = 0
SWFlag1 = 1
SWFlag2 = 3
'100msウェイト
Pause 100 ' Wait .1 second
Main:
COUNTER = COUNTER + 1
if COUNTER > 255 then COUNTER = 0
LEDNum = COUNTER // 4 'LEDNum=0,1,2,3の値を取る。
if SW1 = 0 then pause 100
if SW1 = 0 then
PUSHCOUNTER1 = PUSHCOUNTER1 + 1
endif
if PUSHCOUNTER1 > 255 then PUSHCOUNTER1 = 0
SWFlag1 = PUSHCOUNTER1 // 2
select case SWFlag1
case 0
PortB = Motor(LEDNum)
pauseus 15000
case 1S
PortB = Motor(3 - LEDNum)
pauseus 15000
end select
if SW2 = 0 then pause 100
if SW2 = 0 then
PUSHCOUNTER2 = PUSHCOUNTER2 +1
endif
if PUSHCOUNTER2 > 255 then PUSHCOUNTER2 = 0
SWFlag2 = PUSHCOUNTER2 // 4
select case SWFlag2
case 0
PortB = Motor(4)
case 1
pauseus 10000
case 2
pauseus 30000
case 3
pauseus 50000
end select
goto main
end