FTN4,L SUBROUTINE SFAMP(IUNIT,AMP,AOFST,ISCL,IOUT), +09580-16311 REV.2001 791023 C C------------------------------------- C C HP 3325A SYNTHESIZER*FUNCTION GENERATOR C (SFAMP) C C RELOCATABLE 09580-16311 C SOURCE 09580-18311 C C R.UNTALAN 780917 REV. A C R.UNTALAN 790606 C BOB RICHARDS 790607 C R.UNTALAN 790625 C BOB RICHARDS 791023 C C------------------------------------ C C !=================================================! C ! ! C ! (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979 ! C ! ALL RIGHTS RESERVED ! C ! ! C ! NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, ! C ! REPRODUCED OR TRANSLATED INTO ANOTHER PROGRAM ! C ! LANGUAGE WITHOUT THE PRIOR WRITTEN CONSENT OF ! C ! THE HEWLETT-PACKARD COMPANY. ! C ! ! C !-------------------------------------------------! C ! ! C ! TEST SYSTEM SOURCE SOFTWARE IS THE PROPRIETARY ! C ! MATERIAL OF THE HEWLETT-PACKARD COMPANY. ! C ! ! C ! THIS SOURCE DATA SHALL BE USED SOLELY IN ! C ! CONJUCTION WITH ELECTRONIC COMPUTER SYSTEMS ! C ! SUPPLIED TO THE USER BY HEWLETT-PACKARD. ! C ! ! C ! THIS PROPRIETARY DATA SHALL NOT BE COPIED OR ! C ! OTHERWISE REPRODUCED WITHOUT THE PRIOR WRITTEN ! C ! CONSENT OF HEWLETT-PACKARD, EXCEPT THAT ONE ! C ! COPY MAY BE MADE AND RETAINED BY THE USER FOR ! C ! ARCHIVE PURPOSES. ! C ! ! C ! THE USER SHALL NOT DISCLOSE THIS DATA TO ANY ! C ! THIRD PARTIES WITHOUT THE PRIOR WRITTEN CONSENT ! C ! OF HEWLETT-PACKARD. IN ADDITION, THE USER SHALL ! C ! USE AT LEAST THE SAME CARE AND SAFEGUARDS TO ! C ! PROTECT THIS DATA FROM UNAUTHORIZED USE OR ! C ! DISCLOSURE AS THE USER USES TO PROTECT ITS OWN ! C ! PROPRIETARY DATA. ! C ! ! C !=================================================! C C GENERAL: C -------- C C THE FOLLOWING DEVICE SUBROUTINES ARE USED C TO PROGRAM THE HP3325A SYNTHESIZER*FUNCTION GENERATOR. C C HARDWARE REQUIRED: C ------------------ C A. HP3325A PROGRAMMABLE PULSE GENERATOR. C B. HP59310 BUS INTERFACE KIT. C C JUMPER POSITION: C SW1-1 - 1 C SW1-2 TO SW1-8 - 0 C SW2-1 - 0 C SW2-2 - 0 C SW2-3 - 0 C SW2-4 - 0 C SW2-5 - 1 C SW2-6 - REN C SW2-7 - ICF C SW2-8 - CNX C C C. HP 21XX SERIES COMPUTER C C BRANCH AND MNEMONIC TABLE ENTRIES: C ---------------------------------- C C SFAMP(I,R,R,I,I), OV=XX, ENT=SFAMP, FIL=%SFAMP C C CONFIGURATION TABLE ENTRIES: C ---------------------------- C C C R 29,1,4 C U1 C 0 ENTER 0 FOR STANDARD UNIT OR 1 FOR OPT.002 C 0 FUNCTI0N WAVEFORM TEMPORARY STORAGE C 0.0 TEMPORARY STORAGE FOR DC-OFFSET C C C C C C------------------------------------ C C SFAMP(IUNIT,AMP,AOFST,ISCL,IOUT) C C WHERE: C C IUNIT = UNIT # C C AMP = AMPLITUDE C STANDARD UNIT C ------------- C C ALL WAVEFORM FUNCTIONS C ---------------------- C peak-peak = 1.000mV TO 10.00 VOLTS C C SINE FUNCTION C ------------- C rms= 0.354mV TO 3.536 VOLTS C dBm(50 OHM) = -56.02 TO +23.98 C C C SQUARE FUNCTION C --------------- C rms= 0.500mV TO 5.000 VOLTS C dBm(50 OHM) = -53.01 TO +26.99 C C C TRIANGLE/RAMPS FUNTIONS C ----------------------- C rms= 0.289mV TO 2.887 VOLTS C dBm(50 OHM) = -57.78 TO +22.22 C C C DC ONLY FUNCTION C ---------------- C AMPLITUDE MUST BE SET TO ZERO. C C C AOFST = OFFSET C DC only(no ac signal): 0 TO +-5.0V 50 OHM C IF UNIT HAS OPTION .002 : .01MV TO 20V 500OHM C DC+AC: Maximum dc offset +-4.5 V on highest range C decreasing to +-4.5mV on lowest range. C IF UNIT HAS OPT.002 ,MULTIPLY MINIMUM AND C MAXIMUM BY 4. C C C C ISCL = UNITS SCALE C 0= peak-peak C 1= rms C 2= dBm C C C IOUT = OUTPUT SELECT C C IN STANDARD INSTRUMENTS IOUT CONTROLS THE OUTPUT C SIGNAL ROUTING. C C 0 = REAR C 1 = FRONT C C IF UNIT IS AN OPT.002 (HIGH VOLTAGE) IOUT CONTROLS THE C HIGH OUTPUT VOLTAGE. C C 0 = HIGH VOLTAGE OFF C 1 = HIGH VOLTAGE ON C C C C------------------------------------ DIMENSION IERMS(5) DATA IDTN / 29 / DATA IERMS / 10,5,2HSF,2HAM,2HP / C IERMS=10 C C FIND STATION AND LU #'S C ISTN = STATION # C LU1 = HP 3325A LU C LUIB = 59310 LU C ISTN=ISN(DUMMY) LU1=LUDV(ISTN,IDTN,IUNIT) LUIB=IBLU0(LU1) IF(LU1 .LE. 0 .OR. LUIB .LE. 0)GOTO 800 C C CALL X SUB C CALL XFAMP(LU1,LUIB,IERMS,IUNIT,AMP,AOFST,ISCL,IOUT) IF(IERMS)800,20,800 C C EXIT C 20 RETURN C C ERROR EXIT C 800 CALL ERROR(IERMS,IERMS(2)) RETURN END C C--------------------------------------------- C SUBROUTINE XFAMP(LU1,LUIB,IERR,IU,AMP,AOFST,ISCL,IOUT), +09580-16311 REV.2001 791023 C--------------------------------------------- C C DIMENSION IOBUF(20),IERR(5),IVAL(10),IREG(2),IALRM(5) DIMENSION IOFF(10),IBUF(4),COFF(2) EQUIVALENCE (REG,IREG,IA),(IREG(2),IB),(IBUF(1),COFF(1)) C C C C C C READ FROM ALLFL TO DETERMINE IF STD. OR OPT.002 C IF OPT.002 MAX. IS 40 VOLTS AND MIN. IS 4 MV. C C IBUF(1)= 0 STD. UNIT C 1 OPT. 002 C C IBUF(2)= WAVEFORM FUNCTION C =0 SINE WAVE C =1 SQUARE WAVE C =2 TRIANGLE WAVE C =3 POS. RAMP C =4 NEG. RAMP C =5 DC ONLY C C CALL TIM(29,IU,1,IBUF,4,IER) IF(IER .NE. 0) RETURN C C IERR=0 C FMAX=1.0 IF(IBUF .EQ. 1 .AND. IOUT .EQ. 1) FMAX=4.0 C C C C SET P-P LIMITS FOR ALL WAVEFORMS C AMIN=.001*FMAX AMAX=10.00*FMAX IF(IBUF(2) .EQ. 5) AMIN=0.0 C C C DETERMINE RANGE OF AMPLITUDE AND THEN DETERMINE C THE MAXIMUM OFFSET LIMITS BASED ON C THE AMPLITUDE RANGE. C C C C PPV=AMP C C IF(ISCL .EQ. 0) GOTO 90 C C IF(ISCL .EQ. 1) GOTO 75 C C C C CONVERT DBM TO RMS THEN CONVERT RMS TO P-P VALUE C RMS= 10.0**(AMP/20.0)*.2236 GOTO 89 C C 75 RMS=AMP C C C SINE WAVE C 89 IF(IBUF(2) .EQ. 0) PPV=RMS*2.828 C C SQUARE WAVE C IF(IBUF(2) .EQ. 1) PPV=RMS*2 C C TRIANGLE AND RAMPS C IF(IBUF(2) .GE. 2) PPV=RMS*3.4632 C C C C C DETERMINE RANGE OF AMPLITUDE C 90 IF((PPV .GE. .001*FMAX) .AND. (PPV .LT. .003334*FMAX)) IRNG=7 C IF((PPV .GE. .003334*FMAX) .AND. (PPV .LT. .01000*FMAX)) IRNG=6 C IF((PPV .GE. .0100*FMAX) .AND. (PPV .LT. .03334*FMAX)) IRNG=5 C IF((PPV .GE. .03334*FMAX) .AND. (PPV .LT. .10000*FMAX)) IRNG=4 C IF((PPV .GE. .100*FMAX) .AND. (PPV .LT. .3334*FMAX)) IRNG=3 C IF((PPV .GE. .3334*FMAX) .AND. (PPV .LT. 1.000*FMAX)) IRNG=2 C IF((PPV .GE. 1.000*FMAX) .AND. (PPV .LE. 10.000*FMAX)) IRNG=1 C C C DETERMINE ATTENUATION FACTOR C IF(IRNG .EQ. 7) ATT=1000 C IF(IRNG .EQ. 6) ATT=300 C IF(IRNG .EQ. 5) ATT =100 C IF(IRNG .EQ. 4) ATT =30 C IF(IRNG .EQ. 3) ATT=10 C IF(IRNG .EQ. 2) ATT=3 C IF(IRNG .EQ. 1) ATT=1 C C C DETERMINE MINIMUM AND MAXIMUM DC OFFSET C C PMAX=5.0*FMAX PMIN=0 C C IF(PPV .EQ. 0) GOTO 5 C PMAX=((5*FMAX/ATT)-(PPV/2)) C C 5 IF(ISCL .EQ. 0) GOTO 100 C C DETERMINE WHICH WAVEFORM C IF(IBUF(2)-1)10,20,30 C C C ********SINE WAVE************ C 10 IF(ISCL-2)12,13 C C SET RMS LIMITS 12 AMIN=.000354*FMAX AMAX=3.536*FMAX GOTO 100 C C SET dBM LIMITS 13 AMIN=-56.02 AMAX=23.98 C IF(IBUF(1) .EQ. 0) GOTO 100 C AMIN=-43.94 AMAX=36.02 C GOTO 100 C C C*********SQUARE WAVE ************* C 20 IF(ISCL-2)22,23 C C SET RMS LIMITS 22 AMIN=.0005*FMAX AMAX=5.*FMAX C IF(IBUF(1) .EQ. 0) GOTO 100 C AMIN=-40.96 AMAX=39.03 C GOTO 100 C C SET dBM LIMITS 23 AMIN=-53.01 AMAX=26.99 GOTO 100 C C C***********TRIANGLE AND RAMP************ C OR DC ONLY...IF DC ONLY THEN LIMITS ARE C ALREADY ESTABLISHED. C 30 IF(IBUF(2) .EQ. 5) GOTO 100 IF(ISCL-2) 32,33 C C SET RMS LIMITS 32 AMIN=.0002890*FMAX AMAX=2.887*FMAX GOTO 100 C C C SET dBM LIMITS 33 AMIN=-57.78 AMAX=22.22 C IF(IBUF(1) .EQ. 0) GOTO 100 C AMIN=45.70 AMAX=34.26 C C C CHECK PARAMETERS C C C C C C******************* C C C 100 IF(AMP .LT. AMIN .OR. AMP .GT. AMAX) GOTO 8000 IF(ISCL .LT. 0 .OR. ISCL .GT. 2) GOTO 8000 BOFST=ABS(AOFST) IF (BOFST .GT. PMAX) GOTO 8000 C C C CLEAR OUTPUT BUFFER AND STRING BUFFER C DO 88 I=1,10 IVAL(I)=2H IOBUF(I)=2H 88 IOFF(I)=2H C C C PROCESS AMPLITUDE PARAMETER C BMP=ABS(AMP) N=2 IFLAG=0 C C 40 IF(IFLAG .EQ. 0 .AND. ISCL .EQ. 2) GOTO 111 C C FIND OUT HOW LARGE IS THE AMPLITUDE C DO 44 I=1,-3,-1 FXP=FLOAT(I) IF(BMP .GE. 10.0**FXP) GOTO 111 44 N=N+1 N=6 C C C PROCESS ONLY FOUR SIGNIFICANT DIGITS C 111 CALL PDEC(BMP,N,XMP) C C IF(IFLAG .EQ. 1) GOTO 1000 C C IF(AMP .LT. 0.) XMP=-XMP C IF(ABS(XMP) .LT. 1) GOTO 800 C C C CALL F2A(XMP,IVAL) C C C GOTO 900 C C C PROCESS AMPLITUDE OR OFFSET ONLY FOR VALUES <1 MV C C 800 XMP=ABS(XMP)+.0005 IX1=INT(ABS(XMP)*10.) IX2=INT(ABS(XMP)*100.)-(IX1*10) IX3=INT(ABS(XMP)*1000.)-(IX1*100)-(IX2*10) ID1=IX1*2**8+30000B ID2=IX2+60B ID3=IX3+60B C IF(IFLAG .EQ. 1) GOTO 1100 C C C C C IF(XMP .LT. 0) IVAL(2)=2H-. IF(XMP .LT. 0) IVAL(3)=IOR(ID1,ID2) C C IF(XMP .GT. 0) IVAL(2)=27060B+IX1 IF(XMP .GT. 0) IVAL(3)=ID2*2**8 IF((XMP .GT. 0) .AND. (ISCL .NE. 2)) IVAL(3)=IOR(IVAL(3),ID3) IVAL(4)=2H C C 900 IOBUF(3)=2HAM IOBUF(4)=IVAL(2) IOBUF(5)=IVAL(3) IOBUF(6)=IAND(177440B,IVAL(4)) IF((ISCL .EQ. 2) .AND. (AMP .LT. 0))IOBUF(6)=IVAL(4) IOBUF(7)=2HMV IF((ISCL .EQ. 0) .AND. (AMP .GE. 1.0)) IOBUF(7)=2HVO IF((ISCL .EQ. 1) .AND. (AMP .GE. 1.0)) IOBUF(7)=2HVR IF((ISCL .EQ. 1) .AND. (AMP .LT. 1.0)) IOBUF(7)=2HMR IF(ISCL .EQ. 2) IOBUF(7)=2HDB C C C C PROCESS OFFSET PAREMETER C************************* C BMP=ABS(AOFST) N=2 IFLAG=1 GOTO 40 C C 1000 IF(AOFST .LT. 0) XMP=-XMP C IF(ABS(XMP) .LT. 1) GOTO 800 C C CALL F2A(XMP,IOFF) C GOTO 1200 C C 1100 IOFF(2)=2H-. IOFF(3)=IOR(ID1,ID2) ID3=ID3*2**8 IOFF(4)=IOR(ID3,40B) C C IF(AOFST .GT. 0.) IOFF(2)=2H+. C C C 1200 IOBUF(8)=2HOF IOBUF(9)=IOFF(2) IOBUF(10)=IOFF(3) IOBUF(11)=IOFF(4) IF(ABS(AOFST) .LT. 1.0) IOBUF(12)=2HMV IF(ABS(AOFST) .GE. 1.0) IOBUF(12)=2HVO C C C IF PREVIOUS OFFSET IS GREATER THAN THE ALLOWED C OFFSET FOR THE CURRENT AMPLITUDE THEN OUTPUT THE C OFFSET PARAMETER FIRST AND AMPLITUDE SECOND. C IF (COFF(2) .LT. PMAX) GOTO 221 C C REARRANGE OUTPUT BUFFER C DO 210 I=3,7 ITEMP=IOBUF(I) IOBUF(I)=IOBUF(5+I) 210 IOBUF(5+I)=ITEMP C C C C C PROCESS OUTPUT SIGNAL CONTROL C 221 IOBUF(1)=2HRF IF(IBUF(1) .EQ. 1) IOBUF(1)=2HHV C IOBUF(2)=2H1 IF(IBUF(1) .EQ. 1 .AND. IOUT .EQ. 0) IOBUF(2)=2H0 IF(IBUF(1) .EQ. 0 .AND. IOUT .EQ. 0) IOBUF(2)=2H2 C C C STORE OFFSET AND FUNCTION BACK INTO CONFIGURATION TABLE C COFF(2)=BOFST C CALL TIM(29,IU,2,IBUF,4,IER) C C C C C C C C 1990 KOUNT=12 ICNT=10 C C C REMOTE ENABLE C 2000 CALL EXEC(100003B,1600B+LUIB) GOTO 9000 2010 CALL ABREG(IA,IB) IF(IB .LT. 0) GOTO 8500 C C 2015 CALL REIO(100002B,LU1,IOBUF(1),KOUNT,IDUMY,0) GOTO 9000 C C 2030 CALL ABREG(IA,IB) IF(IB .LT. 0) GOTO 8500 C C C C C C CLEAR SRQ C C CALL EXEC(100003B,600B+LU1) GOTO 9000 2100 CALL ABREG(IA,IB) IF(IB .LT. 0) GOTO 8500 IERMS=0 RETURN C C C C----------------------------- C C ERROR EXIT C 8000 IERR=1 GOTO 8800 C C 9000 IERR=9 GOTO 8800 8500 IERR=IAND(IREG,377B)+11 8800 IERR(2)=5 IERR(3)=2HSF IERR(4)=2HAM IERR(5)=2HP RETURN END C=================================== C C SUBROUTINE PDEC(ANUM,IND,BNUM), +09580-16311 REV.2001 791023 C C THIS SUBROUTINE POSITIONS THE DECIMAL POINT C SO THAT ONLY A MAXIMUM OF FOUR SIGNIFICANT C DIGITS ARE RETURNED. C DO 555 I=1,IND 555 ANUM=ANUM*10.0 C ANUM=ANUM+.05 C C INUM=INT(ANUM) BNUM=FLOAT(INUM) C C IF(IND .LT. 4) IND=IND+3 MAX=IND-3 C C DO 300 I=1,MAX 300 BNUM=BNUM/10.0 C C RETURN C C C======================================== END END$