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 
                                                                                                                                                                                                                                      