/* Pseudo-Code Keithley 590 CV */ /* Bill Tompkins 10-5-2015 */ /* Use code at your own risk */ /* Initial CV Meter Setup */ Write(AddLineFeed("T4,1X")); //Trigger, Sweep on Front Panel (program pushes button via software) Write(AddLineFeed("K0X")); //EOI and Hold-Off Enabled Write(AddLineFeed("Y3X")); //Terminator = LF Write(AddLineFeed("N0X")); //Bias Off Write(AddLineFeed("M4X")); //SQR on Sweep Done Write(AddLineFeed("J1X")); //Self Test for(;;){ Write(AddLineFeed("U1X")); //Read ERROR String Read(RemoveLineFeed(ReadString(5000))) If(SerialPoll() And SRQ_BIT5) //SQR Error Trap exitfor; } Write(AddLineFeed("Q0X")); //Drift Correction Normal Mode Write(AddLineFeed("O0,0,1.9E-12X")) //Series Model, Cap Res Volt Output, Capactiance Constant Write(AddLineFeed("P0X")); //Filter Off Write(AddLineFeed("Z0X")); //Zero Off Write(AddLineFeed("F1X")); //Test Freq 1MHz Write(AddLineFeed("R3X")); //200pF/200uS Fixed Range Write(AddLineFeed("S2X")); //Reading Rate 18/sec, 4.5 digits Write(AddLineFeed("W1,0.1,1,0.1X")); //Waveform - Single Staircase, Start Dwell Time, Stop Bleed Time, Step Delay Write(AddLineFeed("V -3, 3, 0.25 ,0X")); //DC Sweep Write(AddLineFeed("N0X")); //Bias Off for(;;){ Write(AddLineFeed("U1X")); //Read ERROR String Read(RemoveLineFeed(ReadString(5000))) If(SerialPoll() And SRQ_BIT5) //SQR Error Trap exitfor; } /* CV Measurement Setup */ Write(AddLineFeed(InsertLF("G4X")); //No Prefix, No Suffix, Number of Data Points Write(AddLineFeed("W1,0.1,1,0.1X")); //Waveform - Single Staircase, Start Dwell Time, Stop Bleed Time, Step Delay Write(AddLineFeed("V -3, 3, 0.25 ,0X")); //DC Sweep for(;;){ Write(AddLineFeed("U1X")); //Read ERROR String Read(RemoveLineFeed(ReadString(5000))) If(SerialPoll() And SRQ_BIT5) //SQR Error Trap exitfor; } /* Actual CV Measurement */ Write(AddLineFeed("N1X")); //Bias On Write(AddLineFeed("H23X")); //Push Front Panel Button - 'MANUAL' for(;;){ TimeDelay(0.1); //delay in Sec if (SerialPoll() And SRQ_BIT2) //SQR Sweep Done exitfor; } for(;;){ Write(AddLineFeed("U1X")); //Read ERROR String Read(RemoveLineFeed(ReadString(5000))) If(SerialPoll() And SRQ_BIT5) //SQR Error Trap exitfor; } Write(AddLineFeed("B3X")); //Transfer Current Data to Buffer 'B' Write(AddLineFeed("N0X")); //Bias Off Write(AddLineFeed("B2, 1, 300X")); //Read Buffer 'B' - 3 times the size for Capacitance, Resistance, and Voltage Data Read(RemoveLineFeed(ReadString(5000)));