diff --git a/hp4155/memristor (Version 4.0)/memristor.py b/hp4155/memristor (Version 4.0)/memristor.py index 094bba7e6bb357ced99c4ae0f80b9bdfa9b0e2ef..8a446950688dbcbc5f91074556fa4afdb90900ee 100644 --- a/hp4155/memristor (Version 4.0)/memristor.py +++ b/hp4155/memristor (Version 4.0)/memristor.py @@ -6,16 +6,6 @@ from keyboard import add_hotkey,remove_hotkey # pulsed libraries from help_pulse import * -#additional variables -first = True #first measurement -""" -This is not anymore the first time you start a measurement but the first time you write a header -""" - -file = None #complete filename with path -#first_sampling = True #indicates first sampling for set and reset buttons because we cannot add two at each button -#we dont need this variable anymore - #create temporary file to store the results localy temp_file= os.path.join(os.getcwd(),'tempfile.txt') @@ -43,15 +33,14 @@ DUT = widgets.Text( style = {'description_width': 'initial'}, ) -#start new measurement button(new sample) -new=widgets.Button(description='next sample') #choose a new folder button new_folder = widgets.Button(description='change folder') -horizontal = widgets.HBox([sample_series,new]) -horizontal3= widgets.HBox([DUT,new_folder]) + +horizontal = widgets.HBox([sample_series,new_folder]) +horizontal3= widgets.HBox([DUT,]) #here contact scehmatic all_text_boxes = widgets.VBox([horizontal,field,horizontal3]) @@ -168,11 +157,6 @@ all = widgets.VBox([line0,line1,line2,line3,line4]) output = widgets.Output() -#help lists for changing state of the buttons -information = [sample_series,field,DUT] -buttons = [set,reset,full,new,new_folder,retention_button,contact_check,qcc,qcc_select] -parameters = [Vset,CC_vset,Vreset,CC_vreset,step,integration_time,number,sampling,Vretention,period,duration,auto_qcc] - #choose folder directory folder=choose_folder() @@ -198,7 +182,7 @@ tab.titles = titles display(tab,output) -all_widgets = [sweep_button,cons_button] +all_widgets = [ sweep_button,cons_button,sample_series,field,DUT,set,reset,full,new,new_folder,retention_button,contact_check,qcc,qcc_select,Vset,CC_vset,Vreset,CC_vreset,step,integration_time,number,sampling,Vretention,period,duration,auto_qcc] add_widgets_to_list(cons_dict,all_widgets) add_widgets_to_list(sweep_dict,all_widgets) @@ -206,22 +190,15 @@ add_widgets_to_list(sweep_dict,all_widgets) """ the above is what happens when the programm starts all the rest have to be written into button trigger functions""" def on_contact_check_clicked(b): - global first,folder,file,temp_file + global folder,temp_file with output: global first,folder,file,temp_file clear_output(wait = True) change_state(all_widgets) - change_state(buttons) - change_state(parameters) - #during first button press - if first == True: - change_state(information)#disable all widgets that are relevant about the information of the sample - filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" - file = os.path.join(folder,filename) - #write header to temp_file - write_header(temp_file,sample_series,field,DUT) - first = False + filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" + file = os.path.join(folder,filename) + R = regular_contact_check() @@ -234,27 +211,16 @@ def on_contact_check_clicked(b): information_box("Contact Check Completed") change_state(all_widgets) - change_state(buttons) - change_state(parameters) def on_qcc_clicked(b): - global first,folder,file,temp_file + global folder,temp_file with output: - global first,folder,file,temp_file clear_output(wait = True) change_state(all_widgets) - change_state(buttons) - change_state(parameters) - - #during first button press - if first == True: - change_state(information)#disable all widgets that are relevant about the information of the sample - filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" - file = os.path.join(folder,filename) - #write header to temp_file - write_header(temp_file,sample_series,field,DUT) - first = False + filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" + file = os.path.join(folder,filename) + if qcc_select.value == 'EBL': R = EBL() @@ -270,17 +236,16 @@ def on_qcc_clicked(b): information_box("Quick Contact Check Completed") change_state(all_widgets) - change_state(buttons) - change_state(parameters) - + def on_set_button_clicked(b): global first,folder,file,temp_file with output: #disable buttons change_state(all_widgets) - change_state(buttons) - change_state(parameters) + + filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" + file = os.path.join(folder,filename) device = setup_memristor() @@ -292,14 +257,6 @@ def on_set_button_clicked(b): #check values valid = check_values(step.value,Vset.value,Vreset.value) - #during first button press - if first == True and valid == True: - change_state(information)#disable all widgets that are relevant about the information of the sample - filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" - file = os.path.join(folder,filename) - #write header to temp_file - write_header(temp_file,sample_series,field,DUT) - first = False if valid == True: if sampling.value == True: #do sampling set before set process(100mV) @@ -335,19 +292,17 @@ def on_set_button_clicked(b): del device - change_state(buttons) - change_state(parameters) change_state(all_widgets) def on_reset_button_clicked(b): - global first,folder,file,temp_file + global folder,temp_file with output: change_state(all_widgets) - change_state(buttons) - change_state(parameters) - device = setup_memristor() + filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" + file = os.path.join(folder,filename) + #lock device device.inst.lock_excl() @@ -356,15 +311,6 @@ def on_reset_button_clicked(b): #check values valid = check_values(step.value,Vset.value,Vreset.value) - #during first button press - if first == True and valid == True: - #disable checkboxes, text fields etc. - change_state(information) - filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" - file = os.path.join(folder,filename) - #write header to temp_file - write_header(temp_file,sample_series,field,DUT) - first = False #set first to false irrelvant if it is in the if statement or not if valid == True: if sampling.value == True: #do sampling set before reset process(10mV) @@ -407,17 +353,16 @@ def on_reset_button_clicked(b): del device - change_state(buttons) - change_state(parameters) change_state(all_widgets) def on_full_button_clicked(b): - global first,folder,file,temp_file + global folder,temp_file with output: - change_state(buttons) - change_state(parameters) change_state(all_widgets) + filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" + file = os.path.join(folder,filename) + device= setup_memristor() # lock device @@ -565,52 +510,23 @@ def on_full_button_clicked(b): del device - change_state(buttons) - change_state(parameters) change_state(all_widgets) -#move to next sample -def on_new_sample_button_clicked(b): - global first - with output: - #the if is to ensure that is not pressed many times - #just in case the user presses anything - change_state(buttons) - change_state(parameters) - change_state(all_widgets) - - first = True - #change_state(information) not anymore creating changing state but enabling the widgets - enable_widgets(information) - #sample_series.value='' - #field.value='' - DUT.value='' - - #enable again - change_state(buttons) - change_state(parameters) - change_state(all_widgets) #new_folder clicked def on_new_folder_button_clicked(b): global folder,file,first with output: - change_state(buttons) #just to be sure - change_state(parameters) change_state(all_widgets) - folder = choose_folder()#choose new folder - #file = create_file(sample_series,field,DUT,folder) #and create the new file (creates multiple headers!!!) - first = True #that will write header if the directory is the same as the previous one! - change_state(buttons) - change_state(parameters) + folder = choose_folder() #choose new folder + change_state(all_widgets) def on_retention_button_clicked(b): global first,folder,file,temp_file with output: - change_state(buttons) - change_state(parameters) + change_state(all_widgets) device = setup_memristor() @@ -619,15 +535,8 @@ def on_retention_button_clicked(b): clear_output() - #during first button press - if first == True: - #disable checkboxes, text fields etc. - change_state(information) - filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" - file = os.path.join(folder,filename) - #write header to temp_file - write_header(temp_file,sample_series,field,DUT) - first = False #set first to false irrelvant if it is in the if statement or not + filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" + file = os.path.join(folder,filename) #execute measurement t,R=retention(Vretention.value,period.value,duration.value,device) @@ -645,18 +554,13 @@ def on_retention_button_clicked(b): del device - change_state(buttons) - change_state(parameters) change_state(all_widgets) def on_sweep_button_clicked(b): with output: - global first clear_output(wait = True) change_state(all_widgets) - change_state(buttons) - change_state(parameters) check_pulse(sweep_dict) sample_dict= { @@ -672,8 +576,6 @@ def on_sweep_button_clicked(b): plot_sweep_pulse(values) save_sweep(folder,sample_dict,values,times,sweep_dict) change_state(all_widgets) - change_state(buttons) - change_state(parameters) def on_constant_button_clicked(b): @@ -681,8 +583,7 @@ def on_constant_button_clicked(b): global first clear_output(wait = True) change_state(all_widgets) - change_state(buttons) - change_state(parameters) + check_pulse(sweep_dict) sample_dict= { @@ -690,16 +591,12 @@ def on_constant_button_clicked(b): 'field':field, 'dut':DUT } - if first == True: - change_state(information) - first = False times,values = constant_meas(cons_dict) plot_constant_pulse(values) save_constant(folder,sample_dict,values,times,cons_dict) change_state(all_widgets) - change_state(buttons) - change_state(parameters) + #link buttons to widgets (pulsed) sweep_button.on_click(on_sweep_button_clicked) @@ -709,7 +606,6 @@ cons_button.on_click(on_constant_button_clicked) set.on_click(on_set_button_clicked) reset.on_click(on_reset_button_clicked) full.on_click(on_full_button_clicked) -new.on_click(on_new_sample_button_clicked) new_folder.on_click(on_new_folder_button_clicked) retention_button.on_click(on_retention_button_clicked) contact_check.on_click(on_contact_check_clicked) diff --git a/hp4155/memristor (Version 4.0)/schematic.png b/hp4155/memristor (Version 4.0)/schematic.png new file mode 100644 index 0000000000000000000000000000000000000000..7a3a144bfd6c17374838b2d9222e57173fe2fcd8 Binary files /dev/null and b/hp4155/memristor (Version 4.0)/schematic.png differ