FTN4,L SUBROUTINE ADCSU(IUNIT,IFUNC,IVOLT),09580-16009 REV.2026 800219 C C**************************************** C C RELOCATABLE 09580-16009 C SOURCE 09580-18009 C C V.POVIO 10-4-76 C BOB RICHARDS 790927 (REMOVE 'WAIT' CALLS) C BOB RICHARDS 800219 C C********************************************************************* C C HP 92425B TEST SYSTEM SOFTWARE IS THE PROPRIETARY C MATERIAL OF THE HEWLETT-PACKARD COMPANY. USE AND C DISCLOSURE THEREOF ARE RESTRICTED BY WRITTEN AGREEMENT. C C (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. C ALL RIGHTS RESERVED. NO PART OF THIS PROGRAM C MAY BE PHOTOCOPIED, REPRODUCED OR TRANSLATED C TO ANOTHER PROGRAM LANGUAGE WITHOUT THE PRIOR C WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. C C********************************************************************* C C C**************************************** C C GERTSCH ADC-1R-HP/CC1 C --------------------- C C GENERAL: C ------- C C THE TWO FOLLOWING DEVICE SUBROUTINES ARE USED C TO PROGRAM A GERTSCH ADC-1R-HP/CC1 ANGLE-TO- C DIGITAL CONVERTER. C C HARDWARE CONFIGURATION: C ---------------------- C C HP 21MX SERIES COMPUTER C C GERTSCH ADC-1R-HP/CC1 ANGLE-TO-DIGITAL CONVERTER C C HP 09510-60080 CABLE C C 2 HP 12566-60025 MICROCIRCUIT CARDS C BOTH CARDS JUMPERED AS FOLLOWS C C W1-A C W2-C C W3-A C W4-B C W5 THRU W8-NONE C W9-A C C DATA WORD FORMAT: C ---------------- C C DATA TO MICROCIRCUIT CARD #1 C C !15!14 13 12!11 10 9 8! 7 6 5 4! 3 2 1 0! C ------------------------------------------------- C ! ! 10^2 ! 10^1 ! 10^0 ! 10^-1 ! C ------------------------------------------------- C C ALL SECTIOINS OF DATA ARE IN BCD C C C DATA TO MICROCIRCUIT CARD #2 C C !15 14 13 12 11 10 9! 8! 7 6 5 4! 3 2 1 0! C ------------------------------------------------- C ! !OL! 10^-2 ! 10^-3 ! C ------------------------------------------------- C C OL=1 OVERLOAD C C BITS 0-7 ARE BCD C C DATA FROM MICROCIRCUIT CARD #2 C C !15 14 13 12 11 10 9 8 7! 6! 5! 4 3! 2 1 0! C ------------------------------------------------- C ! !H !S ! FC ! VC ! C ------------------------------------------------- C C H=HOLD INPUT COMMAND BIT (MUST BE 1 C TO START NEW CONVERSION, 0 TO STORE C A READING.) C C S=START INPUT COMMAND BIT (MUST BE 0 C TO CLEAR STORAGE, 1 TO START NEW C CONVERSION.) C C FC=FUNCTION CODE C =00 45 DEGREE TEST C =10 SYNCHRO MODE C =11 RESOLVER MODE C C VC=VOLTAGE CODE C =110 8-16V C =101 16-32V C =011 32-64V C =111 64-128V C C CONFIGURATION TABLE: C ------------------- C C THE FOLLOWING IS AN EXAMPLE OF THE C CONFIGURATION TABLE C C R38,1,1 C U 1 C 0 STORAGE FOR SET-UP CALL C C BRANCH AND MNEMONIC TABLE ENTRIES C --------------------------------- C C ADCSU(I,I,I), OV=X, ENT=ADCSU, FIL=%ADCSU C ADCMU(I,I,RV), OV=X, ENT=ADCMU, FIL=%ADCSU C C**************************************** C C NOTE: C C THE WELCOM FILE REQUIRES TWO ENTRIES FOR EACH ADC-1 BECAUSE C TWO I/O SLOTS (I.E. LU'S) ARE REQUIRED TO INTERFACE THE ADC-1. C THEREFORE, THE UNIT 1 'UNIT' ENTRIES WOULD BE 1 AND 2, THE C UNIT 2 ENTRIES WOULD BE 3 AND 4, ETC. BASIC CALLS WOULD BE TO C UNITS 1, 3, ETC. C C********************************************************************* C DIMENSION IERMS(5) DATA IERMS/10,5,2HAD,2HCS,2HU / DATA IDTN/38/ C C FIND STATION # AND LU # C IERMS=10 ISTN=ISN(DUMMY) ILU1=LUDV(ISTN,IDTN,IUNIT) ILU2=LUDV(ISTN,IDTN,IUNIT+1) IF(ILU1 .EQ. 0 .OR. ILU2 .EQ. 0)GOTO 800 C C JUMP TO DEVICE SUBROUTINE C CALL XDCSU(ILU1,ILU2,IERMS,IFUNC,IVOLT) IF(IERMS)800,20,800 20 RETURN C C ERROR EXIT C 800 CALL ERROR(IERMS,IERMS(2)) RETURN END C C**************************************** C SUBROUTINE XDCSU(ILU1,ILU2,IERMS,IFUNC,IVOLT), +09580-16009 REV.2026 800219 DIMENSION IBUF(3),IDATA(2),IREG(2),IERMS(5) EQUIVALENCE (REG,IREG,IA),(IREG(2),IB) C C C**************************************** C C ADCSU(IUNIT,IFUNC,IVOLT) C C WHERE C C IUNIT=UNIT C C 1=FIRST ADC C 3=SECOND ADC C 5=THIRD ADC C ETC. C C IFUNC=FUNCTION C C 1=45 DEG SELF TEST C 2=SYNCHRO C 3=RESOLVER C C IVOLT=REFERANCE VOLTAGE C C 1=8-16V C 2=16-32V C 3=32-64V C 4=64-128V C C**************************************** C C INITILIZE C IU=1 IDTN=38 IERMS=1 C C CHECK PARAMETERS C IF((IFUNC .LT.0) .OR. (IFUNC .GT. 3)) GOTO 8001 IF((IVOLT .LT. 0) .OR. (IVOLT .GT. 4)) GOTO 8001 IERMS=2 C C SET ADC TO 128V REF VOLTAGE C IDATA(1)=7 ICNWD=300B+ILU2 CALL EXEC(100002B,ICNWD,IDATA,1) GOTO 8002 8900 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 ICNWD=13100B+ILU2 IDATA(1)=11 IDATA(2)=3 CALL EXEC(100001B,ICNWD,IDATA(1),1,IDATA(2),1) GOTO 8002 8901 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 C C CHANGE REF VOLTAGE AND FUNCTION C IF(IVOLT .EQ. 1)IVOLT=6B IF(IVOLT .EQ. 2)IVOLT=5B IF(IVOLT .EQ. 4)IVOLT=7B IF(IFUNC .EQ. 1)IFUNC=0 IF(IFUNC .EQ. 2)IFUNC=20B IF(IFUNC .EQ. 3)IFUNC=30B C C MERGE FUNCTION AND VOLTAGE AND STORE IN CONFIG FILE C IBUF(1)=IOR(IVOLT,IFUNC) CALL TIM(IDTN,IU,2,IBUF,1,N) IF(N .LT. 0)GOTO 8001 C C OUTPUT FUNCTION AND VOLTAGE TO ADC C IDATA(1)=IBUF(1) ICNWD=300B+ILU2 CALL EXEC(100002B,ICNWD,IDATA,1) GOTO 8002 8902 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 ICNWD=13100B+ILU2 IDATA(1)=11 IDATA(2)=3 CALL EXEC(100002B,ICNWD,IDATA(1),1,IDATA(2),1) GOTO 8002 8903 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 C C WAIT 30 MSEC C CALL EXEC(12+100000B,0,1,0,-3) GOTO 8002 C C CHECK FOR OVERLOAD STATUS BIT C 8904 ICNWD=300B+ILU2 CALL EXEC(100001B,ICNWD,IDATA,1) GOTO 8002 8905 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 IERMS=5 IF((IAND(IDATA(1),400B)) .NE. 0)GOTO 8001 IERMS=0 RETURN C C ERROR EXIT C 8002 IERMS=9 8001 IERMS(2)=5 IERMS(3)=2HAD IERMS(4)=2HCS IERMS(5)=2HU RETURN END C C****************************************** C SUBROUTINE ADCMU(IUNIT,ITRIG,RMEAS),09580-16009 REV.2026 800219 DIMENSION IERMS(5) DATA IERMS/10,5,2HAD,2HCM,2HU / DATA IDTN/38/ C C FIND STATION # AND LU # C IERMS=10 ISTN=ISN(DUMMY) ILU1=LUDV(ISTN,IDTN,IUNIT) ILU2=LUDV(ISTN,IDTN,IUNIT+1) IF(ILU1 .EQ. 0 .OR. ILU2 .EQ. 0)GOTO 800 C C JUMP TO DEVICE SUBROUTINE C CALL XDCMU(ILU1,ILU2,IERMS,ITRIG,RMEAS) IF(IERMS)800,20,800 20 RETURN C C ERROR RETURN C 800 CALL ERROR(IERMS,IERMS(2)) RETURN END C C**************************************** C SUBROUTINE XDCMU(ILU1,ILU2,IERMS,ITRIG,RMEAS), +09580-16009 REV.2026 800219 DIMENSION IBUF(3),IDATA(2),IREG(2),IERMS(5) EQUIVALENCE (REG,IREG,IA),(IREG(2),IB) C C**************************************** C C ADCMU(IUNIT,ITRIG,RMEAS) C C WHERE C C IUNIT=UNIT C C 1=FIRST ADC C 3=SECOND ADC C 5=THIRD ADC C ETC. C C ITRIG=TRIGGER C C 0=FREE RUN MODE C 1=TRIGGER MODE (FROM COMPUTER) C C RMEAS=VARIABLE WHERE RESULTS ARE TO BE STORED C C NOTE: 1.IF ITRIG=0 THE 'HOLD' SWITCH ON THE C ANGLE-TO-DIGITAL CONVERTER MUST BE C IN THE OUT POSITION. C C 2.IF ITRIG=1 THE 'HOLD' SWITCH ON THE C ANGLE-TO-DIGITAL CONVERTER MUST BE C DEPRESSED IN. C C**************************************** C C INITILIZE C IU=1 IDTN=38 IERMS=1 C C RETRIEVE DATA FROM CONFIGURATION FILE C AND CHECK IF SET-UP HAS BEEN CALLED C IF YES WRITE A 0 BACK ON CONF FILE C CALL TIM(IDTN,IU,1,IBUF,1,N) IF(N .LT. 0)RETURN IF(IBUF(1) .EQ. 0)GOTO 8001 IDATA(1)=IBUF(1) IBUFR=IBUF(1) IBUF(1)=0 CALL TIM(IDTN,IU,2,IBUF,1,N) IF(N .LT. 0) RETURN C C CHECK PARAMETER C IF((ITRIG .LT. 0) .OR. (ITRIG .GT. 1))GOTO 8001 IF(ITRIG .EQ. 0)GOTO 100 IERMS=2 C C OUTPUT TO ADC TRIGGER =1 C ICNWD=300B+ILU2 CALL EXEC(100002B,ICNWD,IDATA,1) GOTO 8002 8900 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 ICNWD=11100B+ILU2 IDATA(1)=11 IDATA(2)=3 CALL EXEC(100002B,ICNWD,IDATA(1),1,IDATA(2),1) GOTO 8002 8901 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 C C WAIT 30 MSEC C CALL EXEC(12+100000B,0,1,0,-3) GOTO 8002 C C OUTPUT TO ADC TRIGGER =0 OR 1 C 100 ICNWD=300B+ILU2 IDATA(1)=IOR(IBUFR,140B) CALL EXEC(100002B,ICNWD,IDATA,1) GOTO 8002 8905 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 ICNWD=11100B+ILU2 IDATA(1)=11 IDATA(2)=3 CALL EXEC(100002B,ICNWD,IDATA(1),1,IDATA(2),1) GOTO 8002 8902 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 IF(ITRIG .EQ. 0)GOTO 200 C C WAIT 30 MSEC C CALL EXEC(12+100000B,0,1,0,-3) GOTO 8002 C C IF TRIGGER =1 CLEAR START BIT C 8909 IDATA(1)=(IAND(IBUFR,77B))+40B ICNWD=300B+ILU2 CALL EXEC(100002B,ICNWD,IDATA,1) GOTO 8002 8903 CALL ABREG(IA,IB) IF(IAND(IREG(1),177B) .NE. 0)GOTO 8001 IDATA(1)=11 IDATA(2)=3 ICNWD=11100B+ILU2 CALL EXEC(100002B,ICNWD,IDATA(1),1,IDATA(2),1) GOTO 8002 C C WAIT 300 MSEC C 8904 CALL EXEC(12+100000B,0,1,0,-30) GOTO 8002 C C ARM DATA CARD C 200 ICNWD=11100B+ILU1 IDATA(1)=11 IDATA(2)=3 CALL EXEC(100002B,ICNWD,IDATA(1),1,IDATA(2),1) GOTO 8002 C C WAIT 300 MSEC C 8906 CALL EXEC(12+100000B,0,1,0,-30) GOTO 8002 C C READ DATA BACK FROM ADC C 8910 ICNWD=300B+ILU1 CALL EXEC(100001B,ICNWD,IDATA(1),1) GOTO 8002 8907 ICNWD=300B+ILU2 CALL EXEC(100001B,ICNWD,IDATA(2),1) GOTO 8002 C C COMPUTE FLOATING POINT NUMBER FROM IDATA C 8908 R1=IAND(IDATA(2),17B)*.001 R2=(IAND(IDATA(2),360B)/2**4)*.01 R3=IAND(IDATA(1),17B)*.1 R4=(IAND(IDATA(1),360B))/2**4 R5=(IAND(IDATA(1),7400B)/2**8)*10.0 R6=(IAND(IDATA(1),30000B)/2**12)*100.00 RMEAS=R1+R2+R3+R4+R5+R6 IERMS=0 RETURN C C ERROR EXIT C 8002 IERMS=9 8001 IERMS(2)=5 IERMS(3)=2HAD IERMS(4)=2HCM IERMS(5)=2HU RETURN END