! Instrument Driver for the HP 8112A Pulse/Function Generator ! Rev. A.00.03 REVISION 1.1; INITIALIZE Reset; ERROR COMPONENT ERROR; COMPONENT Error_string; TYPE STRING 40; GET ACTIONS; GET ERROR; END ACTIONS; END COMPONENT; COMPONENT ERROR NOTSAVED NOERRCHECK; TYPE INTEGER; INITIAL 0; GET ACTIONS; OUTPUT STRING "IERR"; ENTER Error_string FORMAT "K"; IF LIVEMODE THEN; FETCH Error_string; FETCH "NO MESSAGE"; POS; IF STACK THEN; OUTPUT STRING "IERR"; WAIT TIME 0.2; ENTER Error_string FORMAT "K"; END IF; SELECT Error_string; CASE " NO ERROR "; FETCH 0; CASE ELSE; FETCH 1; END SELECT; STORE ERROR; ELSE; END IF; END ACTIONS; END COMPONENT; COMPONENT Status NOTSAVED; TYPE INTEGER; GET ACTIONS; SPOLL; STORE DEFAULT; END ACTIONS; END COMPONENT; COMPONENT Reset NOTSAVED; TYPE INTEGER; SET ACTIONS; CLEAR; wait time .2; POKEINITIAL; OUTPUT STRING "RCL 0"; wait time .2; SET Width; SET Delay; END ACTIONS; PANEL SET ACTIONS; SET Menu; GOSUB Level_range_set; GOSUB Amp_off_set; END ACTIONS; END COMPONENT; COMPONENT Menu NOGEN NOERRCHECK; TYPE DISCRETE; VALUES Main, Levels, Edges, Status_Panel, About; INITIAL Main; PANEL SET ACTIONS; HIDE HP8112A, Main; HIDE HP8112A, Levels; HIDE HP8112A, Edges_panel; HIDE HP8112A, Status_Panel; HIDE HP8112A, About; HIDE HP8112A, Bottom; HIDE HP8112A, Lin_gss; SHOW HP8112A, TOP; SELECT Menu; CASE Main; SHOW HP8112A, Main; SHOW HP8112A, Bottom; CASE Levels; SHOW HP8112A, Levels; SHOW HP8112A, Bottom; CASE Edges; SHOW HP8112A, Edges_panel; GOSUB Show_lin_gss; CASE Status_Panel; SHOW HP8112A, Status_Panel; CASE About; SHOW HP8112A, About; END SELECT; END ACTIONS; END COMPONENT; COMPONENT Mode; TYPE DISCRETE; VALUES Norm, Trig, Gate, E_Width, E_Burst; INITIAL Norm; SET ACTIONS; OUTPUT Mode TABLE "M1" "M2" "M3" "M4" "M5"; END ACTIONS; END COMPONENT; COMPONENT Control; TYPE DISCRETE; VALUES Off, Perc, Delc, Widc, Hilc; INITIAL Off; SET ACTIONS; OUTPUT Control TABLE "CT0" "CT1" "CT2" "CT3" "CT4"; END ACTIONS; END COMPONENT; COMPONENT Waveform; TYPE DISCRETE; VALUES Fixed, Linear, Gauss; INITIAL Linear; COUPLED Leading_edge, Trailing_edge; SET ACTIONS; OUTPUT Waveform TABLE "W1" "W2" "W3"; END ACTIONS; PANEL SET ACTIONS; FETCH Menu; FETCH (Menu) Edges; NE; IF STACK THEN; ELSE; GOSUB Show_lin_gss; END IF; END ACTIONS; END COMPONENT; COMPONENT Leading_edge; TYPE CONTINUOUS; VALUES RANGE 5.5E-9, 99.9E-3; INITIAL 10E-9; COUPLED Trailing_edge; SET ACTIONS; GOSUB Units_set; OUTPUT STACK FORMAT '"LEE",K,"MS"'; END ACTIONS; GET ACTIONS; OUTPUT STRING "ILEE"; GOSUB Get_parm; STORE Leading_edge; END ACTIONS; END COMPONENT; COMPONENT Trailing_edge; TYPE CONTINUOUS; VALUES RANGE 5.5E-9, 99.9E-3; INITIAL 10E-9; COUPLED Leading_edge; SET ACTIONS; GOSUB Units_set; OUTPUT STACK FORMAT '"TRE",K,"MS"'; END ACTIONS; GET ACTIONS; OUTPUT STRING "ITRE"; GOSUB Get_parm; STORE Trailing_edge; END ACTIONS; END COMPONENT; COMPONENT LEADHI NOGEN, NOTSAVED, NOERRCHECK; TYPE CONTINUOUS; END COMPONENT; COMPONENT LEADLO CLONE LEADHI; COMPONENT TRAILHI CLONE LEADHI; COMPONENT TRAILLO CLONE LEADHI; COMPONENT HIL_HI CLONE LEADHI; COMPONENT HIL_LO CLONE LEADHI; COMPONENT LOL_HI CLONE LEADHI; COMPONENT LOL_LO CLONE LEADHI; COMPONENT Amplitude; TYPE REAL; END COMPONENT; COMPONENT Offset; TYPE REAL; END COMPONENT; COMPONENT Hi_level; TYPE CONTINUOUS; VALUES RANGE HIL_LO,HIL_HI; INITIAL 1.0; SET ACTIONS; OUTPUT Hi_level FORMAT '"HIL",K,"V"'; END ACTIONS; PANEL SET ACTIONS; GOSUB Lo_hi_set; GOSUB Amp_off_set; END ACTIONS; GET ACTIONS; OUTPUT STRING "IHIL"; GOSUB Get_parm; STORE Hi_level; END ACTIONS; END COMPONENT; COMPONENT Lo_level; TYPE CONTINUOUS; VALUES RANGE LOL_LO,LOL_HI; INITIAL 0.0; SET ACTIONS; OUTPUT Lo_level FORMAT '"LOL",K,"V"'; END ACTIONS; PANEL SET ACTIONS; GOSUB Hi_lo_set; GOSUB Amp_off_set; END ACTIONS; GET ACTIONS; OUTPUT STRING "ILOL"; GOSUB Get_parm; STORE Lo_level; END ACTIONS; END COMPONENT; COMPONENT Output_enable; TYPE DISCRETE; VALUES Off, On; INITIAL Off; SET ACTIONS; OUTPUT Output_enable TABLE "D1" "D0"; END ACTIONS; END COMPONENT; COMPONENT Burst_count; TYPE INTEGER; VALUES RANGE 1, 1999, 1; INITIAL 1; SET ACTIONS; OUTPUT Burst_count FORMAT '"BUR",K,"#"'; END ACTIONS; GET ACTIONS; OUTPUT STRING "IBUR"; GOSUB Get_parm; STORE Burst_count; END ACTIONS; END COMPONENT; COMPONENT Trigger_mode; TYPE DISCRETE; VALUES Off, Positive, Negative, Both; INITIAL Positive; SET ACTIONS; OUTPUT Trigger_mode TABLE "T0" "T1" "T2" "T3"; END ACTIONS; END COMPONENT; COMPONENT Complement; TYPE DISCRETE; VALUES Off, On; INITIAL Off; SET ACTIONS; OUTPUT Complement TABLE "C0" "C1"; END ACTIONS; END COMPONENT; COMPONENT Limit; TYPE DISCRETE; VALUES Off, On; INITIAL Off; SET ACTIONS; OUTPUT Limit TABLE "L0" "L1"; END ACTIONS; PANEL SET ACTIONS; GOSUB Level_range_set; END ACTIONS; END COMPONENT; COMPONENT Period; TYPE CONTINUOUS; VALUES RANGE 20.0E-9, 950E-3; INITIAL 1.0E-3; COUPLED Period; SET ACTIONS; GOSUB Units_set; OUTPUT STACK FORMAT '"PER",K,"MS"'; END ACTIONS; GET ACTIONS; OUTPUT STRING "IPER"; GOSUB Get_parm; STORE Period; END ACTIONS; END COMPONENT; COMPONENT Width; TYPE CONTINUOUS; VALUES RANGE 10E-9, 950E-3; INITIAL 100E-6; COUPLED Width; SET ACTIONS; GOSUB Units_set; OUTPUT STACK FORMAT '"WID",K,"MS"'; IF RECALLING THEN; ELSE; INVALIDATE Duty; END IF; END ACTIONS; GET ACTIONS; OUTPUT STRING "IWID"; GOSUB Get_parm; STORE Width; END ACTIONS; END COMPONENT; COMPONENT Duty; TYPE CONTINUOUS; VALUES RANGE 1, 99, 1; INITIAL 50; SET ACTIONS; OUTPUT Duty FORMAT '"DTY",K,"%"'; IF RECALLING THEN; ELSE; INVALIDATE Width; END IF; END ACTIONS; GET ACTIONS; OUTPUT STRING "IDTY"; GOSUB Get_parm; STORE Duty; END ACTIONS; END COMPONENT; COMPONENT Delay; TYPE CONTINUOUS; VALUES RANGE 65E-9,950E-3; INITIAL 65E-9; COUPLED Delay; SET ACTIONS; GOSUB Units_set; OUTPUT STACK FORMAT '"DEL",K,"MS"'; IF RECALLING THEN; ELSE; INVALIDATE Double; END IF; END ACTIONS; GET ACTIONS; OUTPUT STRING "IDEL"; GOSUB Get_parm; STORE Delay; END ACTIONS; END COMPONENT; COMPONENT Double; TYPE CONTINUOUS; VALUES RANGE 20E-9,950E-3; INITIAL 200E-6; COUPLED Double; SET ACTIONS; GOSUB Units_set; OUTPUT STACK FORMAT '"DBL",K,"MS"'; IF RECALLING THEN; ELSE; INVALIDATE Delay; END IF; END ACTIONS; GET ACTIONS; OUTPUT STRING "IDBL"; GOSUB Get_parm; STORE Double; END ACTIONS; END COMPONENT; COMPONENT Set; TYPE INTEGER; SET ACTIONS; OUTPUT STRING "SM1"; FLUSH; OUTPUT STRING "SM0"; IF RECALLING THEN; ELSE; FETCH (Mode) Norm; STORE Mode; FETCH Period; FETCH 0.5; MUL;STORE Width; GET Width; FETCH Period; FETCH 0.1; MUL;DUP; FETCH 5.5E-9; GT; IF STACK THEN; STORE Leading_edge; ELSE; FETCH 5.5E-9;STORE Leading_edge; END IF; FETCH Leading_edge;STORE Trailing_edge; FETCH 65E-9;STORE Delay; END IF; END ACTIONS; END COMPONENT; COMPONENT Trigger; TYPE INTEGER; SET ACTIONS Trigger_set; END COMPONENT; COMPONENT Timing_check; TYPE DISCRETE; VALUES Off, On; INITIAL On; SET ACTIONS; OUTPUT Timing_check TABLE "SR0" "SR1"; END ACTIONS; END COMPONENT; COMPONENT Temp_string NOGEN, NOTSAVED, NOERRCHECK; TYPE STRING 50; END COMPONENT; ACTIONS Show_lin_gss; FETCH Waveform; FETCH (Waveform) Fixed; NE; IF STACK THEN; SHOW Main, Lin_gss; ELSE; HIDE Main, Lin_gss; END IF; END ACTIONS; ACTIONS Level_range_set; IF Limit THEN; FETCH Hi_level; STORE HIL_HI; GOSUB Hi_lo_set; GOSUB Lo_hi_set; FETCH Lo_level; STORE LOL_LO; ELSE; GOSUB Hi_lo_set; GOSUB Lo_hi_set; FETCH 8.0; STORE HIL_HI; FETCH -8.0; STORE LOL_LO; END IF; END ACTIONS; ACTIONS Hi_lo_set; FETCH Lo_level; FETCH -0.1;SUB; STORE HIL_LO; END ACTIONS; ACTIONS Lo_hi_set; FETCH Hi_level; FETCH 0.1;SUB; STORE LOL_HI; END ACTIONS; ACTIONS Range_set; FETCH Waveform; FETCH (Waveform) Fixed; EQ; IF STACK THEN; ! Transition is to Fixed FETCH 4.5E-9;STORE LEADLO; FETCH 4.5E-9;STORE LEADHI; FETCH 4.5E-9;STORE TRAILLO; FETCH 4.5E-9;STORE TRAILHI; ELSE; ! Transition is to Linear or Gauss FETCH 5.5E-9;STORE LEADLO; FETCH 99.9E-3;STORE LEADHI; FETCH 5.5E-9;STORE TRAILLO; FETCH 99.9E-3;STORE TRAILHI; END IF; END ACTIONS; ACTIONS Units_set; FETCH DEFAULT; FETCH 1000; MUL; END ACTIONS; ACTIONS Trigger_set; TRIGGER; END ACTIONS; ACTIONS Amp_off_set; FETCH Hi_level; FETCH Lo_level; SUB;STORE Amplitude; FETCH Lo_level; STORE Offset; END ACTIONS; ACTIONS Get_parm; ! Come here after instrument has been sent ! Query, return result on stack IF LIVEMODE THEN; ! ENTER STACK FORMAT "#,9D"; ! Still have 3 chars of units out there ENTER Temp_string FORMAT "K"; FETCH Temp_string; FETCH "NO MESSAGE"; POS; IF STACK THEN; WAIT TIME .1; ENTER temp_string FORMAT "K"; END IF; FETCH Temp_string; TRIMSTR; DUP; FETCH " "; !get rid of the header POS; FETCH 40; SUBSTR; VAL; ! this should put value on the stack FETCH Temp_string; DUP; LENGTH; FETCH 2; SUB; FETCH 3; SUBSTR; STORE Temp_string; SELECT Temp_string; ! Frequency CASE " MZ"; FETCH 1E-3; CASE " HZ"; FETCH 1; CASE "KHZ"; FETCH 1E3; CASE "MHZ"; FETCH 1E6; ! Seconds CASE " S"; FETCH 1; CASE " MS"; FETCH 1E-3; CASE " US"; FETCH 1E-6; CASE " NS"; FETCH 1E-9; ! Sweep sometimes does seconds like this CASE " S"; FETCH 1; CASE "S"; FETCH 1; CASE "MS"; FETCH 1E-3; ! Percent CASE "NS"; FETCH 1E-9; CASE "US"; FETCH 1E-6; CASE " %"; FETCH 1; ! Volts CASE " V"; FETCH 1; CASE " MV"; FETCH 1E-3; ! Count CASE " #"; FETCH 1; CASE ELSE; FETCH 1; ! In case of no engg. units, eg., Duty END SELECT; MUL; ELSE; FETCH DEFAULT; ! Just don't change anything when not LIVEMODE END IF; END ACTIONS; PANEL HP8112A; SIZE 214, 213; PANEL Main; SIZE 212,180; POSITION 1,1; TEXT 5, 159, "Mode"; DISCRETE Mode; POSITION 42, 159; LABEL "Norm","Trig","Gate","E_Wid.","E_Bur."; SIZE 58, 19; END DISCRETE; TEXT 107, 159, "Control"; DISCRETE Control; POSITION 170, 159; LABEL "Off","Perc","Delc","Widc","Hilc"; SIZE 40, 19; END DISCRETE; TEXT 5, 137, "Period"; CONTINUOUS Period; POSITION 125, 137; SIZE 85, 19; FORMAT "3 DIGITS"; END CONTINUOUS; BUTTON Set; POSITION 80,137; LABEL "Set"; SIZE 35,19; END BUTTON; TEXT 5,115, "Burst Count"; CONTINUOUS Burst_count; POSITION 125,115; SIZE 85,19; FORMAT "DDDD"; STYLE "NOENGR"; END CONTINUOUS; TEXT 5,93, "Width"; ! TOGGLE Width_s; ! POSITION 80,93; ! SIZE 35,19; ! LABEL "Off","On"; ! END TOGGLE; CONTINUOUS Width; POSITION 125,93; SIZE 85,19; FORMAT "3 DIGITS"; END CONTINUOUS ; TEXT 5,71, "Dcyc"; ! TOGGLE Duty_s; ! POSITION 80,71; ! SIZE 35,19; ! LABEL "Off","On"; ! END TOGGLE; CONTINUOUS Duty; POSITION 125,71; SIZE 70,19; FORMAT "3 DIGITS"; END CONTINUOUS; TEXT 200,71 "%"; TEXT 5,49, "Delay"; ! TOGGLE Delay_s; ! POSITION 80,49; ! SIZE 35,19; ! LABEL "Off","On"; ! END TOGGLE; CONTINUOUS Delay; POSITION 125,49; SIZE 85,19; FORMAT "3 DIGITS"; END CONTINUOUS; TEXT 5,27 "Double"; ! TOGGLE Double_s; ! POSITION 80,27; ! SIZE 35,19; ! LABEL "Off","On"; ! END TOGGLE; CONTINUOUS Double; POSITION 125,27; SIZE 85,19; FORMAT "DD"; END CONTINUOUS; END PANEL; ! of Main panel PANEL Levels; SIZE 212,180; POSITION 1,1; TEXT 11,150, "Limit"; TOGGLE Limit; POSITION 120,150; LABEL "Off", "On"; SIZE 85,19; END TOGGLE; TEXT 11,122, "Hi_level"; CONTINUOUS Hi_level; POSITION 120,122; SIZE 85,19; STYLE "NOENGR"; FORMAT "3 DIGITS"; END CONTINUOUS; TEXT 11,100, "Lo_level"; CONTINUOUS Lo_level; POSITION 120,100; SIZE 85,19; STYLE "NOENGR"; FORMAT "3 DIGITS"; END CONTINUOUS; TEXT 11,78, "Amplitude"; DISPLAY Amplitude; POSITION 120,78; SIZE 85,19; STYLE "NOENGR"; FORMAT "3 DIGITS"; END DISPLAY; TEXT 11,56, "Offset"; DISPLAY Offset; POSITION 120,56; SIZE 85,19; STYLE "NOENGR"; FORMAT "3 DIGITS"; END DISPLAY; TEXT 11,30, "Complement"; TOGGLE Complement; POSITION 120,30; LABEL "Off", "On"; SIZE 85,19; END TOGGLE; END PANEL; !of Levels panel PANEL Bottom; POSITION 11, 1; SIZE 200, 21; TOGGLE Output_enable; POSITION 10, 2; LABEL "Outp Off", "Outp On"; SIZE 85, 19; END TOGGLE; BUTTON Trigger; POSITION 110, 2; LABEL "Trigger"; SIZE 85, 19; END BUTTON; END PANEL; ! of Bottom Panel PANEL Edges_panel; SIZE 212,180; POSITION 1,1; TEXT 12,150, "Trigger Mode"; DISCRETE Trigger_mode; POSITION 120,150; LABEL "Off", "Positive", "Negative", "Both"; SIZE 85,19; END DISCRETE; TEXT 12,118, "Timing Check"; TOGGLE Timing_check; POSITION 120,118; LABEL "Off", "On"; SIZE 85,19; END TOGGLE; TEXT 12,86, "Pulse Shape"; DISCRETE Waveform; POSITION 120,86; LABEL "Square", "Linear", "Gaussian"; SIZE 85,19; END DISCRETE; END PANEL; PANEL Lin_gss; SIZE 212,75; POSITION 1,1; TEXT 12,54, "Lead_edge"; CONTINUOUS Leading_edge; POSITION 120,54; FORMAT "3 DIGITS"; SIZE 85,19; END CONTINUOUS; TEXT 12,19, "Trail_edge"; CONTINUOUS Trailing_edge; POSITION 120,19; SIZE 85,19; FORMAT "3 DIGITS"; END CONTINUOUS; END PANEL; !of Edges panel PANEL Status_Panel; SIZE 212,180; POSITION 1,1; TEXT 12, 146, "Status"; DISPLAY Status; POSITION 120, 146; SIZE 85, 19; END DISPLAY; TEXT 12, 98, "Error"; DISPLAY ERROR; POSITION 120, 98; SIZE 85, 19; END DISPLAY; DISPLAY Error_string; POSITION 5, 74; SIZE 202, 19; END DISPLAY; END PANEL; ! of Status Panel PANEL About; SIZE 212,180; POSITION 1,1; TEXT "HP8112A"; POSITION 53, 137; FONT 15, 25; END TEXT; TEXT 25, 120, "Pulse/Function Gen"; TEXT 34, 89, "Revision A.00.03"; TEXT 47, 60, "Copyright(C)"; TEXT 20, 43, "Hewlett-Packard Co."; TEXT 88, 26, "1990"; END PANEL; ! of About Panel PANEL TOP; POSITION 0,182; SIZE 214, 31; FOREGROUND (255,255,255),100; BUTTON Reset; POSITION 6, 6; SIZE 55, 19; LABEL "Reset"; BACKGROUND (0,130,70),0; END BUTTON; DISCRETE Menu; POSITION 72, 6; SIZE 139, 19; BACKGROUND (75,0,240),0; LABEL "Main Panel" ,"Levels Panel" ,"Edges Panel" , "Status Panel" ,"About Panel"; END DISCRETE; END PANEL; ! of TOP Panel END PANEL; ! of HP 8112A Panel