' {$STAMP BS2p} ' {$PBASIC 2.5} '{$PORT COM1} ' DRSSTC Control Program V1.07exp 2005-04-30 ' EXPERIMENTAL USE ONLY!!!!!!!!!! DEBUG CLS DEBUG "Version 1.07 EXP" PAUSE 1000 DEBUG CLS ' This program controls the DRSSTC Remote Controller. ' Parallax Basic Stamp BS2p is assumed as the controller ' Pin 0 null output for BangOffTimeBS2 timing ' Pin 1 (output only) is the output pin to the Fiber-Optic transmitter LED ' Pin 2 UnUsed Set to Output to resist noise ' Pin 3 UnUsed Set to Output to resist noise ' Pin 4 (output only) OKLED LED 1 ' Pin 5 (output only) OutOnLED LED 2 ' Pin 6 UnUsed Set to Output to resist noise ' Pin 7 UnUsed Set to Output to resist noise ' Pin 8 (input only) Enable Control - Normally pulled low through 4.7k ' Pin 9 (input only) Disable Control - Normally pulled low through 4.7k ' Pin 10 UnUsed Set to Output to resist noise ' Pin 11 UnUsed Set to Output to resist noise ' Pin 12 (input only) Lower BangOffTimeBS2 - Normally pulled low through 4.7k ' Pin 13 (input only) Raise BangOffTimeBS2 - Normally pulled low through 4.7k ' Pin 14 (input only) Lower Pulse Width - Normally pulled low through 4.7k ' Pin 15 (input only) Raise Pulse Width - Normally pulled low through 4.7k PAUSE 1000 'time to mellow after power up null PIN 0 signal PIN 1 'define output pin OKLED PIN 4 'define status LED OutOnLED PIN 5 'define status LED GoButton PIN 8 'define start button input StopButton PIN 9 'define stop button input LBangOffTimeBS2 PIN 13 'define Lower BangOffTimeBS2 input RBangOffTimeBS2 PIN 12 'define Raise BangOffTimeBS2 input LBangOnTimeBS2 PIN 14 'define Lower Pulse Width input RBangOnTimeBS2 PIN 15 'define Rasie Pulse Width input BangOffTimeBS2 VAR Word 'BangOffTimeBS2 rate BangOnTimeBS2 VAR Word 'BangOnTimeBS2 rate Enabled VAR Bit 'Output is on BangOffTimeBS2 = 15000 'Safe default number BangOnTimeBS2 = 1 'Safe default number 'Experiment Variables DelayCounter VAR Byte 'Long time delay between bursts Delay VAR Byte 'Delay between bursts DelayCounter = 100 'Safe default number Delay = 17 'Preset the variables signal = 0 OKLED = 0 OutOnLED = 0 LBangOffTimeBS2 = 0 RBangOffTimeBS2 = 0 LBangOnTimeBS2 = 0 RBangOnTimeBS2 = 0 Enabled = 0 'Define the range limits BangOffTimeBS2LowLimit CON 1 BangOffTimeBS2HighLimit CON 2343 BangOnTimeBS2LowLimit CON 1 BangOnTimeBS2HighLimit CON 125 'Start up settings BangOffTimeBS2 = BangOffTimeBS2HighLimit BangOnTimeBS2 = BangOnTimeBS2LowLimit 'Enable the pins OUTPUT 0 OUTPUT 1 OUTPUT 2 OUTPUT 3 OUTPUT 4 OUTPUT 5 OUTPUT 6 OUTPUT 7 INPUT 8 INPUT 9 OUTPUT 10 OUTPUT 11 INPUT 12 INPUT 13 INPUT 14 INPUT 15 'Main Control Loop OKLED = 1 'Turn on OK LED to show it got this far ;-) MainLoop: IF GoButton = 1 AND Enabled = 0 THEN Enabled = 1 : OutOnLED = 1 IF Enabled = 0 THEN GOTO MainLoop PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 PULSOUT signal,BangOnTimeBS2 PULSOUT null,BangOffTimeBS2 FOR DelayCounter = 1 TO Delay IF LBangOffTimeBS2 = 1 AND Enabled = 1 THEN GOSUB LowerBangOffTimeBS2 IF RBangOffTimeBS2 = 1 AND Enabled = 1 THEN GOSUB RaiseBangOffTimeBS2 IF LBangOnTimeBS2 = 1 AND Enabled = 1 THEN GOSUB LowerBangOnTimeBS2 IF RBangOnTimeBS2 = 1 AND Enabled = 1 THEN GOSUB RaiseBangOnTimeBS2 IF StopButton = 1 THEN GOSUB Halt : GOTO MainLoop GOSUB Display NEXT GOTO MainLoop GOSUB Halt 'If your here - Something went very wrong!! signal = 0 OKLED = 0 STOP 'Subroutiens Halt: signal = 0 'Be sure the output is low Enabled = 0 BangOnTimeBS2 = BangOnTimeBS2LowLimit BangOffTimeBS2 = BangOffTimeBS2HighLimit OutOnLED = 0 RETURN LowerBangOffTimeBS2: BangOffTimeBS2 = BangOffTimeBS2 -1 IF BangOffTimeBS2 < BangOffTimeBS2LowLimit THEN BangOffTimeBS2 = BangOffTimeBS2LowLimit RETURN RaiseBangOffTimeBS2: BangOffTimeBS2 = BangOffTimeBS2 + 1 IF BangOffTimeBS2 > BangOffTimeBS2HighLimit THEN BangOffTimeBS2 = BangOffTimeBS2HighLimit RETURN LowerBangOnTimeBS2: BangOnTimeBS2 = BangOnTimeBS2 - 1 IF BangOnTimeBS2 < BangOnTimeBS2LowLimit THEN BangOnTimeBS2 = BangOnTimeBS2LowLimit : RETURN IF BangOnTimeBS2 > 1000 THEN BangOnTimeBS2 = 0 : RETURN GOSUB RaiseBangOffTimeBS2 RETURN RaiseBangOnTimeBS2: BangOnTimeBS2 = BangOnTimeBS2 + 1 IF BangOnTimeBS2 > BangOnTimeBS2HighLimit THEN BangOnTimeBS2 = BangOnTimeBS2HighLimit : RETURN GOSUB LowerBangOffTimeBS2 RETURN Display: DEBUG HOME DEBUG "T1 = ",DEC4 BangOnTimeBS2*4/5,CR DEBUG "T2 = ",DEC4 BangOffTimeBS2*4/5,CR DEBUG "T3 = ",DEC5 (BangOnTimeBS2+BangOffTimeBS2)*4/5+125,CR DEBUG "Reps = ",DEC4 25,CR DEBUG "DT = ",DEC4 Delay RETURN GOSUB Halt 'If your here - Something went very wrong!! signal = 0 OKLED = 0 STOP