/******************************************************************* *** SEMISYNC.C *** *** This program sets two Model 2001's and a 7001 to the *** *** Semi-Synchronous Mode of Trigger Link. *** *** *** *** *** *** Author: Jonathan L. Tucker *** *** Date: July 15, 1993 *** *** Copyright (c), Keithley Instruments, Inc. 1993 *** *******************************************************************/ #include #include #include #include #include #include #include #include #define k2001A 16 // Define 2001 address #define k2001B 17 // Define 2001 address #define k7001 07 // Define 7001 address #define TPS 18.2 // Define Ticks Per Second void delay(float timedelay); main() { char status; char cmd[255]; _clearscreen(_GWINDOW); initialize(21,0); /* Set Controller to Addr 21 */ setoutputEOS(10,0); /* Set output EOS to 'LF' */ setinputEOS(10); /* Set input EOS to 'LF' */ settimeout(5000); /* Set timeout to 5 sseconds */ /*** Reset 2001,7001, and SMU ***/ send(k2001A,"*RST",&status); /* Send *RST to 2001A */ send(k2001B,"*RST",&status); /* Send *RST to 2001B */ send(k7001,"*RST",&status); /* Send *RST to 7001 */ delay(2.0); /*** Open all relays on 7001 ***/ send(k7001,"Open All",&status); /*** Set up 2001A ***/ send(k2001A,":Sens:Func 'Volt:DC';:Sense:Volt:DC:NPLC 1",&status); send(k2001A,":Form:Elem Read",&status); send(k2001A,":Init:Cont Off;:Abor",&status); strcpy(cmd,":Sens:Volt:DC:Range:Upp 2;:Sens:Volt:DC:Aver:Coun 100\ ;Stat On"); send(k2001A,cmd,&status); /*** Set the 2001A ARM Layer 1 & 2 for immediate triggering, Measure layer for for Trigger-Link, Acceptor, Semi-Synch ***/ strcpy(cmd,":Arm:Lay1:Sour Imm;Coun 1;:Arm:Lay2:Sour Imm;\ :Trig:Seq1:Sour Tlin;Del 0.00;Tcon:Dir Acc;\ Prot SSYN;:Trig:Tcon:SSYN:Line 1"); send(k2001A,cmd,&status); strcpy(cmd,":Trace:Clear;:Trace:Feed Sens;:Trace:EGR Comp;Poin 100\ ;:Form:Data ASCII;:Trace:Feed:Cont Next"); send(k2001A,cmd,&status); /*** Set up 2001B ***/ send(k2001B,":Sens:Func 'Volt:DC';:Sense:Volt:DC:NPLC 1",&status); send(k2001B,":Form:Elem Read",&status); send(k2001B,":Init:Cont Off;:Abor",&status); strcpy(cmd,":Sens:Volt:DC:Range:Upp 2;:Sens:Volt:DC:Aver:Stat Off"); send(k2001B,cmd,&status); /*** Set the 2001B ARM Layer 1 & 2 for immediate triggering, Measure layer for for Trigger-Link, Acceptor, Semi-Synch ***/ strcpy(cmd,":Arm:Lay1:Sour Imm;Coun 1;:Arm:Lay2:Sour Imm;\ :Trig:Seq1:Sour Tlin;Del 0.00;Tcon:Dir Acc;\ Prot SSYN;:Trig:Tcon:SSYN:Line 1"); send(k2001B,cmd,&status); strcpy(cmd,":Trace:Clear;:Trace:Feed Sens;:Trace:EGR Comp;Poin 50\ ;:Form:Data ASCII;:Trace:Feed:Cont Next"); send(k2001B,cmd,&status); /*** Setup the 7001. Set the 7001 ARM Layer 1 & 2 for immediate triggering, Channel layer for for Trigger-Link, Acceptor, Semi-Synch ***/ send(k7001,":Init:Cont Off;:Abor",&status); strcpy(cmd,":Arm:Lay1:Sour Imm;Coun 1;:Arm:Lay2:Sour Imm;\ :Trig:Seq1:Sour Tlin;Del 0.00;Tcon:Dir Sour;\ Prot SSYN;:Trig:Tcon:SSYN:Line 1;\ :Trig:Coun 100"); send(k7001,cmd,&status); /*** Send scan list to 7001. M1 through M10 are preprogrammed switch closures. ***/ send(k7001,"Scan (@M1,M2,M3,M4,M5,M6,M7,M8,M9,M10)",&status); /*** Arm 7001 and 2001 ***/ send(k2001A,"Init:Cont On",&status); send(k2001B,"Init:Cont On",&status); send(k7001,"Init:Cont On",&status); } /************************* ** Delay Function *************************/ void delay(float timedelay) { long bstart, bend; float delaytime; _bios_timeofday(_TIME_GETCLOCK, &bstart); do { _bios_timeofday(_TIME_GETCLOCK, &bend); delaytime = ((float)bend - bstart) / TPS; } while (delaytime <= timedelay); }