import datetime
import odict
+import Gnuplot, Gnuplot.funcutils
+import subprocess
+gnuplot = Gnuplot.Gnuplot()
# TODO: Insert variables for calibration purposes here.
calibrate = {
}
# TODO: Adjust aqcuisition parameters here
-aquire = { "DAC_Sweep" : "0.0",# + 25.0*int(step/120)", # DAC Sweep value (t is in STEPS, not seconds!)
+aquire = { "DAC_Sweep" : "0.0 + 10.0*int(step)", # DAC Sweep value (t is in STEPS, not seconds!)
"ADC_Averages" : 200,
#"ADC_Vi" : 5, # ADC channel to read back Vi (set by DAC) through
#"ADC_Is" : 4, # ADC channel to read back Is through
#Setup the serial connection parameters
ser = serial.Serial(
- port="/dev/ttyUSB0", # Modify as needed (note: in linux need to run `sudo chmod a+rw /dev/ttyUSBX' to set permissions)
+ port="/dev/ttyUSB1", # Modify as needed (note: in linux need to run `sudo chmod a+rw /dev/ttyUSBX' to set permissions)
# Do not change the values below here (unless AVR butterfly is reprogrammed to use different values)
baudrate=4800,
xonxoff=0,
rtscts=0
)
-
+#Using an ordered dictionary, so results will be determined (or prompted for) in this order.
+# Put things that are being changed a lot near the top of the list.
parameters = odict.odict([
+ ("Chamber Pressure" , None), # Chamber pressure now automatically determined
+ ("Venault Voltage" , None),
+ ("Title" , None),
+ ("Comment" , None),
("Accelerating Voltage" , None),
("Focus Voltage" , None),
("Deflection Voltage" , None),
- ("Venault Voltage" , None),
("Initial Voltage" , None),
("Heating Current" , None),
- ("Heating Voltage" , None),
- ("Chamber Pressure" , None),
- ("610B Zero" , None),
+ ("Heating Voltage (across filament)" , None),
+ ("Heating Voltage (across power supply)", None),
+ #("610B Zero" , None),
("602 Zero" , None),
- ("610B Scale" , None),
+ #("610B Scale" , None),
("602 Scale" , None),
("602 0.1 Battery" , None),
("602 0.03 Battery" , None),
("ADC Regulator" , None),
("Sample", None),
("Sample Angle", None),
- ("Title" , None),
- ("Comment" , None),
("Data" , None),
("Parameters last checked", None)
])
def getDate():
return str(datetime.datetime.now()).split(" ")[0]
+def getPressure():
+ p = subprocess.Popen("./pressure/get_pressure.sh", stdout=subprocess.PIPE)
+ return float(p.stdout.readline().strip(" \r\n\t"))
+
+
# Used for when I press Control-C to stop things
def set_exit_handler(func):
if os.name == "nt":
# pass
#while (ser.readline().strip("\r\n ") != "#"):
# pass
- time.sleep(1.0)
+ #time.sleep(1.0)
ser.write("a "+str(aquire["ADC_Averages"]) + "\r\n")
- print(ser.readline().strip("\r\n"))
- print(ser.readline().strip("\r\n"))
- print(ser.readline().strip("\r\n"))
+ ser.readline().strip("\r\n")
+ ser.readline().strip("\r\n")
+ ser.readline().strip("\r\n")
+ #print(ser.readline().strip("\r\n"))
+ #print(ser.readline().strip("\r\n"))
+ #print(ser.readline().strip("\r\n"))
#print("Writing config information to config.dat...")
#output = log_open("config.dat", "w", 1)
# Experiment
# TODO: Modify data to record here
sweep = 1
- while True:
+ for i in range(0,5):
+ #while True:
os.system("mkdir -p " + getDate())
- record_data([4, 5], getDate()+"/"+str(getTime())+".dat", None, 4000)
+ record_data([5], getDate()+"/"+str(getTime())+".dat", None, 4000)
sweep += 1
-
+ #setDAC(500)
def checkList():
try:
value = k[1].strip("# \r\n")
if (item in parameters):
- parameters[item] = value
+ if item == "Chamber Pressure":
+ parameters[item] = getPressure()
+ else:
+ parameters[item] = value
- print("Checklist found. Overwrite? [Y/n]")
- response = sys.stdin.readline().strip(" \r\n")
+ #print("Checklist found. Overwrite? [Y/n]")
+ response = "" #sys.stdin.readline().strip(" \r\n")
if (response == "" or response == "y" or response == "Y"):
input_file = log_open(getDate()+"/checklist.old", "w")
for item in parameters:
for item in parameters:
if item == "Parameters last checked":
continue
+ if item == "Chamber Pressure":
+ #sys.stdout.write("\""+str(item)+"\" = " + str(parameters[item]) + " - get new pressure... ")
+ #parameters[item] = getPressure()
+ #sys.stdout.write(str(parameters[item]) + "\n")
+ continue
+
sys.stdout.write("\""+str(item)+"\" = " + str(parameters[item]) + " New value?: ")
response = sys.stdin.readline().strip("\r\n ")
+ if (response == "!"):
+ break
if (response != ""):
parameters[item] = response
sys.stdout.write("\n")
def record_data(ADC_channels, output, pollTime = None, dac_max = None):
if (output != None):
+ gnuplot("set title \""+str(output)+"\"")
output = [log_open(output, "w"), sys.stdout]
+
else:
+ gnuplot("set title \"<No file>\"")
output = [sys.stdout]
for field in aquire:
for out in output:
out.write("# Parameters:\n")
+ parameters["Chamber Pressure"] = getPressure() # Update chamber pressure
+
for field in parameters:
for out in output:
out.write("# "+str(field)+" = " + str(parameters[field]) + "\n")
start_time = time.time()
+ gnuplot("set xlabel \"DAC (counts)\"")
+ gnuplot("set ylabel \"ADC (counts)\"")
+
+
for out in output:
out.write("\n")
out.write("# Experiment " + str(datetime.datetime.now()) + "\n")
out.write("\n")
step = 0
+ data = [] # Keep track of data for dynamic plotting
dacValue = int(eval(aquire["DAC_Sweep"]))
if (setDAC(dacValue) == False):
setDAC(dacValue)
+ time.sleep(2.0)
while (pollTime == None or time.time() < start_time + pollTime):
if (aquire["DAC_Sweep"] != None):
nextDacValue = int(eval(aquire["DAC_Sweep"]))
end_time = time.time()
for out in output:
- out.write(str((measure_start + (end_time - measure_start)/2.0 - start_time)))
+ measure_time = measure_start + (end_time - measure_start)/2.0 - start_time
+ out.write(str(measure_time))
out.write("\t"+str(dacValue))
+ data.append([measure_time, dacValue])
+
for adc in raw_adc:
out.write("\t" + str(adc[1]) + "\t" + str(adc[2]))
+ data[len(data)-1].append(adc[1])
+ data[len(data)-1].append(adc[2])
out.write("\n")
-
+
+ gnuplot.plot(Gnuplot.Data(data, title="t = "+str(measure_time), with_="lp", using="2:3"))
for out in output:
if out != sys.stdout:
log_close(out)