AD4130 Mbed IIO Firmware

Dependencies:   tempsensors sdp_k1_sdram

Committer:
MPhalke@MPHALKE-L02.ad.analog.com
Date:
Fri Jul 15 17:47:44 2022 +0530
Revision:
2:871d585d96ee
AD4130 firmware - initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 1 import serial
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 2 from time import sleep
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 3 from ad4130 import *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 4 from ad4130_xattr import *
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 5
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 6 # Delays in second
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 7 short_time = 0.2
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 8
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 9 # Calibration type identifiers
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 10 internal_calibration = '1'
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 11 system_calibration = '2'
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 12
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 13 # Analog input mapping as configured in the firmware
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 14 ain_mapping = {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 15 "User Default" : [ 'AIN0-AVSS', 'AIN1-AVSS', 'AIN2-AVSS', 'AIN3-AVSS',
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 16 'AIN4-AVSS', 'AIN5-AVSS', 'AIN6-AVSS', 'AIN7-AVSS',
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 17 'AIN8-AVSS', 'AIN9-AVSS', 'AIN10-AVSS', 'AIN11-AVSS',
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 18 'AIN12-AVSS', 'AIN13-AVSS', 'AIN14-AVSS', 'AIN15-AVSS'
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 19 ],
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 20 "Thermistor" : [ 'AIN4-AIN5' ],
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 21 "Thermocouple" : [ 'AIN2-AIN3', 'AIN4-AIN5' ],
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 22 "2-Wire RTD" : [ 'AIN2-AIN3' ],
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 23 "3-Wire RTD" : [ 'AIN2-AIN3' ],
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 24 "4-Wire RTD" : [ 'AIN2-AIN3' ],
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 25 "Loadcell" : [ 'AIN5-AIN6' ],
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 26 "ECG" : [ 'AIN11-AIN14' ],
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 27 "Noise Test" : [ 'AIN0-AIN1' ],
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 28 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 29
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 30 # IIO Channel name and respective channel index mapping
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 31 chn_mappping = {
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 32 "voltage0" : 0, "voltage1" : 1, "voltage2" : 2, "voltage3" : 3, "voltage4" : 4,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 33 "voltage5" : 5, "voltage6" : 6, "voltage7" : 7, "voltage8" : 8, "voltage9" : 9,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 34 "voltage10" : 10, "voltage11" : 11, "voltage12" : 12, "voltage13" : 13,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 35 "voltage14" : 14, "voltage15" : 15,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 36
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 37 "current0" : 0, "current1" : 1, "current2" : 2, "current3" : 3, "current4" : 4,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 38 "current5" : 5, "current6" : 6, "current7" : 7, "current8" : 8, "current9" : 9,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 39 "current10" : 10, "current11" : 11, "current12" : 12, "current13" : 13,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 40 "current14" : 14, "current15" : 15,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 41
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 42 "temp0" : 0, "temp1" : 1, "temp2" : 2, "temp3" : 3, "temp4" : 4,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 43 "temp5" : 5, "temp6" : 6, "temp7" : 7, "temp8" : 8, "temp9" : 9,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 44 "temp10" : 10, "temp11" : 11, "temp12" : 12, "temp13" : 13,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 45 "temp14" : 14, "temp15" : 15,
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 46 }
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 47
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 48 def init_calibration():
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 49 global device
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 50 global demo_config
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 51
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 52 ######## User configuration ##########
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 53 # Configure the backend for PC to IIOD interface
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 54 uri = "serial:COM12,230400" # For UART, baud rate must be same as set in the FW. COM port is physical Or VCOM.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 55 device_name = "ad4130" # Name of the device must be same as set in the FW.
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 56 ######################################
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 57
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 58 # Create an IIO device context
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 59 device = ad4130_xattr(uri, device_name)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 60 device._ctx.set_timeout(100000)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 61
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 62 # Get current user device config from the firmware
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 63 demo_config = device.demo_config
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 64 print("\r\nDemo Config: {}\r\n".format(demo_config))
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 65
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 66 def get_calibration_status(calibration_type, chn, chn_index):
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 67 global gain_before_calib, gain_after_calib
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 68 global offset_before_calib, offset_after_calib
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 69 global calibration_status
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 70
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 71 if (calibration_type == system_calibration):
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 72 calib_status = chn.system_calibration
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 73 else:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 74 calib_status = chn.internal_calibration
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 75
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 76 gain_before_calib = calib_status[0:8]
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 77 gain_after_calib = calib_status[8:16]
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 78 offset_before_calib = calib_status[16:24]
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 79 offset_after_calib = calib_status[24:32]
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 80 calibration_status = calib_status[32:]
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 81
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 82 def perform_calibration():
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 83
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 84 if (demo_config == "Power Test"):
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 85 # Power test uses internal ADC channels, on which calibration can't be performed
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 86 print("Invalid demo mode config. Calibration can't be performed on internal ADC channels!!")
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 87 return
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 88
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 89 # Select calibration type
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 90 calibration_type = input("\r\nSelect Calibration Type:\r\n\
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 91 {}. Internal Calibration\r\n\
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 92 {}. System Calibration\r\n".format(internal_calibration, system_calibration))
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 93 if (calibration_type > system_calibration):
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 94 print("Invalid Input!!")
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 95 return
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 96
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 97 # Perform calibration for all channels
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 98 for chn in device.channel:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 99 chn_index = chn_mappping[chn.name]
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 100 print("-------------------------------------------")
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 101 print("Calibrating channel {} ".format(chn_index))
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 102
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 103 if (calibration_type == system_calibration):
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 104 # Perform zero-scale (offset) system calibration
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 105 val = input("Apply zero-scale voltage between {} and press enter".format(ain_mapping[demo_config][chn_index]))
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 106 chn.system_calibration = "start_calibration"
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 107 sleep(short_time)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 108 get_calibration_status(calibration_type, chn, chn_index)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 109 print("Offset (before calibration): 0x{}".format(offset_before_calib))
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 110 print("Offset (after calibration): 0x{}".format(offset_after_calib))
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 111 if (calibration_status == "calibration_done"):
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 112 print("System offset calibration successfull..\r\n")
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 113 else:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 114 print("System offset calibration failed!!\r\n")
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 115
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 116 # Perform full-scale (gain) system calibration
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 117 val = input("Apply full-scale voltage between {} and press enter".format(ain_mapping[demo_config][chn_index]))
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 118 chn.system_calibration = "start_calibration"
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 119 sleep(short_time)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 120 get_calibration_status(calibration_type, chn, chn_index)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 121 print("Gain (before calibration): 0x{}".format(gain_before_calib))
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 122 print("Gain (after calibration): 0x{}".format(gain_after_calib))
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 123 if (calibration_status == "calibration_done"):
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 124 print("System gain calibration successfull..\r\n")
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 125 else:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 126 print("System gain calibration failed!!\r\n")
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 127 else:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 128 # Perform full-scale (gain) internal calibration
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 129 chn.internal_calibration = "start_calibration"
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 130 sleep(short_time)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 131 get_calibration_status(calibration_type, chn, chn_index)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 132 print("Gain (before calibration): 0x{}".format(gain_before_calib))
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 133 print("Gain (after calibration): 0x{}".format(gain_after_calib))
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 134 if (calibration_status == "calibration_done"):
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 135 print("Internal gain calibration successfull..\r\n")
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 136 elif (calibration_status == "calibration_skipped"):
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 137 print("Internal gain calibration skipped due to PGA=1\r\n")
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 138 else:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 139 print("Internal gain calibration failed..\r\n")
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 140
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 141 # Perform zero-scale (offset) internal calibration
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 142 chn.internal_calibration = "start_calibration"
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 143 sleep(short_time)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 144 get_calibration_status(calibration_type, chn, chn_index)
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 145 print("Offset (before calibration): 0x{}".format(offset_before_calib))
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 146 print("Offset (after calibration): 0x{}".format(offset_after_calib))
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 147 if (calibration_status == "calibration_done"):
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 148 print("Internal offset calibration successfull..\r\n")
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 149 else:
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 150 print("Internal offset calibration failed!!\r\n")
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 151
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 152 def exit():
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 153 global device
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 154
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 155 # Delete the objects
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 156 del device
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 157
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 158 def main():
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 159 init_calibration()
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 160 perform_calibration()
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 161 exit()
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 162
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 163 if __name__ == "__main__":
MPhalke@MPHALKE-L02.ad.analog.com 2:871d585d96ee 164 main()