'StampPlot Graphical User Interface Code: ' Jack Walton & Martin Hebel 'Controller Code: '{$STAMP BS2} '{$PBASIC 2.5} CLK CON 0 ' Clock Pin CS1 CON 1 ' Chip Select ADC LT1093 DPIN1 CON 2 ' Data Pin ADC MUX CON 3 ' MUX of ADC CLK2 CON 5 ' Clock DAC LTC1446 DPIN2 CON 6 ' Chip Select for DAC CS2 CON 7 ' Data to DAC DATUM VAR Word ' Variable Holder for ADC and DAC butRun VAR Bit ' Holds status of RUN Button butStop VAR Bit ' Stop Button PlateVMin VAR Word ' Plate voltage Minimum PlateVMax VAR Word ' Plate Voltage Maximum PlateVStep VAR Byte ' Plate Voltage Steps PlateV VAR Word GridVMax VAR Byte ' Max Grid voltage from slider GridVMin VAR Byte ' Min Grid voltage from slider GridVStep VAR Byte ' Steps to increment Plate Voltage GridV VAR Word GridStep VAR Byte ' Steps to increment Grid Voltage Amps VAR Word ' Maximum plate current from text ChkRun VAR Bit V_X VAR Word ' temp X to plot I_Y VAR Word ' temp Y to plot LastX VAR Word ' Last X LastY VAR Word ' Last Y Color VAR Nib ' Color to plot with Start: PlateVMin = 0 PlateVMax = 0 PlateVStep = 0 GridVMax = 0 GridVMin = 0 GridVStep = 0 GridV = 0 GridStep = 0 Amps = 0 DO DEBUG "!READ (ChkRun)",CR ' Request run checkbox value SERIN 16,84,[DEC ButRun] ' Accept data PAUSE 100 DEBUG "!STAT NOT RUNNING",CR LOOP WHILE (ButRun=0) ' Wait UNTIL checked PAUSE 100 DEBUG "!READ (txtPVMax)",CR ' Request TextBox Max Plate voltage SERIN 16,84,[DEC PlateVMax] ' Accept data PAUSE 100 DEBUG "!READ (txtPVMin)",CR ' Request TextBox Min Plate voltage SERIN 16,84,[DEC PlateVMin] ' Accept data PAUSE 100 DEBUG "!READ (txtPVStep)",CR ' Request TextBox Plate voltage Increment SERIN 16,84,[DEC PlateVStep] ' Accept data PAUSE 100 DEBUG "!READ (txtGVMin)",CR ' Request Grid Voltage Minimum SERIN 16,84,[DEC GridVMin] ' Accept data PAUSE 100 DEBUG "!READ (txtGVMax)",CR ' Request Maximum Grid voltage SERIN 16,84,[DEC GridVMax] ' Accept data PAUSE 100 DEBUG "!READ (txtGVStep)",CR ' Request Grid voltage Steps SERIN 16,84,[DEC GridVStep] ' Accept data PAUSE 100 DEBUG "!READ (txtPlateMax)",CR ' Request maximum Plate Current SERIN 16,84,[DEC Amps] ' Accept data PAUSE 100 AMPS = AMPS * 10 ' Normalize Amps for 10 bit max ADC output LastX = 0 : LastY = 0 ' Clear last positions IF (PlateVStep = 1) OR (GridVStep=1) THEN ' Entering a "1" causes the DAC to enter static mode GOSUB StaticRoutine ELSE GOTO Main ENDIF MAIN: DEBUG "!STAT RUNNING!",CR COLOR = 1 FOR GridV = GridVMin TO GridVMax STEP GridVStep 'V_X=PlateVMin GOSUB PlateStepper NEXT DEBUG "!O butRun = 0",CR ' Clear the run button DEBUG "!BELL",CR ' Sound the bell DEBUG "!STAT DONE!",CR DEBUG "!O chkRun=0",CR GOTO Start ' Start over PlateStepper: FOR PlateV = PlateVMin TO PlateVMax STEP PlateVStep HIGH CS1 HIGH CS2 LOW CS2 PAUSE 10 DATUM = GridV * 80 ' First 12 bits to DAC are Grid Voltage SHIFTOUT DPIN2,CLK2,1,[DATUM\12] ' Send first 12 bits to DAC DATUM= PlateV*10 'DATUM = DATUM * 10 ' Multiply Plate Voltage * 10 for 12 bit DAC SHIFTOUT DPIN2,CLK2,1,[DATUM\12] ' Send second 12 bits to DAC HIGH CS2 ' Load and enable DAC ' Set MUX of ADC to Channel 0 LOW CS1 ' Enable ADC PAUSE 10 SHIFTOUT CLK,MUX,1,[99\7] ' Sends ADC MUX Selection -- Channel 0, Unipolar, MSBF SHIFTIN CLK,DPIN1,2,[DATUM\10] ' Read Actual Plate Voltage V_X = DATUM PAUSE 10 SHIFTOUT CLK,MUX,1,[115\7] ' Sends ADC MUX Selection -- Channel 2, Unipolar, MSBF SHIFTIN CLK,DPIN1,2,[DATUM\10] ' Read Actual Plate Voltage 'I_Y = DATUM I_Y=GridV V_X=PlateV PAUSE 10 DEBUG "!fcir ", ' Plot a point at VoltPlat & IP DEC V_X, ",", DEC I_Y, ",.5A,", DEC Color,CR DEBUG "!LINE ", ' Draw a line between last and current DEC V_X, ",", DEC I_Y, ",", DEC LastX, ",", DEC LastY, ",", DEC Color,CR LastX = V_X ' Update last values LastY = I_Y HIGH CS1 I_Y=GridV V_X=PlateV IF PlateV = PlateVMax THEN GOSUB GridText DEBUG "!READ ChkRun",CR ' Reads the Run button and terminates if un-pressed SERIN 16,84,[DEC butRun] PAUSE 100 IF butRun = 0 THEN Terminate NEXT LastX = PlateVMin LastY =0 Color = Color + 1 ' Next color for next plot RETURN GridText: DEBUG "!TEXT ", DEC V_X -10, ",", ' +5 to offset X DEC I_Y -4, ",.7A,", ' A here also to maintaine font size, can go smaller (0.7?) or larger DEC Color, ",", ' set color "Grid V =",DEC GridV,CR ' text to plot RETURN StaticRoutine: ' Used to Calibrate DAC or Hold Voltage Constant ' No Data is sent to ADC ' Routine is run until "STOP" box is checked PAUSE 100 DEBUG "!STAT Static Calibration Routine",CR HIGH CS2 LOW CS2 PAUSE 10 DATUM = GridVMax * 80 ' First 12 bits to DAC are Grid Voltage SHIFTOUT DPIN2,CLK2,1,[DATUM\12] ' Send first 12 bits to DAC DATUM = PlateVMax * 10 ' Multiply Plate Voltage * 10 for 12 bit DAC SHIFTOUT DPIN2,CLK2,1,[DATUM\12] ' Send second 12 bits to DAC HIGH CS2 ' Load and enable DAC DEBUG "!READ (ChkRun)",CR SERIN 16,84,[DEC ButRun] ' Accept data PAUSE 100 IF ButRun=0 THEN GOTO Terminate ELSE GOTO StaticRoutine ENDIF RETURN FAULT: ' Used if Max Current Exceeded DEBUG "!STAT Maximum Current Exceeded!",CR HIGH CS2 LOW CS2 SHIFTOUT DPIN2,CLK2,1,[0\24] DEBUG "!O chkRun=0",CR HIGH CS2 GOTO Start TERMINATE: HIGH CS2 LOW CS2 SHIFTOUT DPIN2,CLK2,1,[0\24] HIGH CS2 DEBUG "!STAT Running Terminated by Operator",CR DEBUG "!BELL",CR:DEBUG "!BELL",CR: DEBUG "!BELL",CR DEBUG "!O chkRun=0",CR PAUSE 4000 GOTO Start