NVM pramSweep problems (want to add stop condition and failed to change current range)

Post Reply
Ellaine
Posts: 3
Joined: January 31st, 2017, 8:58 am
Country: United States

NVM pramSweep problems (want to add stop condition and failed to change current range)

Post by Ellaine » January 31st, 2017, 9:54 am

Hello,

I have two questions about the pramSweep user module in nvm user library.

The first one is:
Normally, this module looks like a measurement iteration (for loop) and I can see the measurement data keeps showing up in the data sheet until it reaches the user-defined data size (default 40). And it will takes some time to finish the whole measurement.
It looks all fine with the default values. But when I change the current range (Irange1 and Irange2) from 1e-2 (default) to other range like 1e-3 (without changing any other parameters), the measurement stopped quickly, and the data sheet shows weird SetI (like e+297) at the first line and the rest are all zeros.
I was wondering if there's something wrong with the code?
Since my interested current range is lower than the default level (~10uA), is there any other way to do so?

The second question is:
I tried to slightly modify the pramSweep module by adding a current-value-defined stopping condition in it instead of waiting the measurement to reach the user-defined data size. For example, I would like to fetch and compare the current value of Vmeas pulse with a user-defined input current target. If the current level is over the target, then the whole iteration (for loop) will be stopped; if not, the for loop will be continued.
I tried to use pulse_fetch() and give a Itarget to compare with, and I used a "break" command to stopped the for loop.
Unfortunately it doesn't work...The measurement result was similar to the one I mentioned in the first question. (though no warnings and no errors during compiling process, and library is built successfully).
I would like to know is it possible to add a user-defined stop condition in pramSweep module, and also what is the exit command for the for loop?

Thank you very much!

Best,
Ellaine

Vince W
Keithley Applications
Keithley Applications
Posts: 108
Joined: September 22nd, 2010, 12:27 pm
Country: United States

Re: NVM pramSweep problems (want to add stop condition and failed to change current range)

Post by Vince W » February 1st, 2017, 10:53 am

Hi Ellaine,

It is possible. Which version of OS and KTEI system software do you have?
(look in KCON at "KI System Configuration"->"KTE Interactive version").
The instructions referenced below work on a 4200-SCS with Windows 7 / KTEI v9.1 SP1 system. They should work on others, but I cannot test that.
If you have a 4200A-SCS, slightly different instructions would apply.

Also, see the post viewtopic.php?f=24&t=128921 for instructions on how to modify and build your own (new) version of a user module in the nvm library. That example is reramSweep, but the same instructions apply to pramSweep. That post is regarding modification of an nvm user module for a different purpose, but the instructions do apply to any nvm user module modification/creation. We recommend creating a new user library separate from the nvm library in order to keep the originally supplied nvm library in tact, and to prevent some potential difficulties in rebuilding it.

Regarding current readings and ranges, This module assumes the use of 4225-RPM remote modules. If you do not have those modules (only a 4225-PMU), the only current range which will work without an error is 1e-2, the minimum range of the 4225-PMU. An error code is placed as the first point in the data and the rest are all zeros.

Vince
Image
A Greater Measure of Confidence

Ellaine
Posts: 3
Joined: January 31st, 2017, 8:58 am
Country: United States

Re: NVM pramSweep problems (want to add stop condition and failed to change current range)

Post by Ellaine » February 2nd, 2017, 10:52 am

Hi Vince,

The KTEI 9.0 was used, which is the one I failed to change the current range (we do have 4225-RPM remote modules).
But then we upgraded it to 9.1, right now it works!!! Thanks a lot!!

I still have some inquiries:
I checked the original codes of pramsweep where PULS_MEAS_WFM_PER mode is used for the measurement. And how dose it determine the returned data like setI and setV (for only one value) since it is waveform measurement? Can I use PULSE_MEAS_SMEAN_PER mode instead (I just want to define the SegMeasStart and SegMeasStop)?

As for stopping the for loop in this module, can I use break command to exit? or is there any other commands to exit the loop?
I checked the user manual, it looks like dev_abort(NULL) is used to abort pulse_exec(). How can I use dev_abort in pramSweep?
Thank you very much!

Best,
Ellaine

Vince W
Keithley Applications
Keithley Applications
Posts: 108
Joined: September 22nd, 2010, 12:27 pm
Country: United States

Re: NVM pramSweep problems (want to add stop condition and failed to change current range)

Post by Vince W » February 2nd, 2017, 9:05 pm

Hi Ellaine,

pramSweep() and other nvm library functions use a strategy based on all of the code in c:\s4200\sys\src\nvm\src, c:\s4200\kiuser\usrlib\nvm.h, and c:\s4200\kiuser\usrlib\nvm\src. Data structures and functions are all defined based on this strategy.

Your question: "how does it determine the returned data like setI and setV (for only one value) since it is a waveform measurement?"
In c:\s4200\sys\src\nvm\src\util.c there are functions getPulseV() and getPulseI() which are called from pramSweep.c. getPulseV() and getPulseI() perform an average over the measured waveform data from segment start to segment stop for each pulse top. This is equivalent to the spot mean method, but over each entire pulse top (Reset, Meas1, Set, Meas2 pulses).

Your question: "Can I use PULSE_MEAS_SMEAN_PER mode instead?"
pramSweep() and the underlying functions were written around the assumption that the measurements are done as described above. You could try PULSE_MEAS_SMEAN_PER, but that would change the way start and stop times of the measurement calculation for all pulses. See the updateCH() function in util.c.

Your question: "...can I use a break command to exit? or is there any other commands to exit the loop?"
I assume you mean the for(i = 0; i < steps; i++) loop. Yes - you can just break and the result data arrays will just be incomplete based on where the loop exited. Each iteration of the sweep is a separate underlying pulse_exec() call - see pulse_test(). The code outputs the VForce, Imeas, and Time arrays at the requested iteration. However, you may skip that if you break before that iteration.
Image
A Greater Measure of Confidence

Ellaine
Posts: 3
Joined: January 31st, 2017, 8:58 am
Country: United States

Re: NVM pramSweep problems (want to add stop condition and failed to change current range)

Post by Ellaine » February 4th, 2017, 2:30 pm

Hello Vince,

Thank you very much for your reply.
I can change the current range now. However, the measurement data (e.g. setI) looks pretty weird. It shows low current ~e-6 even I've pad two probes on the same metal pads (I've verified by SMU DCsweep, and it does show very high current~1e-2). How can I verify the code?

Sorry for my unclear statement.I still got some problem in modifying the code.
I would like to add a user-defined current value (Itarget) to compare the DsetI obtained by the pramSweep during each iteration, and trying to exit the for loop if DsetI >= Itarget.
And I tried the "break" command to exit the for loop, like:

for(i = 0; i < steps; i++)
{
//run pulse_test() code here
.
.
//calculate values
DsetI = getPulseI(ch2, setindex)
.
.
//compare each DsetI whether it reaches the stop condition
if(DsetI >= Itarget)
{
PostDataDouble("setI", DsetI);
//post the data to the sheet
break; //trying to stop the for loop since it has reached the exit condition
}
}

However it doesn't work...the iteration continues....
Can I use "if (DsetI >= Itarget)" as the stop condition?
Also, is the "break" command suitable in this situation?
Could you please give me some example if I want to add an stop condition like this?

Thank you very much!!!

Best,
Ellaine

Vince W
Keithley Applications
Keithley Applications
Posts: 108
Joined: September 22nd, 2010, 12:27 pm
Country: United States

Re: NVM pramSweep problems (want to add stop condition and failed to change current range)

Post by Vince W » February 5th, 2017, 10:50 am

Hi Ellaine,

Did DSetI ever reach/exceed Itarget?
Are they the same data type?
Try setting another condition like some # of iterations (i)

The break; statement should work as long as it is being executed.
This is C language programming.

You can add debugging code to your UTM by adding printf() statements to see whether parts of the code were executed and the value of any variable.
Keithley provides a stdout viewer called "msgcon", or the Keithley Message Console. Open a cmd window, and enter the command msgcon. Any printf() output will be displayed in the msgcon window.

Vince
Image
A Greater Measure of Confidence

Post Reply

Return to “4200-SCS Semiconductor Parameter Analyzer”

Who is online

Users browsing this forum: No registered users and 2 guests