AD4130 Mbed IIO Firmware
Dependencies: tempsensors sdp_k1_sdram
scripts/ad4130_sensor_measurement.py@2:871d585d96ee, 23 months ago (annotated)
- 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?
User | Revision | Line number | New 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 pynput import keyboard |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 4 | from ad4130 import * |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 5 | from ad4130_xattr import * |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 6 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 7 | # Delays in seconds |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 8 | short_time = 0.1 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 9 | long_time = 1 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 10 | loadcell_settling_time = 2 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 11 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 12 | # Global variables |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 13 | weight_input = 0 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 14 | loadcell_offset = [ 0 ] |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 15 | loadcell_gain = [ 0 ] |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 16 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 17 | # Power test channels defined in the firmware |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 18 | POWER_TEST_V_AVDD_CHN = 0 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 19 | POWER_TEST_V_IOVDD_CHN = 1 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 20 | POWER_TEST_I_AVDD_CHN = 2 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 21 | POWER_TEST_I_IOVDD_CHN = 3 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 22 | POWER_TEST_V_AVSS_DGND_CHN = 4 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 23 | POWER_TEST_V_REF_CHN = 5 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 24 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 25 | # IIO Channel name and respective channel index mapping |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 26 | chn_mappping = { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 27 | "voltage0" : 0, "voltage1" : 1, "voltage2" : 2, "voltage3" : 3, "voltage4" : 4, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 28 | "voltage5" : 5, "voltage6" : 6, "voltage7" : 7, "voltage8" : 8, "voltage9" : 9, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 29 | "voltage10" : 10, "voltage11" : 11, "voltage12" : 12, "voltage13" : 13, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 30 | "voltage14" : 14, "voltage15" : 15, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 31 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 32 | "current0" : 0, "current1" : 1, "current2" : 2, "current3" : 3, "current4" : 4, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 33 | "current5" : 5, "current6" : 6, "current7" : 7, "current8" : 8, "current9" : 9, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 34 | "current10" : 10, "current11" : 11, "current12" : 12, "current13" : 13, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 35 | "current14" : 14, "current15" : 15, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 36 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 37 | "temp0" : 0, "temp1" : 1, "temp2" : 2, "temp3" : 3, "temp4" : 4, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 38 | "temp5" : 5, "temp6" : 6, "temp7" : 7, "temp8" : 8, "temp9" : 9, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 39 | "temp10" : 10, "temp11" : 11, "temp12" : 12, "temp13" : 13, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 40 | "temp14" : 14, "temp15" : 15, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 41 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 42 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 43 | def key_press_event(key): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 44 | global key_pressed |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 45 | key_pressed = True |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 46 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 47 | def init_sensor_measurement(): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 48 | global device |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 49 | global demo_config |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 50 | global listener |
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 | listener = keyboard.Listener(on_press=key_press_event) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 67 | listener.start() |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 68 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 69 | def perform_loadcell_calibration(chn): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 70 | global loadcell_offset |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 71 | global loadcell_gain |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 72 | global weight_input |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 73 | global device |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 74 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 75 | chn_indx = chn_mappping[chn.name] |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 76 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 77 | print("\r\nCalibrating Loadcell for channel {}".format(chn_indx)) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 78 | input("Please ensure no weight is applied on Loadcell and press enter to continue calibration ") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 79 | print("Waiting to settle-down the Loadcell..") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 80 | sleep(loadcell_settling_time) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 81 | print("Performing Loadcell offset calibration..") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 82 | chn.loadcell_offset_calibration = 'start_calibration' |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 83 | print("Loadcell offset calibration complete") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 84 | loadcell_offset[chn_indx] = chn.loadcell_offset_calibration |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 85 | print("Loadcell offset: {}".format(loadcell_offset[chn_indx])) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 86 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 87 | weight_input_done = False |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 88 | while weight_input_done is False: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 89 | try: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 90 | weight_input = int(input("\r\nApply the weight on loadcell and enter here (in grams): ")) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 91 | if (weight_input <= 0): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 92 | print("Please ensure weight is > 0!!") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 93 | else: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 94 | weight_input_done = True |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 95 | except: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 96 | print("Invalid input") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 97 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 98 | print("Waiting to settle-down the Loadcell..") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 99 | sleep(loadcell_settling_time) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 100 | print("Performing load cell gain calibration..") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 101 | chn.loadcell_gain_calibration = 'start_calibration' |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 102 | print("Load cell gain calibration complete") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 103 | loadcell_gain[chn_indx] = chn.loadcell_gain_calibration |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 104 | print("Loadcell gain: {}".format(loadcell_gain[chn_indx])) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 105 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 106 | def perform_sensor_measurement(): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 107 | global device |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 108 | global key_pressed |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 109 | global loadcell_offset |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 110 | global loadcell_gain |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 111 | global weight_input |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 112 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 113 | # Loadcell must be calibrated before performing measurement |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 114 | if (demo_config == 'Loadcell'): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 115 | for chn in device.channel: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 116 | perform_loadcell_calibration(chn) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 117 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 118 | weight = 0 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 119 | print("\r\n*** Press any key to stop the measurement ***\r\n") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 120 | sleep(long_time) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 121 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 122 | # Print the header |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 123 | header = "" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 124 | for chn in device.channel: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 125 | header = header + chn.name + ' ' |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 126 | print(header) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 127 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 128 | key_pressed = False |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 129 | while not key_pressed: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 130 | result_str = "" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 131 | for chn in device.channel: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 132 | sleep(short_time) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 133 | if (demo_config == 'Loadcell'): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 134 | adc_raw = chn.raw |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 135 | try: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 136 | chn_indx = chn_mappping[chn.name] |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 137 | weight = ((adc_raw - loadcell_offset[chn_indx]) * weight_input) / (loadcell_gain[chn_indx] - loadcell_offset[chn_indx]) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 138 | result_str = result_str + str(round(weight,4)) + ' gram ' |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 139 | except: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 140 | print("\r\nInvalid measurement result. Please check device settings!!") |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 141 | break |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 142 | elif (demo_config == 'ECG' or demo_config == 'Noise Test' or demo_config == 'Power Test' or demo_config == 'User Default'): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 143 | adc_raw = chn.raw |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 144 | scale = chn.scale |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 145 | offset = chn.offset |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 146 | if (demo_config == 'Power Test'): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 147 | chn_indx = chn_mappping[chn.name] |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 148 | if (chn_indx == POWER_TEST_I_AVDD_CHN or chn_indx == POWER_TEST_I_IOVDD_CHN): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 149 | current = ((adc_raw + offset) * scale) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 150 | result_str = result_str + str(round(current,4)) + 'mA ' |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 151 | else: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 152 | voltage = ((adc_raw + offset) * scale) / 1000 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 153 | result_str = result_str + str(round(voltage,4)) + 'V ' |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 154 | else: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 155 | voltage = ((adc_raw + offset) * scale) / 1000 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 156 | result_str = result_str + str(round(voltage,4)) + 'V ' |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 157 | else: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 158 | # Temperature sensors demo configs (RTD, Thermocouple and Thermistor) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 159 | adc_raw = chn.raw |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 160 | scale = chn.scale |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 161 | temperature = (adc_raw * scale) / 1000 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 162 | result_str = result_str + str(round(temperature,4)) + 'C ' |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 163 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 164 | print(result_str) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 165 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 166 | def exit(): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 167 | global listener |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 168 | global device |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 169 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 170 | # Delete the objects |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 171 | del listener |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 172 | del device |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 173 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 174 | def main(): |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 175 | init_sensor_measurement() |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 176 | perform_sensor_measurement() |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 177 | exit() |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 178 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 179 | if __name__ == "__main__": |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 180 | main() |