' ========================================================================= ' ' File....... Dual-Stepper.BS2 ' Purpose.... ' Author..... Jon Williams -- Parallax, Inc. ' E-mail..... jwilliams@parallax.com ' Started.... ' Updated.... 16 OCT 2005 ' ' {$STAMP BS2} ' {$PBASIC 2.5} ' ' ========================================================================= ' -----[ Program Description ]--------------------------------------------- ' -----[ Revision History ]------------------------------------------------ ' -----[ I/O Definitions ]------------------------------------------------- RxD CON 16 ' serial input TxD CON 16 ' serial output Motor1 VAR OUTA Motor2 VAR OUTB ' -----[ Constants ]------------------------------------------------------- #SELECT $STAMP #CASE BS2, BS2E, BS2PE T1200 CON 813 T2400 CON 396 T4800 CON 188 T9600 CON 84 T19K2 CON 32 TMidi CON 12 T38K4 CON 6 #CASE BS2SX, BS2P T1200 CON 2063 T2400 CON 1021 T4800 CON 500 T9600 CON 240 T19K2 CON 110 TMidi CON 60 T38K4 CON 45 #CASE BS2PX T1200 CON 3313 T2400 CON 1646 T4800 CON 813 T9600 CON 396 T19K2 CON 188 TMidi CON 108 T38K4 CON 84 #ENDSELECT SevenBit CON $2000 Inverted CON $4000 Open CON $8000 Baud CON T9600 StepDelay CON 100 ' -----[ Variables ]------------------------------------------------------- mNum VAR Byte ' "1" or "2" cmd VAR Byte ' "+" or "-" numSteps VAR Word idx VAR Nib(2) ' sequence index offset VAR Nib ' 1 for +, 3 for - movement VAR Word ' loop ctrl for move sub ' -----[ EEPROM Data ]----------------------------------------------------- Steps DATA %0011, %0110, %1100, %1001 ' -----[ Initialization ]-------------------------------------------------- Reset: DIRL = %11111111 ' make motor pins outputs ' -----[ Program Code ]---------------------------------------------------- Main: SEROUT TxD, Baud, [CR, "> "] SERIN RxD, Baud, 5000, Reset, [mNum, cmd, DEC numSteps] Check_Motor: LOOKDOWN mNum, ["12"], mNum ' valide motor selection IF (mNum > 1) THEN SEROUT TxD, Baud, ["Invalid motor number (1 or 2)", CR] GOTO Main ENDIF Check_Cmd: LOOKDOWN cmd, ["+-"], cmd IF (cmd > 1) THEN SEROUT TxD, Baud, ["Invalid command (+ or -)", CR] GOTO Main ENDIF offset = (cmd * 2) + 1 ' make 1 (fwd) or 3 (rev) Move_Motor: FOR movement = 1 TO numSteps READ Steps + idx(mNum), Motor1(mNum) idx(mNum) = idx(mNum) + offset // 4 ' update table pointer PAUSE StepDelay NEXT GOTO Main END ' -----[ Subroutines ]-----------------------------------------------------