fit_gain.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #!/usr/bin/env python
  2. #
  3. #from smbus import SMBus
  4. import time
  5. from struct import*
  6. import ctypes
  7. import array
  8. import numpy as np
  9. import matplotlib.pyplot as plt
  10. from ADUCv2p0 import*
  11. chip1 = ADUCv2p0(0x50,True)
  12. chip1.set_channel(3) #ADC
  13. chip1.set_auto_set_pga(1)
  14. chip1.set_Vout(0,2500) #DAC for offset
  15. chip1.set_pga_state(0x08)
  16. #chip1.set_pga_state(0x18) #G=2
  17. #chip1.set_pga_state(0x28) #G=4
  18. #chip1.set_pga_state(0x38) #G=8
  19. #chip1.set_pga_state(0x48) #G=16
  20. #chip1.set_pga_state(0x58) #G=32
  21. #chip1.set_pga_state(0x68) #G=64
  22. #chip1.set_pga_state(0x78)
  23. chip1.set_Vlearn(3200)
  24. chip1.set_start(20)
  25. chip1.set_stop(100)
  26. chip1.set_start_gnd(125)
  27. chip1.set_stop_gnd(200)
  28. chip1.set_wf_len(200)
  29. chip1.set_enab_gnd(1)
  30. chip1.set_N(1)
  31. chip1.set_Gain(20)
  32. chip1.set_remote_trigg(0)
  33. chip1.set_Vout(2, 4000)
  34. time.sleep(2) #Let auto_set_pga do its job
  35. chip1.set_auto_set_pga(0) #Stop it while we scan
  36. print(chip1.get_auto_set_pga())
  37. print(chip1.get_Vout(0))
  38. print(chip1.get_pga_state())
  39. print('---')
  40. time.sleep(2)
  41. npt = chip1.get_wf_len()
  42. start = chip1.get_start()
  43. stop = chip1.get_stop()
  44. start_gnd = chip1.get_start_gnd()
  45. stop_gnd = chip1.get_stop_gnd()
  46. data = chip1.read_data()
  47. t = np.linspace(0,npt,npt)
  48. measurements = []
  49. for Vfine in range(2000, 4000, 100):
  50. chip1.set_Vout(2, Vfine)
  51. time.sleep(0.1)
  52. data = chip1.read_data()
  53. gnd = sum(data[start_gnd:stop_gnd])/(stop_gnd-start_gnd)
  54. signal = sum(data[start:stop])/(stop-start)
  55. print(chip1.get_Vout(2), signal-gnd)
  56. measurements.append([chip1.get_Vout(2), signal-gnd])
  57. measurements = np.array(measurements)
  58. p = np.polyfit(measurements[:,0], measurements[:,1], deg=1)
  59. print('signal-gnd vs Vfine slope', p[0])
  60. chip1.set_Gain(1/p[0]*.9)
  61. print('Gain has been set to 90%*1/slope', 1/p[0]*.9)