Mahesh Phalke / Mbed OS ad7124_mbed_temperature-measure-example

Dependencies:   platform_drivers AD7124_no_OS adi_console_menu tempsensors_prv

Committer:
mahphalke
Date:
Fri Feb 19 16:26:06 2021 +0530
Revision:
0:08ba94bc5a30
Child:
5:90166c496b01
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mahphalke 0:08ba94bc5a30 1 /***************************************************************************//**
mahphalke 0:08ba94bc5a30 2 * @file ad7124_console_app.c
mahphalke 0:08ba94bc5a30 3 * @brief AD7124 temperature measurement firmware console interface
mahphalke 0:08ba94bc5a30 4 * @details This file is specific to ad7124 console menu application handle.
mahphalke 0:08ba94bc5a30 5 * The functions defined in this file performs the action
mahphalke 0:08ba94bc5a30 6 * based on user selected console menu.
mahphalke 0:08ba94bc5a30 7 ********************************************************************************
mahphalke 0:08ba94bc5a30 8 * Copyright (c) 2021 Analog Devices, Inc.
mahphalke 0:08ba94bc5a30 9 * All rights reserved.
mahphalke 0:08ba94bc5a30 10 *
mahphalke 0:08ba94bc5a30 11 * This software is proprietary to Analog Devices, Inc. and its licensors.
mahphalke 0:08ba94bc5a30 12 * By using this software you agree to the terms of the associated
mahphalke 0:08ba94bc5a30 13 * Analog Devices Software License Agreement.
mahphalke 0:08ba94bc5a30 14 *******************************************************************************/
mahphalke 0:08ba94bc5a30 15
mahphalke 0:08ba94bc5a30 16 /******************************************************************************/
mahphalke 0:08ba94bc5a30 17 /***************************** Include Files **********************************/
mahphalke 0:08ba94bc5a30 18 /******************************************************************************/
mahphalke 0:08ba94bc5a30 19
mahphalke 0:08ba94bc5a30 20 #include <stdio.h>
mahphalke 0:08ba94bc5a30 21 #include <string.h>
mahphalke 0:08ba94bc5a30 22 #include <stdbool.h>
mahphalke 0:08ba94bc5a30 23 #include <math.h>
mahphalke 0:08ba94bc5a30 24
mahphalke 0:08ba94bc5a30 25 #include "app_config.h"
mahphalke 0:08ba94bc5a30 26
mahphalke 0:08ba94bc5a30 27 #include "platform_support.h"
mahphalke 0:08ba94bc5a30 28 #include "platform_drivers.h"
mahphalke 0:08ba94bc5a30 29
mahphalke 0:08ba94bc5a30 30 #include "ad7124.h"
mahphalke 0:08ba94bc5a30 31 #include "ad7124_regs.h"
mahphalke 0:08ba94bc5a30 32 #include "ad7124_support.h"
mahphalke 0:08ba94bc5a30 33 #include "ad7124_regs_configs.h"
mahphalke 0:08ba94bc5a30 34
mahphalke 0:08ba94bc5a30 35 #include "ad7124_console_app.h"
mahphalke 0:08ba94bc5a30 36 #include "ad7124_user_config.h"
mahphalke 0:08ba94bc5a30 37 #include "ad7124_temperature_sensor.h"
mahphalke 0:08ba94bc5a30 38
mahphalke 0:08ba94bc5a30 39 /******************************************************************************/
mahphalke 0:08ba94bc5a30 40 /********************* Macros and Constants Definitions ***********************/
mahphalke 0:08ba94bc5a30 41 /******************************************************************************/
mahphalke 0:08ba94bc5a30 42
mahphalke 0:08ba94bc5a30 43 /* Maximum number of ADC samples for the conversion */
mahphalke 0:08ba94bc5a30 44 #define MAX_ADC_SAMPLES 100
mahphalke 0:08ba94bc5a30 45
mahphalke 0:08ba94bc5a30 46 /* The max number of sensors connected to any AD7124 device */
mahphalke 0:08ba94bc5a30 47 #define MAX_RTD_SENSORS 5
mahphalke 0:08ba94bc5a30 48 #define MAX_THERMOCOUPLE_SENSORS 6
mahphalke 0:08ba94bc5a30 49 #define MAX_NTC_THERMISTOR_SENSORS 8
mahphalke 0:08ba94bc5a30 50
mahphalke 0:08ba94bc5a30 51 /* AD7124 max input count */
mahphalke 0:08ba94bc5a30 52 #if defined(AD7124_8)
mahphalke 0:08ba94bc5a30 53 #define AD7124_MAX_INPUTS 16
mahphalke 0:08ba94bc5a30 54 #else
mahphalke 0:08ba94bc5a30 55 #define AD7124_MAX_INPUTS 8
mahphalke 0:08ba94bc5a30 56 #endif
mahphalke 0:08ba94bc5a30 57
mahphalke 0:08ba94bc5a30 58 /* Default offset value for AD7124 */
mahphalke 0:08ba94bc5a30 59 #define AD7124_DEFAULT_OFFSET 0x800000
mahphalke 0:08ba94bc5a30 60
mahphalke 0:08ba94bc5a30 61 /* Max configurations (setups) used in the firmware (required for ADC calibration) */
mahphalke 0:08ba94bc5a30 62 #define AD7124_MAX_CONFIGS_USED 3 // TC + CJC1 + CJC2
mahphalke 0:08ba94bc5a30 63
mahphalke 0:08ba94bc5a30 64 /* @brief ADC Conversion wait timeout period.
mahphalke 0:08ba94bc5a30 65 * @Note This value depends upon the core clock frequency.
mahphalke 0:08ba94bc5a30 66 * Below value is derived based on the code testing for SDP-K1 controller
mahphalke 0:08ba94bc5a30 67 * at default frequency and it ensures timeout period is more than 1 sec.
mahphalke 0:08ba94bc5a30 68 **/
mahphalke 0:08ba94bc5a30 69 #define CONVERSION_TIMEOUT 10000
mahphalke 0:08ba94bc5a30 70
mahphalke 0:08ba94bc5a30 71 /******************************************************************************/
mahphalke 0:08ba94bc5a30 72 /******************** Variables and User Defined Data Types *******************/
mahphalke 0:08ba94bc5a30 73 /******************************************************************************/
mahphalke 0:08ba94bc5a30 74
mahphalke 0:08ba94bc5a30 75 /*
mahphalke 0:08ba94bc5a30 76 * This is the 'live' AD7124 register map that is used by the driver
mahphalke 0:08ba94bc5a30 77 * the other 'default' configs are used to populate this at init time
mahphalke 0:08ba94bc5a30 78 */
mahphalke 0:08ba94bc5a30 79 static struct ad7124_st_reg ad7124_register_map[AD7124_REG_NO];
mahphalke 0:08ba94bc5a30 80
mahphalke 0:08ba94bc5a30 81 /* Pointer to the struct representing the AD7124 device */
mahphalke 0:08ba94bc5a30 82 static struct ad7124_dev *p_ad7124_dev = NULL;
mahphalke 0:08ba94bc5a30 83
mahphalke 0:08ba94bc5a30 84 /* Possible sensor configurations (mapped with enum sensor_config_ids) */
mahphalke 0:08ba94bc5a30 85 static const char *sensor_configs[NUMBER_OF_SENSOR_CONFIGS] = {
mahphalke 0:08ba94bc5a30 86 "2-Wire RTD",
mahphalke 0:08ba94bc5a30 87 "3-Wire RTD",
mahphalke 0:08ba94bc5a30 88 "4-Wire RTD",
mahphalke 0:08ba94bc5a30 89 "Thermocouple",
mahphalke 0:08ba94bc5a30 90 "Thermistor",
mahphalke 0:08ba94bc5a30 91 "ADC Calibration"
mahphalke 0:08ba94bc5a30 92 };
mahphalke 0:08ba94bc5a30 93
mahphalke 0:08ba94bc5a30 94 /* Maximum number of sensors connected to different AD7124 devices */
mahphalke 0:08ba94bc5a30 95 static uint8_t max_supported_sensors[NUMBER_OF_SENSOR_CONFIGS] = {
mahphalke 0:08ba94bc5a30 96 #if defined (AD7124_8)
mahphalke 0:08ba94bc5a30 97 5, // 2-wire RTDs
mahphalke 0:08ba94bc5a30 98 4, // 3-wire RTDs
mahphalke 0:08ba94bc5a30 99 5, // 4-wire RTDs
mahphalke 0:08ba94bc5a30 100 6, // Thermocouples
mahphalke 0:08ba94bc5a30 101 8 // Thermistors
mahphalke 0:08ba94bc5a30 102 #else
mahphalke 0:08ba94bc5a30 103 2, // 2-wire RTDs
mahphalke 0:08ba94bc5a30 104 2, // 3-wire RTDs
mahphalke 0:08ba94bc5a30 105 2, // 4-wire RTDs
mahphalke 0:08ba94bc5a30 106 2, // Thermocouples
mahphalke 0:08ba94bc5a30 107 4 // Thermistors
mahphalke 0:08ba94bc5a30 108 #endif
mahphalke 0:08ba94bc5a30 109 };
mahphalke 0:08ba94bc5a30 110
mahphalke 0:08ba94bc5a30 111 /* ADC channels assigned to sensors for the measurement (each channel per sensor) */
mahphalke 0:08ba94bc5a30 112 enum sensor_channels {
mahphalke 0:08ba94bc5a30 113 SENSOR_CHANNEL0,
mahphalke 0:08ba94bc5a30 114 SENSOR_CHANNEL1,
mahphalke 0:08ba94bc5a30 115 SENSOR_CHANNEL2,
mahphalke 0:08ba94bc5a30 116 SENSOR_CHANNEL3,
mahphalke 0:08ba94bc5a30 117 SENSOR_CHANNEL4,
mahphalke 0:08ba94bc5a30 118 SENSOR_CHANNEL5,
mahphalke 0:08ba94bc5a30 119 SENSOR_CHANNEL6,
mahphalke 0:08ba94bc5a30 120 SENSOR_CHANNEL7,
mahphalke 0:08ba94bc5a30 121 NUM_OF_SENSOR_CHANNELS
mahphalke 0:08ba94bc5a30 122 };
mahphalke 0:08ba94bc5a30 123
mahphalke 0:08ba94bc5a30 124 /* Curent sensor configuration (pointer to sensor_configs string array) */
mahphalke 0:08ba94bc5a30 125 static const char *current_sensor_config;
mahphalke 0:08ba94bc5a30 126
mahphalke 0:08ba94bc5a30 127 /* Status info (true/false) */
mahphalke 0:08ba94bc5a30 128 static const char status_info[] = {
mahphalke 0:08ba94bc5a30 129 'N',
mahphalke 0:08ba94bc5a30 130 'Y'
mahphalke 0:08ba94bc5a30 131 };
mahphalke 0:08ba94bc5a30 132
mahphalke 0:08ba94bc5a30 133 /* Sensor measurement progress strings */
mahphalke 0:08ba94bc5a30 134 static const char *temp_measurement_status[NUM_OF_SENSOR_CHANNELS] = {
mahphalke 0:08ba94bc5a30 135 ". ",
mahphalke 0:08ba94bc5a30 136 ".. ",
mahphalke 0:08ba94bc5a30 137 "... ",
mahphalke 0:08ba94bc5a30 138 ".... ",
mahphalke 0:08ba94bc5a30 139 "..... ",
mahphalke 0:08ba94bc5a30 140 "...... ",
mahphalke 0:08ba94bc5a30 141 "....... ",
mahphalke 0:08ba94bc5a30 142 "........"
mahphalke 0:08ba94bc5a30 143 };
mahphalke 0:08ba94bc5a30 144
mahphalke 0:08ba94bc5a30 145 /* Sensor enable status */
mahphalke 0:08ba94bc5a30 146 static bool sensor_enable_status[NUM_OF_SENSOR_CHANNELS] = {
mahphalke 0:08ba94bc5a30 147 true, false, false, false, false, false, false, false
mahphalke 0:08ba94bc5a30 148 };
mahphalke 0:08ba94bc5a30 149
mahphalke 0:08ba94bc5a30 150 /* CJC sensor names (for thermocouple measurement) */
mahphalke 0:08ba94bc5a30 151 static const char *cjc_sensor_names[NUM_OF_CJC_SENSORS] = {
mahphalke 0:08ba94bc5a30 152 "PT100 4-Wire RTD",
mahphalke 0:08ba94bc5a30 153 "Thermistor PTC KY81/110",
mahphalke 0:08ba94bc5a30 154 "PT1000 4-Wire RTD",
mahphalke 0:08ba94bc5a30 155 };
mahphalke 0:08ba94bc5a30 156
mahphalke 0:08ba94bc5a30 157 /* Current selected CJC sensor */
mahphalke 0:08ba94bc5a30 158 static cjc_sensor_type current_cjc_sensor = PT100_4WIRE_RTD;
mahphalke 0:08ba94bc5a30 159
mahphalke 0:08ba94bc5a30 160 /* Below channels are configured through 'ad7124_regs_config_thermocouple' structure*/
mahphalke 0:08ba94bc5a30 161 #define CJC_RTD_CHN SENSOR_CHANNEL6
mahphalke 0:08ba94bc5a30 162 #define CJC_THERMISTOR_CHN SENSOR_CHANNEL7
mahphalke 0:08ba94bc5a30 163
mahphalke 0:08ba94bc5a30 164 /* ADC calibration type */
mahphalke 0:08ba94bc5a30 165 enum adc_calibration_type {
mahphalke 0:08ba94bc5a30 166 INTERNAL_CALIBRATION,
mahphalke 0:08ba94bc5a30 167 SYSTEM_CALIBRATION
mahphalke 0:08ba94bc5a30 168 };
mahphalke 0:08ba94bc5a30 169
mahphalke 0:08ba94bc5a30 170 /* 3-wire RTD calibration types */
mahphalke 0:08ba94bc5a30 171 enum rtd_3wire_calibration_type {
mahphalke 0:08ba94bc5a30 172 MEASURING_EXCITATION_CURRENT,
mahphalke 0:08ba94bc5a30 173 CHOPPING_EXCITATION_CURRENT
mahphalke 0:08ba94bc5a30 174 };
mahphalke 0:08ba94bc5a30 175
mahphalke 0:08ba94bc5a30 176 /* Current RTD 3-wire calibration type */
mahphalke 0:08ba94bc5a30 177 enum rtd_3wire_calibration_type rtd_3wire_calibration_type =
mahphalke 0:08ba94bc5a30 178 MEASURING_EXCITATION_CURRENT;
mahphalke 0:08ba94bc5a30 179
mahphalke 0:08ba94bc5a30 180 /* Below channel is configured through 'ad7124_regs_config_3wire_rtd' structure*/
mahphalke 0:08ba94bc5a30 181 #define RTD_3WIRE_REF_MEASUREMENT_CHN SENSOR_CHANNEL4
mahphalke 0:08ba94bc5a30 182
mahphalke 0:08ba94bc5a30 183 /* Forward declaration of console menus */
mahphalke 0:08ba94bc5a30 184 console_menu rtd_2wire_menu;
mahphalke 0:08ba94bc5a30 185 console_menu rtd_3wire_menu;
mahphalke 0:08ba94bc5a30 186 console_menu rtd_3wire_calibration_menu;
mahphalke 0:08ba94bc5a30 187 console_menu rtd_4wire_menu;
mahphalke 0:08ba94bc5a30 188 console_menu ntc_thermistor_menu;
mahphalke 0:08ba94bc5a30 189 console_menu thermocouple_menu;
mahphalke 0:08ba94bc5a30 190 console_menu adc_calibration_menu;
mahphalke 0:08ba94bc5a30 191
mahphalke 0:08ba94bc5a30 192 /******************************************************************************/
mahphalke 0:08ba94bc5a30 193 /************************** Functions Declarations ****************************/
mahphalke 0:08ba94bc5a30 194 /******************************************************************************/
mahphalke 0:08ba94bc5a30 195
mahphalke 0:08ba94bc5a30 196 /******************************************************************************/
mahphalke 0:08ba94bc5a30 197 /************************** Functions Definitions *****************************/
mahphalke 0:08ba94bc5a30 198 /******************************************************************************/
mahphalke 0:08ba94bc5a30 199
mahphalke 0:08ba94bc5a30 200 /*!
mahphalke 0:08ba94bc5a30 201 * @brief Initialize the AD7124 device and user configuration.
mahphalke 0:08ba94bc5a30 202 * @param config_id[in]- Register configuration to be load into device
mahphalke 0:08ba94bc5a30 203 * @return Return 0 in case of SUCCESS, else return negative error code
mahphalke 0:08ba94bc5a30 204 * @details This resets and then writes the default register map value to
mahphalke 0:08ba94bc5a30 205 * the device. A call to init the SPI port is made, but may not
mahphalke 0:08ba94bc5a30 206 * actually do very much, depending on the platform.
mahphalke 0:08ba94bc5a30 207 */
mahphalke 0:08ba94bc5a30 208 int32_t ad7124_app_initialize(uint8_t config_id)
mahphalke 0:08ba94bc5a30 209 {
mahphalke 0:08ba94bc5a30 210 /*
mahphalke 0:08ba94bc5a30 211 * Copy one of the default/user configs to the live register memory map
mahphalke 0:08ba94bc5a30 212 * Requirement, not checked here, is that all the configs are the same size
mahphalke 0:08ba94bc5a30 213 */
mahphalke 0:08ba94bc5a30 214 switch (config_id) {
mahphalke 0:08ba94bc5a30 215 case AD7124_CONFIG_2WIRE_RTD:
mahphalke 0:08ba94bc5a30 216 memcpy(ad7124_register_map, ad7124_regs_config_2wire_rtd,
mahphalke 0:08ba94bc5a30 217 sizeof(ad7124_register_map));
mahphalke 0:08ba94bc5a30 218 break;
mahphalke 0:08ba94bc5a30 219
mahphalke 0:08ba94bc5a30 220 case AD7124_CONFIG_3WIRE_RTD:
mahphalke 0:08ba94bc5a30 221 memcpy(ad7124_register_map, ad7124_regs_config_3wire_rtd,
mahphalke 0:08ba94bc5a30 222 sizeof(ad7124_register_map));
mahphalke 0:08ba94bc5a30 223 break;
mahphalke 0:08ba94bc5a30 224
mahphalke 0:08ba94bc5a30 225 case AD7124_CONFIG_4WIRE_RTD:
mahphalke 0:08ba94bc5a30 226 memcpy(ad7124_register_map, ad7124_regs_config_4wire_rtd,
mahphalke 0:08ba94bc5a30 227 sizeof(ad7124_register_map));
mahphalke 0:08ba94bc5a30 228 break;
mahphalke 0:08ba94bc5a30 229
mahphalke 0:08ba94bc5a30 230 case AD7124_CONFIG_THERMISTOR:
mahphalke 0:08ba94bc5a30 231 memcpy(ad7124_register_map, ad7124_regs_config_thermistor,
mahphalke 0:08ba94bc5a30 232 sizeof(ad7124_register_map));
mahphalke 0:08ba94bc5a30 233 break;
mahphalke 0:08ba94bc5a30 234
mahphalke 0:08ba94bc5a30 235 case AD7124_CONFIG_THERMOCOUPLE:
mahphalke 0:08ba94bc5a30 236 memcpy(ad7124_register_map, ad7124_regs_config_thermocouple,
mahphalke 0:08ba94bc5a30 237 sizeof(ad7124_register_map));
mahphalke 0:08ba94bc5a30 238 break;
mahphalke 0:08ba94bc5a30 239
mahphalke 0:08ba94bc5a30 240 default:
mahphalke 0:08ba94bc5a30 241 /* Not a defined configID */
mahphalke 0:08ba94bc5a30 242 return(FAILURE);
mahphalke 0:08ba94bc5a30 243 }
mahphalke 0:08ba94bc5a30 244
mahphalke 0:08ba94bc5a30 245 /* Get the current sensor configuration */
mahphalke 0:08ba94bc5a30 246 current_sensor_config = sensor_configs[config_id];
mahphalke 0:08ba94bc5a30 247
mahphalke 0:08ba94bc5a30 248 ad7124_init_params.regs = ad7124_register_map;
mahphalke 0:08ba94bc5a30 249
mahphalke 0:08ba94bc5a30 250 return (ad7124_setup(&p_ad7124_dev, ad7124_init_params));
mahphalke 0:08ba94bc5a30 251 }
mahphalke 0:08ba94bc5a30 252
mahphalke 0:08ba94bc5a30 253
mahphalke 0:08ba94bc5a30 254 /*!
mahphalke 0:08ba94bc5a30 255 * @brief Initialize the part with a specific configuration
mahphalke 0:08ba94bc5a30 256 * @param config_id[in] - Configuration ID
mahphalke 0:08ba94bc5a30 257 * @return Configuration status
mahphalke 0:08ba94bc5a30 258 */
mahphalke 0:08ba94bc5a30 259 static int32_t init_with_configuration(uint8_t config_id)
mahphalke 0:08ba94bc5a30 260 {
mahphalke 0:08ba94bc5a30 261 /* Free the device resources */
mahphalke 0:08ba94bc5a30 262 (void)ad7124_remove(p_ad7124_dev);
mahphalke 0:08ba94bc5a30 263
mahphalke 0:08ba94bc5a30 264 return ad7124_app_initialize(config_id);
mahphalke 0:08ba94bc5a30 265 }
mahphalke 0:08ba94bc5a30 266
mahphalke 0:08ba94bc5a30 267
mahphalke 0:08ba94bc5a30 268 /*!
mahphalke 0:08ba94bc5a30 269 * @brief Enable the multiple sensors for measurement
mahphalke 0:08ba94bc5a30 270 * @param chn_number[in]- Channel number assigned for the sensor
mahphalke 0:08ba94bc5a30 271 * @return MENU_CONTINUE
mahphalke 0:08ba94bc5a30 272 * @note Each sensor has been assigned with unique channel number
mahphalke 0:08ba94bc5a30 273 */
mahphalke 0:08ba94bc5a30 274 int32_t enable_disable_sensor(uint32_t chn_number)
mahphalke 0:08ba94bc5a30 275 {
mahphalke 0:08ba94bc5a30 276 sensor_enable_status[chn_number] = !sensor_enable_status[chn_number];
mahphalke 0:08ba94bc5a30 277 return MENU_CONTINUE;
mahphalke 0:08ba94bc5a30 278 }
mahphalke 0:08ba94bc5a30 279
mahphalke 0:08ba94bc5a30 280
mahphalke 0:08ba94bc5a30 281 /*!
mahphalke 0:08ba94bc5a30 282 * @brief Select the CJC sensor for thermocouple measurement
mahphalke 0:08ba94bc5a30 283 * @param cjc_sensor[in]- CJC sensor to be selected
mahphalke 0:08ba94bc5a30 284 * @return MENU_CONTINUE
mahphalke 0:08ba94bc5a30 285 * @return Only one CJC sensor is active at a time, therefore fixed
mahphalke 0:08ba94bc5a30 286 * channel value is selected for it during measurement
mahphalke 0:08ba94bc5a30 287 */
mahphalke 0:08ba94bc5a30 288 int32_t select_cjc_sensor(uint32_t cjc_sensor)
mahphalke 0:08ba94bc5a30 289 {
mahphalke 0:08ba94bc5a30 290 current_cjc_sensor = cjc_sensor;
mahphalke 0:08ba94bc5a30 291
mahphalke 0:08ba94bc5a30 292 /* Change status of all CJC sensor channels to false at start */
mahphalke 0:08ba94bc5a30 293 sensor_enable_status[CJC_RTD_CHN] = false;
mahphalke 0:08ba94bc5a30 294 sensor_enable_status[CJC_THERMISTOR_CHN] = false;
mahphalke 0:08ba94bc5a30 295
mahphalke 0:08ba94bc5a30 296 switch (current_cjc_sensor) {
mahphalke 0:08ba94bc5a30 297 case PT100_4WIRE_RTD:
mahphalke 0:08ba94bc5a30 298 case PT1000_4WIRE_RTD:
mahphalke 0:08ba94bc5a30 299 sensor_enable_status[CJC_RTD_CHN] = true;
mahphalke 0:08ba94bc5a30 300 break;
mahphalke 0:08ba94bc5a30 301
mahphalke 0:08ba94bc5a30 302 case THERMISTOR_PTC_KY81_110:
mahphalke 0:08ba94bc5a30 303 sensor_enable_status[CJC_THERMISTOR_CHN] = true;
mahphalke 0:08ba94bc5a30 304 break;
mahphalke 0:08ba94bc5a30 305
mahphalke 0:08ba94bc5a30 306 default:
mahphalke 0:08ba94bc5a30 307 return FAILURE;
mahphalke 0:08ba94bc5a30 308 }
mahphalke 0:08ba94bc5a30 309
mahphalke 0:08ba94bc5a30 310 return MENU_CONTINUE;
mahphalke 0:08ba94bc5a30 311 }
mahphalke 0:08ba94bc5a30 312
mahphalke 0:08ba94bc5a30 313
mahphalke 0:08ba94bc5a30 314 /*!
mahphalke 0:08ba94bc5a30 315 * @brief Perform the ADC data conversion for input channel
mahphalke 0:08ba94bc5a30 316 * @param chn[in]- Channel to be sampled
mahphalke 0:08ba94bc5a30 317 * @param data[in]- Variable to store converted result
mahphalke 0:08ba94bc5a30 318 * @return Return 0 in case of SUCCESS, else return negative error code
mahphalke 0:08ba94bc5a30 319 * @note This function gets the averged adc raw value for MAX_ADC_SAMPLES
mahphalke 0:08ba94bc5a30 320 * samples
mahphalke 0:08ba94bc5a30 321 */
mahphalke 0:08ba94bc5a30 322 static int32_t perform_adc_conversion(uint8_t chn, int32_t *data)
mahphalke 0:08ba94bc5a30 323 {
mahphalke 0:08ba94bc5a30 324 int32_t sample_data;
mahphalke 0:08ba94bc5a30 325 int64_t avg_sample_data = 0;
mahphalke 0:08ba94bc5a30 326
mahphalke 0:08ba94bc5a30 327 /* Enable the current channel */
mahphalke 0:08ba94bc5a30 328 ad7124_register_map[AD7124_Channel_0 + chn].value |=
mahphalke 0:08ba94bc5a30 329 AD7124_CH_MAP_REG_CH_ENABLE;
mahphalke 0:08ba94bc5a30 330 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 331 ad7124_register_map[AD7124_Channel_0 + chn]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 332 return FAILURE;
mahphalke 0:08ba94bc5a30 333 }
mahphalke 0:08ba94bc5a30 334
mahphalke 0:08ba94bc5a30 335 /* Enter into continuous conversion mode */
mahphalke 0:08ba94bc5a30 336 ad7124_register_map[AD7124_ADC_Control].value &= (~AD7124_ADC_CTRL_REG_MSK);
mahphalke 0:08ba94bc5a30 337 ad7124_register_map[AD7124_ADC_Control].value |= AD7124_ADC_CTRL_REG_MODE(
mahphalke 0:08ba94bc5a30 338 CONTINUOUS_CONV_MODE);
mahphalke 0:08ba94bc5a30 339 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 340 ad7124_register_map[AD7124_ADC_Control]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 341 return FAILURE;
mahphalke 0:08ba94bc5a30 342 }
mahphalke 0:08ba94bc5a30 343
mahphalke 0:08ba94bc5a30 344 /* Read adc samples */
mahphalke 0:08ba94bc5a30 345 for (uint16_t sample = 0; sample < MAX_ADC_SAMPLES; sample++) {
mahphalke 0:08ba94bc5a30 346 /*
mahphalke 0:08ba94bc5a30 347 * this polls the status register READY/ bit to determine when conversion is done
mahphalke 0:08ba94bc5a30 348 * this also ensures the STATUS register value is up to date and contains the
mahphalke 0:08ba94bc5a30 349 * channel that was sampled as well. No need to read STATUS separately
mahphalke 0:08ba94bc5a30 350 */
mahphalke 0:08ba94bc5a30 351 if (ad7124_wait_for_conv_ready(p_ad7124_dev, CONVERSION_TIMEOUT) != SUCCESS) {
mahphalke 0:08ba94bc5a30 352 return FAILURE;
mahphalke 0:08ba94bc5a30 353 }
mahphalke 0:08ba94bc5a30 354
mahphalke 0:08ba94bc5a30 355 if (ad7124_read_data(p_ad7124_dev, &sample_data) != SUCCESS) {
mahphalke 0:08ba94bc5a30 356 return FAILURE;
mahphalke 0:08ba94bc5a30 357 }
mahphalke 0:08ba94bc5a30 358
mahphalke 0:08ba94bc5a30 359 avg_sample_data += sample_data;
mahphalke 0:08ba94bc5a30 360 }
mahphalke 0:08ba94bc5a30 361
mahphalke 0:08ba94bc5a30 362 /* Disable current channel */
mahphalke 0:08ba94bc5a30 363 ad7124_register_map[AD7124_Channel_0 + chn].value &=
mahphalke 0:08ba94bc5a30 364 ~AD7124_CH_MAP_REG_CH_ENABLE;
mahphalke 0:08ba94bc5a30 365 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 366 ad7124_register_map[AD7124_Channel_0 + chn]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 367 return FAILURE;
mahphalke 0:08ba94bc5a30 368 }
mahphalke 0:08ba94bc5a30 369
mahphalke 0:08ba94bc5a30 370 /* Put ADC into Standby mode */
mahphalke 0:08ba94bc5a30 371 ad7124_register_map[AD7124_ADC_Control].value &= (~AD7124_ADC_CTRL_REG_MSK);
mahphalke 0:08ba94bc5a30 372 ad7124_register_map[AD7124_ADC_Control].value |= AD7124_ADC_CTRL_REG_MODE(
mahphalke 0:08ba94bc5a30 373 STANDBY_MODE);
mahphalke 0:08ba94bc5a30 374 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 375 ad7124_register_map[AD7124_ADC_Control]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 376 return FAILURE;
mahphalke 0:08ba94bc5a30 377 }
mahphalke 0:08ba94bc5a30 378
mahphalke 0:08ba94bc5a30 379 /* Calculate the averaged adc raw value */
mahphalke 0:08ba94bc5a30 380 *data = (avg_sample_data / MAX_ADC_SAMPLES);
mahphalke 0:08ba94bc5a30 381
mahphalke 0:08ba94bc5a30 382 return SUCCESS;
mahphalke 0:08ba94bc5a30 383 }
mahphalke 0:08ba94bc5a30 384
mahphalke 0:08ba94bc5a30 385
mahphalke 0:08ba94bc5a30 386 /*!
mahphalke 0:08ba94bc5a30 387 * @brief Perform the ADC sampling for selected RTD sensor channel
mahphalke 0:08ba94bc5a30 388 * @param rtd_config_id[in]- RTD type (2/3/4-wire)
mahphalke 0:08ba94bc5a30 389 * @param chn[in] - ADC channel assigned to given RTD sensor
mahphalke 0:08ba94bc5a30 390 * @param adc_raw[out] - ADC raw result
mahphalke 0:08ba94bc5a30 391 * @return RTC sensor ADC sampling data
mahphalke 0:08ba94bc5a30 392 */
mahphalke 0:08ba94bc5a30 393 static bool do_rtc_sensor_adc_sampling(uint32_t rtd_config_id, uint8_t chn,
mahphalke 0:08ba94bc5a30 394 int32_t *adc_raw)
mahphalke 0:08ba94bc5a30 395 {
mahphalke 0:08ba94bc5a30 396 bool adc_sampling_status = true;
mahphalke 0:08ba94bc5a30 397
mahphalke 0:08ba94bc5a30 398 const uint8_t rtd_iout0_source[][MAX_RTD_SENSORS] = {
mahphalke 0:08ba94bc5a30 399 {
mahphalke 0:08ba94bc5a30 400 RTD1_2WIRE_IOUT0, RTD2_2WIRE_IOUT0, RTD3_2WIRE_IOUT0, RTD4_2WIRE_IOUT0,
mahphalke 0:08ba94bc5a30 401 RTD5_2WIRE_IOUT0
mahphalke 0:08ba94bc5a30 402 },
mahphalke 0:08ba94bc5a30 403 {
mahphalke 0:08ba94bc5a30 404 RTD1_3WIRE_IOUT0, RTD2_3WIRE_IOUT0, RTD3_3WIRE_IOUT0, RTD4_3WIRE_IOUT0
mahphalke 0:08ba94bc5a30 405 },
mahphalke 0:08ba94bc5a30 406 {
mahphalke 0:08ba94bc5a30 407 RTD1_4WIRE_IOUT0, RTD2_4WIRE_IOUT0, RTD3_4WIRE_IOUT0, RTD4_4WIRE_IOUT0,
mahphalke 0:08ba94bc5a30 408 RTD5_4WIRE_IOUT0
mahphalke 0:08ba94bc5a30 409 }
mahphalke 0:08ba94bc5a30 410 };
mahphalke 0:08ba94bc5a30 411
mahphalke 0:08ba94bc5a30 412 const uint8_t rtd_3wire_iout1_source[] = {
mahphalke 0:08ba94bc5a30 413 RTD1_3WIRE_IOUT1, RTD2_3WIRE_IOUT1, RTD3_3WIRE_IOUT1, RTD4_3WIRE_IOUT1,
mahphalke 0:08ba94bc5a30 414 };
mahphalke 0:08ba94bc5a30 415
mahphalke 0:08ba94bc5a30 416 do {
mahphalke 0:08ba94bc5a30 417 /* Enable and direct IOUT0 excitation current source for current RTD sensor measurement */
mahphalke 0:08ba94bc5a30 418 ad7124_register_map[AD7124_IOCon1].value |= (AD7124_IO_CTRL1_REG_IOUT_CH0(
mahphalke 0:08ba94bc5a30 419 rtd_iout0_source[rtd_config_id][chn]) | AD7124_IO_CTRL1_REG_IOUT0(
mahphalke 0:08ba94bc5a30 420 RTD_IOUT0_500UA_EXC));
mahphalke 0:08ba94bc5a30 421
mahphalke 0:08ba94bc5a30 422 if (rtd_config_id == AD7124_CONFIG_3WIRE_RTD) {
mahphalke 0:08ba94bc5a30 423 /* Enable and direct IOUT1 excitation current source for current RTD sensor measurement */
mahphalke 0:08ba94bc5a30 424 ad7124_register_map[AD7124_IOCon1].value |= (AD7124_IO_CTRL1_REG_IOUT_CH1(
mahphalke 0:08ba94bc5a30 425 rtd_3wire_iout1_source[chn]) | AD7124_IO_CTRL1_REG_IOUT1(
mahphalke 0:08ba94bc5a30 426 RTD_IOUT1_500UA_EXC));
mahphalke 0:08ba94bc5a30 427 }
mahphalke 0:08ba94bc5a30 428
mahphalke 0:08ba94bc5a30 429 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 430 ad7124_register_map[AD7124_IOCon1]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 431 adc_sampling_status = false;
mahphalke 0:08ba94bc5a30 432 break;
mahphalke 0:08ba94bc5a30 433 }
mahphalke 0:08ba94bc5a30 434
mahphalke 0:08ba94bc5a30 435 /* Read adc averaged sample result */
mahphalke 0:08ba94bc5a30 436 if (perform_adc_conversion(chn, adc_raw) != SUCCESS) {
mahphalke 0:08ba94bc5a30 437 adc_sampling_status = false;
mahphalke 0:08ba94bc5a30 438 break;
mahphalke 0:08ba94bc5a30 439 }
mahphalke 0:08ba94bc5a30 440
mahphalke 0:08ba94bc5a30 441 /* Turn off the excitation currents */
mahphalke 0:08ba94bc5a30 442 ad7124_register_map[AD7124_IOCon1].value &= ((~AD7124_IO_CTRL1_REG_IOUT0_MSK)
mahphalke 0:08ba94bc5a30 443 & (~AD7124_IO_CTRL1_REG_IOUT_CH0_MSK));
mahphalke 0:08ba94bc5a30 444
mahphalke 0:08ba94bc5a30 445 if (rtd_config_id == AD7124_CONFIG_3WIRE_RTD) {
mahphalke 0:08ba94bc5a30 446 ad7124_register_map[AD7124_IOCon1].value &= ((~AD7124_IO_CTRL1_REG_IOUT1_MSK)
mahphalke 0:08ba94bc5a30 447 & (~AD7124_IO_CTRL1_REG_IOUT_CH1_MSK));
mahphalke 0:08ba94bc5a30 448 }
mahphalke 0:08ba94bc5a30 449
mahphalke 0:08ba94bc5a30 450 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 451 ad7124_register_map[AD7124_IOCon1]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 452 adc_sampling_status = false;
mahphalke 0:08ba94bc5a30 453 break;
mahphalke 0:08ba94bc5a30 454 }
mahphalke 0:08ba94bc5a30 455 } while (0);
mahphalke 0:08ba94bc5a30 456
mahphalke 0:08ba94bc5a30 457 return adc_sampling_status;
mahphalke 0:08ba94bc5a30 458 }
mahphalke 0:08ba94bc5a30 459
mahphalke 0:08ba94bc5a30 460
mahphalke 0:08ba94bc5a30 461 /*!
mahphalke 0:08ba94bc5a30 462 * @brief Perform the multiple RTD sensors measurement
mahphalke 0:08ba94bc5a30 463 * @param rtd_config_id[in]- RTD type (2/3/4-wire)
mahphalke 0:08ba94bc5a30 464 * @return MENU_CONTINUE
mahphalke 0:08ba94bc5a30 465 */
mahphalke 0:08ba94bc5a30 466 static int32_t perform_rtd_measurement(uint32_t rtd_config_id)
mahphalke 0:08ba94bc5a30 467 {
mahphalke 0:08ba94bc5a30 468 int32_t sample_data[MAX_RTD_SENSORS];
mahphalke 0:08ba94bc5a30 469 bool adc_error = false;
mahphalke 0:08ba94bc5a30 470 float temperature;
mahphalke 0:08ba94bc5a30 471
mahphalke 0:08ba94bc5a30 472 printf(EOL EOL EOL);
mahphalke 0:08ba94bc5a30 473
mahphalke 0:08ba94bc5a30 474 /* Sample and Read all enabled RTD channels in sequence */
mahphalke 0:08ba94bc5a30 475 for (uint8_t chn = SENSOR_CHANNEL0; chn < max_supported_sensors[rtd_config_id];
mahphalke 0:08ba94bc5a30 476 chn++) {
mahphalke 0:08ba94bc5a30 477 if (sensor_enable_status[chn]) {
mahphalke 0:08ba94bc5a30 478 if (!do_rtc_sensor_adc_sampling(rtd_config_id, chn, &sample_data[chn])) {
mahphalke 0:08ba94bc5a30 479 adc_error = true;
mahphalke 0:08ba94bc5a30 480 break;
mahphalke 0:08ba94bc5a30 481 }
mahphalke 0:08ba94bc5a30 482
mahphalke 0:08ba94bc5a30 483 printf(VT100_MOVE_UP_1_LINE
mahphalke 0:08ba94bc5a30 484 "RTD temperature measurement in progress%s" EOL,
mahphalke 0:08ba94bc5a30 485 temp_measurement_status[chn]);
mahphalke 0:08ba94bc5a30 486 }
mahphalke 0:08ba94bc5a30 487 }
mahphalke 0:08ba94bc5a30 488
mahphalke 0:08ba94bc5a30 489 if (adc_error) {
mahphalke 0:08ba94bc5a30 490 printf(EOL EOL "\tError Performing Measurement" EOL);
mahphalke 0:08ba94bc5a30 491 } else {
mahphalke 0:08ba94bc5a30 492 /* Print the temperature measurement results */
mahphalke 0:08ba94bc5a30 493 printf(EOL EOL "\tRTD Sensor Temperature (C)" EOL);
mahphalke 0:08ba94bc5a30 494 printf("\t-----------------------------" EOL);
mahphalke 0:08ba94bc5a30 495
mahphalke 0:08ba94bc5a30 496 for (uint8_t chn = SENSOR_CHANNEL0; chn < max_supported_sensors[rtd_config_id];
mahphalke 0:08ba94bc5a30 497 chn++) {
mahphalke 0:08ba94bc5a30 498 if (sensor_enable_status[chn]) {
mahphalke 0:08ba94bc5a30 499 /* Calculate temperature from the RTD resistence */
mahphalke 0:08ba94bc5a30 500 temperature = get_rtd_temperature(sample_data[chn]);
mahphalke 0:08ba94bc5a30 501
mahphalke 0:08ba94bc5a30 502 printf("\t RTD%d %.4f" EOL, chn + 1, temperature);
mahphalke 0:08ba94bc5a30 503 }
mahphalke 0:08ba94bc5a30 504 }
mahphalke 0:08ba94bc5a30 505 }
mahphalke 0:08ba94bc5a30 506
mahphalke 0:08ba94bc5a30 507 /* Put ADC into standby mode */
mahphalke 0:08ba94bc5a30 508 ad7124_register_map[AD7124_ADC_Control].value &= (~AD7124_ADC_CTRL_REG_MSK);
mahphalke 0:08ba94bc5a30 509 ad7124_register_map[AD7124_ADC_Control].value |= AD7124_ADC_CTRL_REG_MODE(
mahphalke 0:08ba94bc5a30 510 STANDBY_MODE);
mahphalke 0:08ba94bc5a30 511 ad7124_write_register(p_ad7124_dev, ad7124_register_map[AD7124_ADC_Control]);
mahphalke 0:08ba94bc5a30 512
mahphalke 0:08ba94bc5a30 513 adi_press_any_key_to_continue();
mahphalke 0:08ba94bc5a30 514 return MENU_CONTINUE;
mahphalke 0:08ba94bc5a30 515 }
mahphalke 0:08ba94bc5a30 516
mahphalke 0:08ba94bc5a30 517
mahphalke 0:08ba94bc5a30 518 /*!
mahphalke 0:08ba94bc5a30 519 * @brief Change the 3-wire RTD calibration type to user selected type
mahphalke 0:08ba94bc5a30 520 * @param calibration_type[in]- 3-wire RTD calibration type
mahphalke 0:08ba94bc5a30 521 * @return MENU_CONTINUE
mahphalke 0:08ba94bc5a30 522 */
mahphalke 0:08ba94bc5a30 523 static int32_t change_3wire_rtd_calibration_type(uint32_t calibration_type)
mahphalke 0:08ba94bc5a30 524 {
mahphalke 0:08ba94bc5a30 525 rtd_3wire_calibration_type = calibration_type;
mahphalke 0:08ba94bc5a30 526 return MENU_CONTINUE;
mahphalke 0:08ba94bc5a30 527 }
mahphalke 0:08ba94bc5a30 528
mahphalke 0:08ba94bc5a30 529
mahphalke 0:08ba94bc5a30 530 /*!
mahphalke 0:08ba94bc5a30 531 * @brief Perform the 3-wire RTD calibration and measurement
mahphalke 0:08ba94bc5a30 532 * @param menu_id[in]- Optional menu ID
mahphalke 0:08ba94bc5a30 533 * @return MENU_CONTINUE
mahphalke 0:08ba94bc5a30 534 */
mahphalke 0:08ba94bc5a30 535 static int32_t calibrate_and_measure_3wire_rtd(uint32_t menu_id)
mahphalke 0:08ba94bc5a30 536 {
mahphalke 0:08ba94bc5a30 537 int32_t sample_data[MAX_RTD_SENSORS];
mahphalke 0:08ba94bc5a30 538 bool adc_error = false;
mahphalke 0:08ba94bc5a30 539 float temperature;
mahphalke 0:08ba94bc5a30 540 float voltage;
mahphalke 0:08ba94bc5a30 541 int32_t adc_raw[2]; // Iout0 + Iout1
mahphalke 0:08ba94bc5a30 542 volatile static float iout[2]; // Iout0 + Iout1
mahphalke 0:08ba94bc5a30 543
mahphalke 0:08ba94bc5a30 544 const uint8_t rtd_3wire_iout0_source[] = {
mahphalke 0:08ba94bc5a30 545 RTD1_3WIRE_IOUT0, RTD2_3WIRE_IOUT0, RTD3_3WIRE_IOUT0, RTD4_3WIRE_IOUT0
mahphalke 0:08ba94bc5a30 546 };
mahphalke 0:08ba94bc5a30 547
mahphalke 0:08ba94bc5a30 548 const uint8_t rtd_3wire_iout1_source[] = {
mahphalke 0:08ba94bc5a30 549 RTD1_3WIRE_IOUT1, RTD2_3WIRE_IOUT1, RTD3_3WIRE_IOUT1, RTD4_3WIRE_IOUT1
mahphalke 0:08ba94bc5a30 550 };
mahphalke 0:08ba94bc5a30 551
mahphalke 0:08ba94bc5a30 552 /* Print the temperature measurement results */
mahphalke 0:08ba94bc5a30 553 printf(EOL EOL "\tRTD Sensor Temperature (C)" EOL);
mahphalke 0:08ba94bc5a30 554 printf("\t-----------------------------" EOL);
mahphalke 0:08ba94bc5a30 555
mahphalke 0:08ba94bc5a30 556 /* Calibrate, Sample and Read all enabled RTD channels in sequence */
mahphalke 0:08ba94bc5a30 557 for (uint8_t chn = SENSOR_CHANNEL0;
mahphalke 0:08ba94bc5a30 558 (chn < max_supported_sensors[AD7124_CONFIG_3WIRE_RTD]) && (!adc_error);
mahphalke 0:08ba94bc5a30 559 chn++) {
mahphalke 0:08ba94bc5a30 560 if (sensor_enable_status[chn]) {
mahphalke 0:08ba94bc5a30 561 /* Change PGA to 32 due to selection of 250uA Iout current for calibration
mahphalke 0:08ba94bc5a30 562 * Note: For 'Measuring Iout' type calibration, this gain is just used
mahphalke 0:08ba94bc5a30 563 * for calibration purpose. For actual measurement, the gain is changed
mahphalke 0:08ba94bc5a30 564 * back to default one used for RTD measurement */
mahphalke 0:08ba94bc5a30 565 ad7124_register_map[AD7124_Config_0].value &= (~AD7124_CFG_REG_PGA_MSK);
mahphalke 0:08ba94bc5a30 566 ad7124_register_map[AD7124_Config_0].value |= AD7124_CFG_REG_PGA(
mahphalke 0:08ba94bc5a30 567 RTD_3WIRE_IOUT_CHOPPING_CALIB_TYPE_GAIN);
mahphalke 0:08ba94bc5a30 568
mahphalke 0:08ba94bc5a30 569 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 570 ad7124_register_map[AD7124_Config_0]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 571 adc_error = true;
mahphalke 0:08ba94bc5a30 572 }
mahphalke 0:08ba94bc5a30 573
mahphalke 0:08ba94bc5a30 574 if (rtd_3wire_calibration_type == MEASURING_EXCITATION_CURRENT) {
mahphalke 0:08ba94bc5a30 575 /* Part 1: Perform the calibration on current RTD sensor */
mahphalke 0:08ba94bc5a30 576
mahphalke 0:08ba94bc5a30 577 /* Enable and direct IOUT0 excitation current source */
mahphalke 0:08ba94bc5a30 578 ad7124_register_map[AD7124_IOCon1].value |= (AD7124_IO_CTRL1_REG_IOUT_CH0(
mahphalke 0:08ba94bc5a30 579 rtd_3wire_iout0_source[chn]) | AD7124_IO_CTRL1_REG_IOUT0(
mahphalke 0:08ba94bc5a30 580 RTD_IOUT0_250UA_EXC));
mahphalke 0:08ba94bc5a30 581
mahphalke 0:08ba94bc5a30 582 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 583 ad7124_register_map[AD7124_IOCon1]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 584 adc_error = true;
mahphalke 0:08ba94bc5a30 585 break;
mahphalke 0:08ba94bc5a30 586 }
mahphalke 0:08ba94bc5a30 587
mahphalke 0:08ba94bc5a30 588 /* Read adc averaged sample result for Iout0 excitation */
mahphalke 0:08ba94bc5a30 589 if (perform_adc_conversion(RTD_3WIRE_REF_MEASUREMENT_CHN,
mahphalke 0:08ba94bc5a30 590 &sample_data[RTD_3WIRE_REF_MEASUREMENT_CHN]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 591 adc_error = true;
mahphalke 0:08ba94bc5a30 592 break;
mahphalke 0:08ba94bc5a30 593 }
mahphalke 0:08ba94bc5a30 594
mahphalke 0:08ba94bc5a30 595 /* Get the equivalent ADC voltage */
mahphalke 0:08ba94bc5a30 596 voltage = ad7124_convert_sample_to_voltage(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 597 RTD_3WIRE_REF_MEASUREMENT_CHN,
mahphalke 0:08ba94bc5a30 598 sample_data[RTD_3WIRE_REF_MEASUREMENT_CHN]);
mahphalke 0:08ba94bc5a30 599
mahphalke 0:08ba94bc5a30 600 /* Calculate equivalent Iout0 current flowing through Rref resistance */
mahphalke 0:08ba94bc5a30 601 iout[0] = voltage / RTD_RREF;
mahphalke 0:08ba94bc5a30 602
mahphalke 0:08ba94bc5a30 603 /* Turn off the Iout0 excitation current */
mahphalke 0:08ba94bc5a30 604 ad7124_register_map[AD7124_IOCon1].value &= ((~AD7124_IO_CTRL1_REG_IOUT0_MSK)
mahphalke 0:08ba94bc5a30 605 & (~AD7124_IO_CTRL1_REG_IOUT_CH0_MSK));
mahphalke 0:08ba94bc5a30 606
mahphalke 0:08ba94bc5a30 607 /* Enable and direct IOUT1 excitation current source */
mahphalke 0:08ba94bc5a30 608 ad7124_register_map[AD7124_IOCon1].value |= (AD7124_IO_CTRL1_REG_IOUT_CH1(
mahphalke 0:08ba94bc5a30 609 rtd_3wire_iout1_source[chn]) | AD7124_IO_CTRL1_REG_IOUT1(
mahphalke 0:08ba94bc5a30 610 RTD_IOUT1_250UA_EXC));
mahphalke 0:08ba94bc5a30 611
mahphalke 0:08ba94bc5a30 612 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 613 ad7124_register_map[AD7124_IOCon1]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 614 adc_error = true;
mahphalke 0:08ba94bc5a30 615 break;
mahphalke 0:08ba94bc5a30 616 }
mahphalke 0:08ba94bc5a30 617
mahphalke 0:08ba94bc5a30 618 /* Read adc averaged sample result for Iout1 excitation */
mahphalke 0:08ba94bc5a30 619 if (perform_adc_conversion(RTD_3WIRE_REF_MEASUREMENT_CHN,
mahphalke 0:08ba94bc5a30 620 &sample_data[RTD_3WIRE_REF_MEASUREMENT_CHN]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 621 adc_error = true;
mahphalke 0:08ba94bc5a30 622 break;
mahphalke 0:08ba94bc5a30 623 }
mahphalke 0:08ba94bc5a30 624
mahphalke 0:08ba94bc5a30 625 /* Get the equivalent ADC voltage */
mahphalke 0:08ba94bc5a30 626 voltage = ad7124_convert_sample_to_voltage(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 627 RTD_3WIRE_REF_MEASUREMENT_CHN,
mahphalke 0:08ba94bc5a30 628 sample_data[RTD_3WIRE_REF_MEASUREMENT_CHN]);
mahphalke 0:08ba94bc5a30 629
mahphalke 0:08ba94bc5a30 630 /* Calculate equivalent Iout1 current flowing through Rref resistance */
mahphalke 0:08ba94bc5a30 631 iout[1] = voltage / RTD_RREF;
mahphalke 0:08ba94bc5a30 632
mahphalke 0:08ba94bc5a30 633 /* Turn off the Iout1 excitation current */
mahphalke 0:08ba94bc5a30 634 ad7124_register_map[AD7124_IOCon1].value &= ((~AD7124_IO_CTRL1_REG_IOUT1_MSK)
mahphalke 0:08ba94bc5a30 635 & (~AD7124_IO_CTRL1_REG_IOUT_CH1_MSK));
mahphalke 0:08ba94bc5a30 636
mahphalke 0:08ba94bc5a30 637 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 638 ad7124_register_map[AD7124_IOCon1]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 639 adc_error = true;
mahphalke 0:08ba94bc5a30 640 break;
mahphalke 0:08ba94bc5a30 641 }
mahphalke 0:08ba94bc5a30 642
mahphalke 0:08ba94bc5a30 643 /* Part 2: Perform the ADC sampling on calibrated RTD sensor channel */
mahphalke 0:08ba94bc5a30 644
mahphalke 0:08ba94bc5a30 645 /* Change PGA to default value for performing measurement */
mahphalke 0:08ba94bc5a30 646 ad7124_register_map[AD7124_Config_0].value &= (~AD7124_CFG_REG_PGA_MSK);
mahphalke 0:08ba94bc5a30 647 ad7124_register_map[AD7124_Config_0].value |= AD7124_CFG_REG_PGA(
mahphalke 0:08ba94bc5a30 648 RTD_GAIN_VALUE);
mahphalke 0:08ba94bc5a30 649
mahphalke 0:08ba94bc5a30 650 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 651 ad7124_register_map[AD7124_Config_0]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 652 adc_error = true;
mahphalke 0:08ba94bc5a30 653 }
mahphalke 0:08ba94bc5a30 654
mahphalke 0:08ba94bc5a30 655 if (!do_rtc_sensor_adc_sampling(AD7124_CONFIG_3WIRE_RTD,
mahphalke 0:08ba94bc5a30 656 chn,
mahphalke 0:08ba94bc5a30 657 &sample_data[chn])) {
mahphalke 0:08ba94bc5a30 658 adc_error = true;
mahphalke 0:08ba94bc5a30 659 break;
mahphalke 0:08ba94bc5a30 660 }
mahphalke 0:08ba94bc5a30 661
mahphalke 0:08ba94bc5a30 662 /* Calculate Iout ratio and store the results */
mahphalke 0:08ba94bc5a30 663 store_rtd_calibrated_iout_ratio((iout[1] / iout[0]), true);
mahphalke 0:08ba94bc5a30 664 } else {
mahphalke 0:08ba94bc5a30 665 /* Calibration by Iout excitation chopping.
mahphalke 0:08ba94bc5a30 666 * Part1: Direct the Iout excitation currents */
mahphalke 0:08ba94bc5a30 667
mahphalke 0:08ba94bc5a30 668 /* Enable and direct IOUT0 excitation current source */
mahphalke 0:08ba94bc5a30 669 ad7124_register_map[AD7124_IOCon1].value |= (AD7124_IO_CTRL1_REG_IOUT_CH0(
mahphalke 0:08ba94bc5a30 670 rtd_3wire_iout0_source[chn]) | AD7124_IO_CTRL1_REG_IOUT0(
mahphalke 0:08ba94bc5a30 671 RTD_IOUT0_250UA_EXC));
mahphalke 0:08ba94bc5a30 672
mahphalke 0:08ba94bc5a30 673 /* Enable and direct IOUT1 excitation current source */
mahphalke 0:08ba94bc5a30 674 ad7124_register_map[AD7124_IOCon1].value |= (AD7124_IO_CTRL1_REG_IOUT_CH1(
mahphalke 0:08ba94bc5a30 675 rtd_3wire_iout1_source[chn]) | AD7124_IO_CTRL1_REG_IOUT1(
mahphalke 0:08ba94bc5a30 676 RTD_IOUT1_250UA_EXC));
mahphalke 0:08ba94bc5a30 677
mahphalke 0:08ba94bc5a30 678 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 679 ad7124_register_map[AD7124_IOCon1]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 680 adc_error = true;
mahphalke 0:08ba94bc5a30 681 break;
mahphalke 0:08ba94bc5a30 682 }
mahphalke 0:08ba94bc5a30 683
mahphalke 0:08ba94bc5a30 684 /* Read adc averaged sample result for selected RTD sensor channel */
mahphalke 0:08ba94bc5a30 685 if (perform_adc_conversion(chn, &adc_raw[0]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 686 adc_error = true;
mahphalke 0:08ba94bc5a30 687 break;
mahphalke 0:08ba94bc5a30 688 }
mahphalke 0:08ba94bc5a30 689
mahphalke 0:08ba94bc5a30 690 /* Reset Iout registers for loading new configs */
mahphalke 0:08ba94bc5a30 691 ad7124_register_map[AD7124_IOCon1].value &= ((~AD7124_IO_CTRL1_REG_IOUT0_MSK)
mahphalke 0:08ba94bc5a30 692 & (~AD7124_IO_CTRL1_REG_IOUT_CH0_MSK) & (~AD7124_IO_CTRL1_REG_IOUT1_MSK)
mahphalke 0:08ba94bc5a30 693 & (~AD7124_IO_CTRL1_REG_IOUT_CH1_MSK));
mahphalke 0:08ba94bc5a30 694
mahphalke 0:08ba94bc5a30 695 /* Part2: Swap the Iout excitation sources and direct currents */
mahphalke 0:08ba94bc5a30 696
mahphalke 0:08ba94bc5a30 697 /* Enable and direct IOUT0 excitation current source */
mahphalke 0:08ba94bc5a30 698 ad7124_register_map[AD7124_IOCon1].value |= (AD7124_IO_CTRL1_REG_IOUT_CH0(
mahphalke 0:08ba94bc5a30 699 rtd_3wire_iout1_source[chn]) | AD7124_IO_CTRL1_REG_IOUT0(
mahphalke 0:08ba94bc5a30 700 RTD_IOUT0_250UA_EXC));
mahphalke 0:08ba94bc5a30 701
mahphalke 0:08ba94bc5a30 702 /* Enable and direct IOUT1 excitation current source */
mahphalke 0:08ba94bc5a30 703 ad7124_register_map[AD7124_IOCon1].value |= (AD7124_IO_CTRL1_REG_IOUT_CH1(
mahphalke 0:08ba94bc5a30 704 rtd_3wire_iout0_source[chn]) | AD7124_IO_CTRL1_REG_IOUT1(
mahphalke 0:08ba94bc5a30 705 RTD_IOUT1_250UA_EXC));
mahphalke 0:08ba94bc5a30 706
mahphalke 0:08ba94bc5a30 707 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 708 ad7124_register_map[AD7124_IOCon1]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 709 adc_error = true;
mahphalke 0:08ba94bc5a30 710 break;
mahphalke 0:08ba94bc5a30 711 }
mahphalke 0:08ba94bc5a30 712
mahphalke 0:08ba94bc5a30 713 /* Read adc averaged sample result for selected RTD sensor channel */
mahphalke 0:08ba94bc5a30 714 if (perform_adc_conversion(chn, &adc_raw[1]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 715 adc_error = true;
mahphalke 0:08ba94bc5a30 716 break;
mahphalke 0:08ba94bc5a30 717 }
mahphalke 0:08ba94bc5a30 718
mahphalke 0:08ba94bc5a30 719 /* Turn off the excitation currents */
mahphalke 0:08ba94bc5a30 720 ad7124_register_map[AD7124_IOCon1].value &= ((~AD7124_IO_CTRL1_REG_IOUT0_MSK)
mahphalke 0:08ba94bc5a30 721 & (~AD7124_IO_CTRL1_REG_IOUT_CH0_MSK) & (~AD7124_IO_CTRL1_REG_IOUT1_MSK)
mahphalke 0:08ba94bc5a30 722 & (~AD7124_IO_CTRL1_REG_IOUT_CH1_MSK));
mahphalke 0:08ba94bc5a30 723
mahphalke 0:08ba94bc5a30 724 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 725 ad7124_register_map[AD7124_IOCon1]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 726 adc_error = true;
mahphalke 0:08ba94bc5a30 727 break;
mahphalke 0:08ba94bc5a30 728 }
mahphalke 0:08ba94bc5a30 729
mahphalke 0:08ba94bc5a30 730 /* Get ADC averaged result */
mahphalke 0:08ba94bc5a30 731 sample_data[chn] = (adc_raw[0] + adc_raw[1]) / 2;
mahphalke 0:08ba94bc5a30 732 }
mahphalke 0:08ba94bc5a30 733
mahphalke 0:08ba94bc5a30 734 /* Calculate temperature from the RTD resistence */
mahphalke 0:08ba94bc5a30 735 temperature = get_rtd_temperature(sample_data[chn]);
mahphalke 0:08ba94bc5a30 736
mahphalke 0:08ba94bc5a30 737 printf("\t RTD%d %.4f" EOL, chn + 1, temperature);
mahphalke 0:08ba94bc5a30 738
mahphalke 0:08ba94bc5a30 739 /* Reset the calibration constant value after measurement */
mahphalke 0:08ba94bc5a30 740 store_rtd_calibrated_iout_ratio(1, false);
mahphalke 0:08ba94bc5a30 741 }
mahphalke 0:08ba94bc5a30 742 }
mahphalke 0:08ba94bc5a30 743
mahphalke 0:08ba94bc5a30 744 if (adc_error) {
mahphalke 0:08ba94bc5a30 745 printf(EOL EOL "\tError Performing Measurement" EOL);
mahphalke 0:08ba94bc5a30 746 }
mahphalke 0:08ba94bc5a30 747
mahphalke 0:08ba94bc5a30 748 /* Change PGA back to default value */
mahphalke 0:08ba94bc5a30 749 ad7124_register_map[AD7124_Config_0].value &= (~AD7124_CFG_REG_PGA_MSK);
mahphalke 0:08ba94bc5a30 750 ad7124_register_map[AD7124_Config_0].value |= AD7124_CFG_REG_PGA(
mahphalke 0:08ba94bc5a30 751 RTD_GAIN_VALUE);
mahphalke 0:08ba94bc5a30 752
mahphalke 0:08ba94bc5a30 753 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 754 ad7124_register_map[AD7124_Config_0]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 755 adc_error = true;
mahphalke 0:08ba94bc5a30 756 }
mahphalke 0:08ba94bc5a30 757
mahphalke 0:08ba94bc5a30 758 /* Put ADC into standby mode */
mahphalke 0:08ba94bc5a30 759 ad7124_register_map[AD7124_ADC_Control].value &= (~AD7124_ADC_CTRL_REG_MSK);
mahphalke 0:08ba94bc5a30 760 ad7124_register_map[AD7124_ADC_Control].value |= AD7124_ADC_CTRL_REG_MODE(
mahphalke 0:08ba94bc5a30 761 STANDBY_MODE);
mahphalke 0:08ba94bc5a30 762 ad7124_write_register(p_ad7124_dev, ad7124_register_map[AD7124_ADC_Control]);
mahphalke 0:08ba94bc5a30 763
mahphalke 0:08ba94bc5a30 764 adi_press_any_key_to_continue();
mahphalke 0:08ba94bc5a30 765 return MENU_CONTINUE;
mahphalke 0:08ba94bc5a30 766 }
mahphalke 0:08ba94bc5a30 767
mahphalke 0:08ba94bc5a30 768
mahphalke 0:08ba94bc5a30 769 /*!
mahphalke 0:08ba94bc5a30 770 * @brief Perform the multiple NTC thermistor sensors measurement
mahphalke 0:08ba94bc5a30 771 * @param ntc_config_id[in]- NTC Sensor config ID
mahphalke 0:08ba94bc5a30 772 * @return MENU_CONTINUE
mahphalke 0:08ba94bc5a30 773 */
mahphalke 0:08ba94bc5a30 774 int32_t perform_ntc_thermistor_measurement(uint32_t ntc_config_id)
mahphalke 0:08ba94bc5a30 775 {
mahphalke 0:08ba94bc5a30 776 int32_t sample_data[MAX_NTC_THERMISTOR_SENSORS];
mahphalke 0:08ba94bc5a30 777 bool adc_error = false;
mahphalke 0:08ba94bc5a30 778 float temperature;
mahphalke 0:08ba94bc5a30 779
mahphalke 0:08ba94bc5a30 780 printf(EOL EOL EOL);
mahphalke 0:08ba94bc5a30 781
mahphalke 0:08ba94bc5a30 782 /* Sample and Read all enabled NTC channels in sequence */
mahphalke 0:08ba94bc5a30 783 for (uint8_t chn = SENSOR_CHANNEL0; chn < max_supported_sensors[ntc_config_id];
mahphalke 0:08ba94bc5a30 784 chn++) {
mahphalke 0:08ba94bc5a30 785 if (sensor_enable_status[chn]) {
mahphalke 0:08ba94bc5a30 786 printf(VT100_MOVE_UP_1_LINE
mahphalke 0:08ba94bc5a30 787 "Thermistor temperature measurement in progress%s" EOL,
mahphalke 0:08ba94bc5a30 788 temp_measurement_status[chn]);
mahphalke 0:08ba94bc5a30 789
mahphalke 0:08ba94bc5a30 790 /* Read adc averaged sample result */
mahphalke 0:08ba94bc5a30 791 if (perform_adc_conversion(chn, &sample_data[chn]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 792 adc_error = true;
mahphalke 0:08ba94bc5a30 793 break;
mahphalke 0:08ba94bc5a30 794 }
mahphalke 0:08ba94bc5a30 795 }
mahphalke 0:08ba94bc5a30 796 }
mahphalke 0:08ba94bc5a30 797
mahphalke 0:08ba94bc5a30 798 if (adc_error) {
mahphalke 0:08ba94bc5a30 799 printf(EOL EOL "\tError Performing Measurement" EOL);
mahphalke 0:08ba94bc5a30 800 } else {
mahphalke 0:08ba94bc5a30 801 /* Print the temperature measurement results */
mahphalke 0:08ba94bc5a30 802 printf(EOL EOL "\tNTC Sensor Temperature (C)" EOL);
mahphalke 0:08ba94bc5a30 803 printf("\t-----------------------------" EOL);
mahphalke 0:08ba94bc5a30 804
mahphalke 0:08ba94bc5a30 805 for (uint8_t chn = SENSOR_CHANNEL0; chn < max_supported_sensors[ntc_config_id];
mahphalke 0:08ba94bc5a30 806 chn++) {
mahphalke 0:08ba94bc5a30 807 if (sensor_enable_status[chn]) {
mahphalke 0:08ba94bc5a30 808 /* Get the NTC temperature */
mahphalke 0:08ba94bc5a30 809 temperature = get_ntc_thermistor_temperature(sample_data[chn]);
mahphalke 0:08ba94bc5a30 810
mahphalke 0:08ba94bc5a30 811 printf("\t NTC%d %.4f" EOL, chn + 1, temperature);
mahphalke 0:08ba94bc5a30 812 }
mahphalke 0:08ba94bc5a30 813 }
mahphalke 0:08ba94bc5a30 814 }
mahphalke 0:08ba94bc5a30 815
mahphalke 0:08ba94bc5a30 816 /* Put ADC into standby mode */
mahphalke 0:08ba94bc5a30 817 ad7124_register_map[AD7124_ADC_Control].value &= (~AD7124_ADC_CTRL_REG_MSK);
mahphalke 0:08ba94bc5a30 818 ad7124_register_map[AD7124_ADC_Control].value |= AD7124_ADC_CTRL_REG_MODE(
mahphalke 0:08ba94bc5a30 819 STANDBY_MODE);
mahphalke 0:08ba94bc5a30 820 ad7124_write_register(p_ad7124_dev, ad7124_register_map[AD7124_ADC_Control]);
mahphalke 0:08ba94bc5a30 821
mahphalke 0:08ba94bc5a30 822 adi_press_any_key_to_continue();
mahphalke 0:08ba94bc5a30 823 return MENU_CONTINUE;
mahphalke 0:08ba94bc5a30 824 }
mahphalke 0:08ba94bc5a30 825
mahphalke 0:08ba94bc5a30 826
mahphalke 0:08ba94bc5a30 827 /*!
mahphalke 0:08ba94bc5a30 828 * @brief Perform the cold junction compensation (CJC) measurement
mahphalke 0:08ba94bc5a30 829 * @param *data[out]- Pointer to variable to read data into
mahphalke 0:08ba94bc5a30 830 * @return SUCCESS/FAILURE
mahphalke 0:08ba94bc5a30 831 * @note Both CJCs uses similar excitation and ratiometric measurement
mahphalke 0:08ba94bc5a30 832 * logic
mahphalke 0:08ba94bc5a30 833 */
mahphalke 0:08ba94bc5a30 834 int32_t perform_cjc_measurement(int32_t *data)
mahphalke 0:08ba94bc5a30 835 {
mahphalke 0:08ba94bc5a30 836 int32_t iout0_input, iout_exc;
mahphalke 0:08ba94bc5a30 837 int32_t input_chn;
mahphalke 0:08ba94bc5a30 838
mahphalke 0:08ba94bc5a30 839 switch (current_cjc_sensor) {
mahphalke 0:08ba94bc5a30 840 case PT100_4WIRE_RTD:
mahphalke 0:08ba94bc5a30 841 case PT1000_4WIRE_RTD:
mahphalke 0:08ba94bc5a30 842 iout0_input = CJC_4WIRE_RTD_IOUT0;
mahphalke 0:08ba94bc5a30 843 iout_exc = CJC_4WIRE_RTD_IOUT0_EXC;
mahphalke 0:08ba94bc5a30 844 input_chn = CJC_RTD_CHN;
mahphalke 0:08ba94bc5a30 845 break;
mahphalke 0:08ba94bc5a30 846
mahphalke 0:08ba94bc5a30 847 case THERMISTOR_PTC_KY81_110:
mahphalke 0:08ba94bc5a30 848 iout0_input = CJC_PTC_THERMISTOR_IOUT0;
mahphalke 0:08ba94bc5a30 849 iout_exc = CJC_PTC_THERMISTOR_IOUT0_EXC;
mahphalke 0:08ba94bc5a30 850 input_chn = CJC_THERMISTOR_CHN;
mahphalke 0:08ba94bc5a30 851 break;
mahphalke 0:08ba94bc5a30 852
mahphalke 0:08ba94bc5a30 853 default:
mahphalke 0:08ba94bc5a30 854 return FAILURE;
mahphalke 0:08ba94bc5a30 855 }
mahphalke 0:08ba94bc5a30 856
mahphalke 0:08ba94bc5a30 857 /* Enable and direct IOUT0 excitation current source for CJ sensor measurement */
mahphalke 0:08ba94bc5a30 858 ad7124_register_map[AD7124_IOCon1].value |= (AD7124_IO_CTRL1_REG_IOUT_CH0(
mahphalke 0:08ba94bc5a30 859 iout0_input) | AD7124_IO_CTRL1_REG_IOUT0(iout_exc));
mahphalke 0:08ba94bc5a30 860 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 861 ad7124_register_map[AD7124_IOCon1]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 862 return FAILURE;
mahphalke 0:08ba94bc5a30 863 }
mahphalke 0:08ba94bc5a30 864
mahphalke 0:08ba94bc5a30 865 /* Read adc averaged sample result */
mahphalke 0:08ba94bc5a30 866 if (perform_adc_conversion(input_chn, data) == FAILURE) {
mahphalke 0:08ba94bc5a30 867 return FAILURE;
mahphalke 0:08ba94bc5a30 868 }
mahphalke 0:08ba94bc5a30 869
mahphalke 0:08ba94bc5a30 870 /* Turn off the excitation current */
mahphalke 0:08ba94bc5a30 871 ad7124_register_map[AD7124_IOCon1].value &= ((~AD7124_IO_CTRL1_REG_IOUT0_MSK)
mahphalke 0:08ba94bc5a30 872 & (~AD7124_IO_CTRL1_REG_IOUT_CH0_MSK));
mahphalke 0:08ba94bc5a30 873 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 874 ad7124_register_map[AD7124_IOCon1]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 875 return FAILURE;
mahphalke 0:08ba94bc5a30 876 }
mahphalke 0:08ba94bc5a30 877
mahphalke 0:08ba94bc5a30 878 return SUCCESS;
mahphalke 0:08ba94bc5a30 879 }
mahphalke 0:08ba94bc5a30 880
mahphalke 0:08ba94bc5a30 881
mahphalke 0:08ba94bc5a30 882 /*!
mahphalke 0:08ba94bc5a30 883 * @brief Perform the multiple thermocouple sensors measurement
mahphalke 0:08ba94bc5a30 884 * @param tc_config_id[in]- Thermocouple Sensor config ID
mahphalke 0:08ba94bc5a30 885 * @return MENU_CONTINUE
mahphalke 0:08ba94bc5a30 886 */
mahphalke 0:08ba94bc5a30 887 int32_t perform_thermocouple_measurement(uint32_t tc_config_id)
mahphalke 0:08ba94bc5a30 888 {
mahphalke 0:08ba94bc5a30 889 int32_t sample_data[MAX_THERMOCOUPLE_SENSORS][2]; // tc + cjc
mahphalke 0:08ba94bc5a30 890 bool adc_error = false;
mahphalke 0:08ba94bc5a30 891 float temperature;
mahphalke 0:08ba94bc5a30 892
mahphalke 0:08ba94bc5a30 893 #if defined(AD7124_8)
mahphalke 0:08ba94bc5a30 894 const int32_t tc_vbias_input[] = {
mahphalke 0:08ba94bc5a30 895 AD7124_8_IO_CTRL2_REG_GPIO_VBIAS2, AD7124_8_IO_CTRL2_REG_GPIO_VBIAS6,
mahphalke 0:08ba94bc5a30 896 AD7124_8_IO_CTRL2_REG_GPIO_VBIAS8, AD7124_8_IO_CTRL2_REG_GPIO_VBIAS10,
mahphalke 0:08ba94bc5a30 897 AD7124_8_IO_CTRL2_REG_GPIO_VBIAS12, AD7124_8_IO_CTRL2_REG_GPIO_VBIAS14
mahphalke 0:08ba94bc5a30 898 };
mahphalke 0:08ba94bc5a30 899 #else
mahphalke 0:08ba94bc5a30 900 const int32_t tc_vbias_input[] = {
mahphalke 0:08ba94bc5a30 901 AD7124_IO_CTRL2_REG_GPIO_VBIAS2, AD7124_IO_CTRL2_REG_GPIO_VBIAS6
mahphalke 0:08ba94bc5a30 902 };
mahphalke 0:08ba94bc5a30 903 #endif
mahphalke 0:08ba94bc5a30 904
mahphalke 0:08ba94bc5a30 905 printf(EOL EOL EOL);
mahphalke 0:08ba94bc5a30 906
mahphalke 0:08ba94bc5a30 907 /* Sample and Read all enabled Thermocouple channels in sequence */
mahphalke 0:08ba94bc5a30 908 for (uint8_t chn = SENSOR_CHANNEL0; chn < max_supported_sensors[tc_config_id];
mahphalke 0:08ba94bc5a30 909 chn++) {
mahphalke 0:08ba94bc5a30 910 if (sensor_enable_status[chn]) {
mahphalke 0:08ba94bc5a30 911 /* Turn on the bias voltage for current thermocouple input (AINP) */
mahphalke 0:08ba94bc5a30 912 ad7124_register_map[AD7124_IOCon2].value |= tc_vbias_input[chn];
mahphalke 0:08ba94bc5a30 913 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 914 ad7124_register_map[AD7124_IOCon2]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 915 adc_error = true;
mahphalke 0:08ba94bc5a30 916 break;
mahphalke 0:08ba94bc5a30 917 }
mahphalke 0:08ba94bc5a30 918
mahphalke 0:08ba94bc5a30 919 printf(VT100_MOVE_UP_1_LINE
mahphalke 0:08ba94bc5a30 920 "Thermocouple temperature measurement in progress%s" EOL,
mahphalke 0:08ba94bc5a30 921 temp_measurement_status[chn]);
mahphalke 0:08ba94bc5a30 922
mahphalke 0:08ba94bc5a30 923 /* Read adc averaged sample result */
mahphalke 0:08ba94bc5a30 924 if (perform_adc_conversion(chn, &sample_data[chn][0]) == FAILURE) {
mahphalke 0:08ba94bc5a30 925 adc_error = true;
mahphalke 0:08ba94bc5a30 926 break;
mahphalke 0:08ba94bc5a30 927 }
mahphalke 0:08ba94bc5a30 928
mahphalke 0:08ba94bc5a30 929 /* Turn off the bias voltage for all analog inputs */
mahphalke 0:08ba94bc5a30 930 ad7124_register_map[AD7124_IOCon2].value = 0x0;
mahphalke 0:08ba94bc5a30 931 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 932 ad7124_register_map[AD7124_IOCon2]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 933 adc_error = true;
mahphalke 0:08ba94bc5a30 934 break;
mahphalke 0:08ba94bc5a30 935 }
mahphalke 0:08ba94bc5a30 936
mahphalke 0:08ba94bc5a30 937 /* Perform measurement for the cold junction compensation sensor */
mahphalke 0:08ba94bc5a30 938 perform_cjc_measurement(&sample_data[chn][1]);
mahphalke 0:08ba94bc5a30 939 }
mahphalke 0:08ba94bc5a30 940
mahphalke 0:08ba94bc5a30 941 if (adc_error)
mahphalke 0:08ba94bc5a30 942 break;
mahphalke 0:08ba94bc5a30 943 }
mahphalke 0:08ba94bc5a30 944
mahphalke 0:08ba94bc5a30 945 if (adc_error) {
mahphalke 0:08ba94bc5a30 946 printf(EOL EOL "\tError Performing Measurement" EOL);
mahphalke 0:08ba94bc5a30 947 } else {
mahphalke 0:08ba94bc5a30 948 /* Print the temperature measurement results */
mahphalke 0:08ba94bc5a30 949 printf(EOL EOL "\tTC Sensor Temperature (C)" EOL);
mahphalke 0:08ba94bc5a30 950 printf("\t-----------------------------" EOL);
mahphalke 0:08ba94bc5a30 951
mahphalke 0:08ba94bc5a30 952 for (uint8_t chn = SENSOR_CHANNEL0; chn < max_supported_sensors[tc_config_id];
mahphalke 0:08ba94bc5a30 953 chn++) {
mahphalke 0:08ba94bc5a30 954 if (sensor_enable_status[chn]) {
mahphalke 0:08ba94bc5a30 955 temperature = get_tc_temperature(sample_data[chn][0], sample_data[chn][1],
mahphalke 0:08ba94bc5a30 956 current_cjc_sensor);
mahphalke 0:08ba94bc5a30 957
mahphalke 0:08ba94bc5a30 958 printf("\t TC%d %.4f" EOL, chn + 1, temperature);
mahphalke 0:08ba94bc5a30 959 }
mahphalke 0:08ba94bc5a30 960 }
mahphalke 0:08ba94bc5a30 961 }
mahphalke 0:08ba94bc5a30 962
mahphalke 0:08ba94bc5a30 963 /* Put ADC into standby mode */
mahphalke 0:08ba94bc5a30 964 ad7124_register_map[AD7124_ADC_Control].value &= (~AD7124_ADC_CTRL_REG_MSK);
mahphalke 0:08ba94bc5a30 965 ad7124_register_map[AD7124_ADC_Control].value |= AD7124_ADC_CTRL_REG_MODE(
mahphalke 0:08ba94bc5a30 966 STANDBY_MODE);
mahphalke 0:08ba94bc5a30 967 ad7124_write_register(p_ad7124_dev, ad7124_register_map[AD7124_ADC_Control]);
mahphalke 0:08ba94bc5a30 968
mahphalke 0:08ba94bc5a30 969 adi_press_any_key_to_continue();
mahphalke 0:08ba94bc5a30 970 return MENU_CONTINUE;
mahphalke 0:08ba94bc5a30 971 }
mahphalke 0:08ba94bc5a30 972
mahphalke 0:08ba94bc5a30 973
mahphalke 0:08ba94bc5a30 974 /*!
mahphalke 0:08ba94bc5a30 975 * @brief Perform the ADC calibration device configuration
mahphalke 0:08ba94bc5a30 976 * @return adc_error_status
mahphalke 0:08ba94bc5a30 977 */
mahphalke 0:08ba94bc5a30 978 static bool do_adc_calibration_configs(void)
mahphalke 0:08ba94bc5a30 979 {
mahphalke 0:08ba94bc5a30 980 bool adc_error_status = false;
mahphalke 0:08ba94bc5a30 981
mahphalke 0:08ba94bc5a30 982 do {
mahphalke 0:08ba94bc5a30 983 /* Put ADC into standby mode */
mahphalke 0:08ba94bc5a30 984 ad7124_register_map[AD7124_ADC_Control].value &= (~AD7124_ADC_CTRL_REG_MSK);
mahphalke 0:08ba94bc5a30 985 ad7124_register_map[AD7124_ADC_Control].value |= AD7124_ADC_CTRL_REG_MODE(
mahphalke 0:08ba94bc5a30 986 STANDBY_MODE);
mahphalke 0:08ba94bc5a30 987
mahphalke 0:08ba94bc5a30 988 /* Enable internal Vref */
mahphalke 0:08ba94bc5a30 989 ad7124_register_map[AD7124_ADC_Control].value |= AD7124_ADC_CTRL_REG_REF_EN;
mahphalke 0:08ba94bc5a30 990
mahphalke 0:08ba94bc5a30 991 /* Select low power ADC mode */
mahphalke 0:08ba94bc5a30 992 ad7124_register_map[AD7124_ADC_Control].value &=
mahphalke 0:08ba94bc5a30 993 (~AD7124_ADC_CTRL_REG_POWER_MODE_MSK);
mahphalke 0:08ba94bc5a30 994 ad7124_register_map[AD7124_ADC_Control].value |= AD7124_ADC_CTRL_REG_POWER_MODE(
mahphalke 0:08ba94bc5a30 995 ADC_CALIBRATION_PWR_MODE);
mahphalke 0:08ba94bc5a30 996
mahphalke 0:08ba94bc5a30 997 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 998 ad7124_register_map[AD7124_ADC_Control]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 999 adc_error_status = true;
mahphalke 0:08ba94bc5a30 1000 break;
mahphalke 0:08ba94bc5a30 1001 }
mahphalke 0:08ba94bc5a30 1002
mahphalke 0:08ba94bc5a30 1003 for (uint8_t cfg = 0; cfg < AD7124_MAX_CONFIGS_USED; cfg++) {
mahphalke 0:08ba94bc5a30 1004 /* Change ADC gain */
mahphalke 0:08ba94bc5a30 1005 ad7124_register_map[AD7124_Config_0 + cfg].value &= (~AD7124_CFG_REG_PGA_MSK);
mahphalke 0:08ba94bc5a30 1006 ad7124_register_map[AD7124_Config_0 + cfg].value |= AD7124_CFG_REG_PGA(
mahphalke 0:08ba94bc5a30 1007 ADC_CALIBRATION_GAIN);
mahphalke 0:08ba94bc5a30 1008
mahphalke 0:08ba94bc5a30 1009 /* Enable internal Vref source */
mahphalke 0:08ba94bc5a30 1010 ad7124_register_map[AD7124_Config_0 + cfg].value &=
mahphalke 0:08ba94bc5a30 1011 (~AD7124_CFG_REG_REF_SEL_MSK);
mahphalke 0:08ba94bc5a30 1012 ad7124_register_map[AD7124_Config_0 + cfg].value |= AD7124_CFG_REG_REF_SEL(
mahphalke 0:08ba94bc5a30 1013 ADC_CALIBRATION_REF_SRC);
mahphalke 0:08ba94bc5a30 1014
mahphalke 0:08ba94bc5a30 1015 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 1016 ad7124_register_map[AD7124_Config_0 + cfg]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 1017 adc_error_status = true;
mahphalke 0:08ba94bc5a30 1018 break;
mahphalke 0:08ba94bc5a30 1019 }
mahphalke 0:08ba94bc5a30 1020 }
mahphalke 0:08ba94bc5a30 1021 } while (0);
mahphalke 0:08ba94bc5a30 1022
mahphalke 0:08ba94bc5a30 1023 return adc_error_status;
mahphalke 0:08ba94bc5a30 1024 }
mahphalke 0:08ba94bc5a30 1025
mahphalke 0:08ba94bc5a30 1026
mahphalke 0:08ba94bc5a30 1027 /*!
mahphalke 0:08ba94bc5a30 1028 * @brief Perform the ADC calibration on selected channel
mahphalke 0:08ba94bc5a30 1029 * @param calibration_mode[in] - ADC calibration mode
mahphalke 0:08ba94bc5a30 1030 * @param chn[in] - ADC channel to be calibrated
mahphalke 0:08ba94bc5a30 1031 * @param setup[in] - Setup mapped to selected ADC channel
mahphalke 0:08ba94bc5a30 1032 * @param pos_analog_input[in] - Positive analog input mapped to selected ADC channel
mahphalke 0:08ba94bc5a30 1033 * @param neg_analog_input[in] - Negative analog input mapped to selected ADC channel
mahphalke 0:08ba94bc5a30 1034 * @return adc_error_status
mahphalke 0:08ba94bc5a30 1035 */
mahphalke 0:08ba94bc5a30 1036 static bool do_adc_calibration(uint32_t calibration_mode, uint8_t chn,
mahphalke 0:08ba94bc5a30 1037 uint8_t setup,
mahphalke 0:08ba94bc5a30 1038 uint8_t pos_analog_input, uint8_t neg_analog_input)
mahphalke 0:08ba94bc5a30 1039 {
mahphalke 0:08ba94bc5a30 1040 bool adc_error_status = false;
mahphalke 0:08ba94bc5a30 1041
mahphalke 0:08ba94bc5a30 1042 do {
mahphalke 0:08ba94bc5a30 1043 if ((calibration_mode == INTERNAL_FULL_SCALE_CALIBRATE_MODE)
mahphalke 0:08ba94bc5a30 1044 || (calibration_mode == INTERNAL_ZERO_SCALE_CALIBRATE_MODE)) {
mahphalke 0:08ba94bc5a30 1045 if (calibration_mode == INTERNAL_FULL_SCALE_CALIBRATE_MODE) {
mahphalke 0:08ba94bc5a30 1046 printf("\tRunning full-scale internal calibration..." EOL);
mahphalke 0:08ba94bc5a30 1047
mahphalke 0:08ba94bc5a30 1048 /* Write default offset register value before starting full-scale internal calibration */
mahphalke 0:08ba94bc5a30 1049 ad7124_register_map[AD7124_Offset_0 + setup].value =
mahphalke 0:08ba94bc5a30 1050 AD7124_DEFAULT_OFFSET;
mahphalke 0:08ba94bc5a30 1051 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 1052 ad7124_register_map[AD7124_Offset_0 + setup]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 1053 adc_error_status = true;
mahphalke 0:08ba94bc5a30 1054 break;
mahphalke 0:08ba94bc5a30 1055 }
mahphalke 0:08ba94bc5a30 1056 } else {
mahphalke 0:08ba94bc5a30 1057 printf("\tRunning zero-scale internal calibration..." EOL);
mahphalke 0:08ba94bc5a30 1058 }
mahphalke 0:08ba94bc5a30 1059
mahphalke 0:08ba94bc5a30 1060 ad7124_register_map[AD7124_ADC_Control].value =
mahphalke 0:08ba94bc5a30 1061 ((ad7124_register_map[AD7124_ADC_Control].value & ~AD7124_ADC_CTRL_REG_MSK) | \
mahphalke 0:08ba94bc5a30 1062 AD7124_ADC_CTRL_REG_MODE(calibration_mode));
mahphalke 0:08ba94bc5a30 1063 } else {
mahphalke 0:08ba94bc5a30 1064 if (calibration_mode == SYSTEM_FULL_SCALE_CALIBRATE_MODE) {
mahphalke 0:08ba94bc5a30 1065 printf(EOL
mahphalke 0:08ba94bc5a30 1066 "\tApply full-scale voltage between AINP%d and AINM%d and press any key..."
mahphalke 0:08ba94bc5a30 1067 EOL,
mahphalke 0:08ba94bc5a30 1068 pos_analog_input,
mahphalke 0:08ba94bc5a30 1069 neg_analog_input);
mahphalke 0:08ba94bc5a30 1070 } else {
mahphalke 0:08ba94bc5a30 1071 printf(EOL
mahphalke 0:08ba94bc5a30 1072 "\tApply zero-scale voltage between AINP%d and AINM%d and press any key..."
mahphalke 0:08ba94bc5a30 1073 EOL,
mahphalke 0:08ba94bc5a30 1074 pos_analog_input,
mahphalke 0:08ba94bc5a30 1075 neg_analog_input);
mahphalke 0:08ba94bc5a30 1076 }
mahphalke 0:08ba94bc5a30 1077
mahphalke 0:08ba94bc5a30 1078 /* Wait for user input */
mahphalke 0:08ba94bc5a30 1079 getchar();
mahphalke 0:08ba94bc5a30 1080
mahphalke 0:08ba94bc5a30 1081 ad7124_register_map[AD7124_ADC_Control].value =
mahphalke 0:08ba94bc5a30 1082 ((ad7124_register_map[AD7124_ADC_Control].value & ~AD7124_ADC_CTRL_REG_MSK) | \
mahphalke 0:08ba94bc5a30 1083 AD7124_ADC_CTRL_REG_MODE(calibration_mode));
mahphalke 0:08ba94bc5a30 1084 }
mahphalke 0:08ba94bc5a30 1085
mahphalke 0:08ba94bc5a30 1086 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 1087 ad7124_register_map[AD7124_ADC_Control]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 1088 adc_error_status = true;
mahphalke 0:08ba94bc5a30 1089 break;
mahphalke 0:08ba94bc5a30 1090 }
mahphalke 0:08ba94bc5a30 1091
mahphalke 0:08ba94bc5a30 1092 /* Wait for calibration (conversion) to finish */
mahphalke 0:08ba94bc5a30 1093 if (ad7124_wait_for_conv_ready(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 1094 p_ad7124_dev->spi_rdy_poll_cnt) != SUCCESS) {
mahphalke 0:08ba94bc5a30 1095 adc_error_status = true;
mahphalke 0:08ba94bc5a30 1096 break;
mahphalke 0:08ba94bc5a30 1097 }
mahphalke 0:08ba94bc5a30 1098 } while (0);
mahphalke 0:08ba94bc5a30 1099
mahphalke 0:08ba94bc5a30 1100 return adc_error_status;
mahphalke 0:08ba94bc5a30 1101 }
mahphalke 0:08ba94bc5a30 1102
mahphalke 0:08ba94bc5a30 1103
mahphalke 0:08ba94bc5a30 1104 /*!
mahphalke 0:08ba94bc5a30 1105 * @brief Perform the AD7124 internal/system calibration
mahphalke 0:08ba94bc5a30 1106 * @param calibration_type[in]- ADC calibration type (internal/system)
mahphalke 0:08ba94bc5a30 1107 * @return MENU_CONTINUE
mahphalke 0:08ba94bc5a30 1108 * @note This function performs both 'Internal/System Full-Scale' and
mahphalke 0:08ba94bc5a30 1109 * 'Internal/System Zero-Scale' calibration on all enabled ADC channels
mahphalke 0:08ba94bc5a30 1110 * sequentially.
mahphalke 0:08ba94bc5a30 1111 */
mahphalke 0:08ba94bc5a30 1112 int32_t perform_adc_calibration(uint32_t calibration_type)
mahphalke 0:08ba94bc5a30 1113 {
mahphalke 0:08ba94bc5a30 1114 bool cal_error = false;
mahphalke 0:08ba94bc5a30 1115 bool adc_error = false;
mahphalke 0:08ba94bc5a30 1116 uint8_t chn_cnt;
mahphalke 0:08ba94bc5a30 1117 uint8_t pos_analog_input, neg_analog_input;
mahphalke 0:08ba94bc5a30 1118 uint8_t setup;
mahphalke 0:08ba94bc5a30 1119
mahphalke 0:08ba94bc5a30 1120 current_sensor_config = sensor_configs[AD7124_CONFIG_ADC_CALIBRATION];
mahphalke 0:08ba94bc5a30 1121
mahphalke 0:08ba94bc5a30 1122 /* Load ADC configurations and perform the calibration */
mahphalke 0:08ba94bc5a30 1123 if (!do_adc_calibration_configs()) {
mahphalke 0:08ba94bc5a30 1124 /* Calibrate all the user enabled ADC channels sequentially */
mahphalke 0:08ba94bc5a30 1125 for (chn_cnt = 0; chn_cnt < NUM_OF_SENSOR_CHANNELS; chn_cnt++) {
mahphalke 0:08ba94bc5a30 1126 if (sensor_enable_status[chn_cnt]) {
mahphalke 0:08ba94bc5a30 1127 /* Read the channel map register */
mahphalke 0:08ba94bc5a30 1128 if (ad7124_read_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 1129 &ad7124_register_map[AD7124_Channel_0 + chn_cnt]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 1130 adc_error = true;
mahphalke 0:08ba94bc5a30 1131 break;
mahphalke 0:08ba94bc5a30 1132 }
mahphalke 0:08ba94bc5a30 1133
mahphalke 0:08ba94bc5a30 1134 /* Get the analog inputs mapped to corresponding channel */
mahphalke 0:08ba94bc5a30 1135 pos_analog_input = AD7124_CH_MAP_REG_AINP_RD(
mahphalke 0:08ba94bc5a30 1136 ad7124_register_map[AD7124_Channel_0 + chn_cnt].value);
mahphalke 0:08ba94bc5a30 1137 neg_analog_input = AD7124_CH_MAP_REG_AINM_RD(
mahphalke 0:08ba94bc5a30 1138 ad7124_register_map[AD7124_Channel_0 + chn_cnt].value);
mahphalke 0:08ba94bc5a30 1139
mahphalke 0:08ba94bc5a30 1140 /* Make sure analog input number mapped to channel is correct */
mahphalke 0:08ba94bc5a30 1141 if (pos_analog_input > AD7124_MAX_INPUTS
mahphalke 0:08ba94bc5a30 1142 || neg_analog_input > AD7124_MAX_INPUTS) {
mahphalke 0:08ba94bc5a30 1143 continue;
mahphalke 0:08ba94bc5a30 1144 }
mahphalke 0:08ba94bc5a30 1145
mahphalke 0:08ba94bc5a30 1146 /* Get setup/configuration mapped to corresponding channel */
mahphalke 0:08ba94bc5a30 1147 setup = AD7124_CH_MAP_REG_SETUP_RD(
mahphalke 0:08ba94bc5a30 1148 ad7124_register_map[AD7124_Channel_0 + chn_cnt].value);
mahphalke 0:08ba94bc5a30 1149
mahphalke 0:08ba94bc5a30 1150 printf(EOL "Calibrating Channel %d => " EOL, chn_cnt);
mahphalke 0:08ba94bc5a30 1151
mahphalke 0:08ba94bc5a30 1152 /* Enable channel for calibration */
mahphalke 0:08ba94bc5a30 1153 ad7124_register_map[AD7124_Channel_0 + chn_cnt].value |=
mahphalke 0:08ba94bc5a30 1154 AD7124_CH_MAP_REG_CH_ENABLE;
mahphalke 0:08ba94bc5a30 1155 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 1156 ad7124_register_map[AD7124_Channel_0 + chn_cnt]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 1157 adc_error = true;
mahphalke 0:08ba94bc5a30 1158 break;
mahphalke 0:08ba94bc5a30 1159 }
mahphalke 0:08ba94bc5a30 1160
mahphalke 0:08ba94bc5a30 1161 if (calibration_type == INTERNAL_CALIBRATION) {
mahphalke 0:08ba94bc5a30 1162 /* Perform the full-scale internal calibration */
mahphalke 0:08ba94bc5a30 1163 do_adc_calibration(INTERNAL_FULL_SCALE_CALIBRATE_MODE,
mahphalke 0:08ba94bc5a30 1164 chn_cnt, setup,
mahphalke 0:08ba94bc5a30 1165 pos_analog_input, neg_analog_input);
mahphalke 0:08ba94bc5a30 1166
mahphalke 0:08ba94bc5a30 1167 /* Perform the zero-scale internal calibration */
mahphalke 0:08ba94bc5a30 1168 do_adc_calibration(INTERNAL_ZERO_SCALE_CALIBRATE_MODE,
mahphalke 0:08ba94bc5a30 1169 chn_cnt, setup,
mahphalke 0:08ba94bc5a30 1170 pos_analog_input, neg_analog_input);
mahphalke 0:08ba94bc5a30 1171 } else {
mahphalke 0:08ba94bc5a30 1172 /* Perform the full-scale system calibration */
mahphalke 0:08ba94bc5a30 1173 do_adc_calibration(SYSTEM_FULL_SCALE_CALIBRATE_MODE,
mahphalke 0:08ba94bc5a30 1174 chn_cnt, setup,
mahphalke 0:08ba94bc5a30 1175 pos_analog_input, neg_analog_input);
mahphalke 0:08ba94bc5a30 1176
mahphalke 0:08ba94bc5a30 1177 /* Perform the zero-scale system calibration */
mahphalke 0:08ba94bc5a30 1178 do_adc_calibration(SYSTEM_ZERO_SCALE_CALIBRATE_MODE,
mahphalke 0:08ba94bc5a30 1179 chn_cnt, setup,
mahphalke 0:08ba94bc5a30 1180 pos_analog_input, neg_analog_input);
mahphalke 0:08ba94bc5a30 1181 }
mahphalke 0:08ba94bc5a30 1182
mahphalke 0:08ba94bc5a30 1183 /* Read the calibration error status */
mahphalke 0:08ba94bc5a30 1184 if (ad7124_read_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 1185 &ad7124_register_map[AD7124_Error]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 1186 adc_error = true;
mahphalke 0:08ba94bc5a30 1187 break;
mahphalke 0:08ba94bc5a30 1188 } else {
mahphalke 0:08ba94bc5a30 1189 cal_error = AD7124_ERR_REG_ADC_CAL_ERR_RD(
mahphalke 0:08ba94bc5a30 1190 ad7124_register_map[AD7124_Error].value);
mahphalke 0:08ba94bc5a30 1191
mahphalke 0:08ba94bc5a30 1192 if (!cal_error) {
mahphalke 0:08ba94bc5a30 1193 printf(EOL "\tCalibration done..." EOL);
mahphalke 0:08ba94bc5a30 1194 } else {
mahphalke 0:08ba94bc5a30 1195 printf(EOL "\tError in calibration!!" EOL);
mahphalke 0:08ba94bc5a30 1196 }
mahphalke 0:08ba94bc5a30 1197
mahphalke 0:08ba94bc5a30 1198 /* Get and print the Offset and Gain coefficient values (setup 0) */
mahphalke 0:08ba94bc5a30 1199 ad7124_read_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 1200 &ad7124_register_map[AD7124_Offset_0 + setup]);
mahphalke 0:08ba94bc5a30 1201 ad7124_read_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 1202 &ad7124_register_map[AD7124_Gain_0 + setup]);
mahphalke 0:08ba94bc5a30 1203
mahphalke 0:08ba94bc5a30 1204 printf("\tOffset %d: 0x%lx" EOL, setup,
mahphalke 0:08ba94bc5a30 1205 ad7124_register_map[AD7124_Offset_0 + setup].value);
mahphalke 0:08ba94bc5a30 1206 printf("\tGain %d: 0x%lx" EOL EOL, setup,
mahphalke 0:08ba94bc5a30 1207 ad7124_register_map[AD7124_Gain_0 + setup].value);
mahphalke 0:08ba94bc5a30 1208 }
mahphalke 0:08ba94bc5a30 1209
mahphalke 0:08ba94bc5a30 1210 /* Disable current channel */
mahphalke 0:08ba94bc5a30 1211 ad7124_register_map[AD7124_Channel_0 + chn_cnt].value &=
mahphalke 0:08ba94bc5a30 1212 (~AD7124_CH_MAP_REG_CH_ENABLE);
mahphalke 0:08ba94bc5a30 1213 if (ad7124_write_register(p_ad7124_dev,
mahphalke 0:08ba94bc5a30 1214 ad7124_register_map[AD7124_Channel_0 + chn_cnt]) != SUCCESS) {
mahphalke 0:08ba94bc5a30 1215 adc_error = true;
mahphalke 0:08ba94bc5a30 1216 break;
mahphalke 0:08ba94bc5a30 1217 }
mahphalke 0:08ba94bc5a30 1218 }
mahphalke 0:08ba94bc5a30 1219 }
mahphalke 0:08ba94bc5a30 1220 }
mahphalke 0:08ba94bc5a30 1221
mahphalke 0:08ba94bc5a30 1222 if (adc_error) {
mahphalke 0:08ba94bc5a30 1223 printf(EOL "\tError in calibration!!" EOL);
mahphalke 0:08ba94bc5a30 1224 } else {
mahphalke 0:08ba94bc5a30 1225 printf(EOL "\tCalibration successful..." EOL);
mahphalke 0:08ba94bc5a30 1226 }
mahphalke 0:08ba94bc5a30 1227
mahphalke 0:08ba94bc5a30 1228 /* Disable calibration error monitoring */
mahphalke 0:08ba94bc5a30 1229 ad7124_register_map[AD7124_Error_En].value &=
mahphalke 0:08ba94bc5a30 1230 (~AD7124_ERREN_REG_ADC_CAL_ERR_EN);
mahphalke 0:08ba94bc5a30 1231 ad7124_write_register(p_ad7124_dev, ad7124_register_map[AD7124_Error_En]);
mahphalke 0:08ba94bc5a30 1232
mahphalke 0:08ba94bc5a30 1233 adi_press_any_key_to_continue();
mahphalke 0:08ba94bc5a30 1234 adi_clear_console();
mahphalke 0:08ba94bc5a30 1235
mahphalke 0:08ba94bc5a30 1236 return MENU_CONTINUE;
mahphalke 0:08ba94bc5a30 1237 }
mahphalke 0:08ba94bc5a30 1238
mahphalke 0:08ba94bc5a30 1239
mahphalke 0:08ba94bc5a30 1240 /*!
mahphalke 0:08ba94bc5a30 1241 * @brief Display header information for 2-wire RTD measurement menu
mahphalke 0:08ba94bc5a30 1242 * @return none
mahphalke 0:08ba94bc5a30 1243 */
mahphalke 0:08ba94bc5a30 1244 void rtd_2wire_menu_header(void)
mahphalke 0:08ba94bc5a30 1245 {
mahphalke 0:08ba94bc5a30 1246 if (strcmp(current_sensor_config, sensor_configs[AD7124_CONFIG_2WIRE_RTD])) {
mahphalke 0:08ba94bc5a30 1247 /* Disable unused sensor channels */
mahphalke 0:08ba94bc5a30 1248 for (uint8_t chn = max_supported_sensors[AD7124_CONFIG_2WIRE_RTD];
mahphalke 0:08ba94bc5a30 1249 chn < NUM_OF_SENSOR_CHANNELS; chn++) {
mahphalke 0:08ba94bc5a30 1250 sensor_enable_status[chn] = false;
mahphalke 0:08ba94bc5a30 1251 }
mahphalke 0:08ba94bc5a30 1252
mahphalke 0:08ba94bc5a30 1253 /* Load the 2-wire RTD device configuration */
mahphalke 0:08ba94bc5a30 1254 init_with_configuration(AD7124_CONFIG_2WIRE_RTD);
mahphalke 0:08ba94bc5a30 1255 }
mahphalke 0:08ba94bc5a30 1256
mahphalke 0:08ba94bc5a30 1257 printf("\t Sensor Channel IOUT0 AIN+ AIN- Enable" EOL);
mahphalke 0:08ba94bc5a30 1258 printf("\t -----------------------------------------------" EOL);
mahphalke 0:08ba94bc5a30 1259 printf("\t RTD1 %d AIN%d AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1260 EOL,
mahphalke 0:08ba94bc5a30 1261 SENSOR_CHANNEL0, RTD1_2WIRE_IOUT0, RTD1_2WIRE_AINP, RTD1_2WIRE_AINM,
mahphalke 0:08ba94bc5a30 1262 status_info[sensor_enable_status[SENSOR_CHANNEL0]]);
mahphalke 0:08ba94bc5a30 1263 printf("\t RTD2 %d AIN%d AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1264 EOL,
mahphalke 0:08ba94bc5a30 1265 SENSOR_CHANNEL1, RTD2_2WIRE_IOUT0, RTD2_2WIRE_AINP, RTD2_2WIRE_AINM,
mahphalke 0:08ba94bc5a30 1266 status_info[sensor_enable_status[SENSOR_CHANNEL1]]);
mahphalke 0:08ba94bc5a30 1267 #if defined(AD7124_8)
mahphalke 0:08ba94bc5a30 1268 printf("\t RTD3 %d AIN%d AIN%d AIN%d %c" EOL,
mahphalke 0:08ba94bc5a30 1269 SENSOR_CHANNEL2, RTD3_2WIRE_IOUT0, RTD3_2WIRE_AINP, RTD3_2WIRE_AINM,
mahphalke 0:08ba94bc5a30 1270 status_info[sensor_enable_status[SENSOR_CHANNEL2]]);
mahphalke 0:08ba94bc5a30 1271 printf("\t RTD4 %d AIN%d AIN%d AIN%d %c" EOL,
mahphalke 0:08ba94bc5a30 1272 SENSOR_CHANNEL3, RTD4_2WIRE_IOUT0, RTD4_2WIRE_AINP, RTD4_2WIRE_AINM,
mahphalke 0:08ba94bc5a30 1273 status_info[sensor_enable_status[SENSOR_CHANNEL3]]);
mahphalke 0:08ba94bc5a30 1274 printf("\t RTD5 %d AIN%d AIN%d AIN%d %c" EOL,
mahphalke 0:08ba94bc5a30 1275 SENSOR_CHANNEL4, RTD5_2WIRE_IOUT0, RTD5_2WIRE_AINP, RTD5_2WIRE_AINM,
mahphalke 0:08ba94bc5a30 1276 status_info[sensor_enable_status[SENSOR_CHANNEL4]]);
mahphalke 0:08ba94bc5a30 1277 #endif
mahphalke 0:08ba94bc5a30 1278 }
mahphalke 0:08ba94bc5a30 1279
mahphalke 0:08ba94bc5a30 1280
mahphalke 0:08ba94bc5a30 1281 /*!
mahphalke 0:08ba94bc5a30 1282 * @brief Display header information for 3-wire RTD measurement menu
mahphalke 0:08ba94bc5a30 1283 * @return none
mahphalke 0:08ba94bc5a30 1284 */
mahphalke 0:08ba94bc5a30 1285 void rtd_3wire_menu_header(void)
mahphalke 0:08ba94bc5a30 1286 {
mahphalke 0:08ba94bc5a30 1287 if (strcmp(current_sensor_config, sensor_configs[AD7124_CONFIG_3WIRE_RTD])) {
mahphalke 0:08ba94bc5a30 1288 /* Disable unused sensor channels */
mahphalke 0:08ba94bc5a30 1289 for (uint8_t chn = max_supported_sensors[AD7124_CONFIG_3WIRE_RTD];
mahphalke 0:08ba94bc5a30 1290 chn < NUM_OF_SENSOR_CHANNELS; chn++) {
mahphalke 0:08ba94bc5a30 1291 sensor_enable_status[chn] = false;
mahphalke 0:08ba94bc5a30 1292 }
mahphalke 0:08ba94bc5a30 1293
mahphalke 0:08ba94bc5a30 1294 /* Load the 3-wire RTD device configuration */
mahphalke 0:08ba94bc5a30 1295 init_with_configuration(AD7124_CONFIG_3WIRE_RTD);
mahphalke 0:08ba94bc5a30 1296 }
mahphalke 0:08ba94bc5a30 1297
mahphalke 0:08ba94bc5a30 1298 printf("\t Sensor Channel IOUT0 IOUT1 AIN+ AIN- Enable" EOL);
mahphalke 0:08ba94bc5a30 1299 printf("\t ------------------------------------------------------" EOL);
mahphalke 0:08ba94bc5a30 1300 printf("\t RTD1 %d AIN%d AIN%d AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1301 EOL,
mahphalke 0:08ba94bc5a30 1302 SENSOR_CHANNEL0, RTD1_3WIRE_IOUT0, RTD1_3WIRE_IOUT1, RTD1_3WIRE_AINP,
mahphalke 0:08ba94bc5a30 1303 RTD1_3WIRE_AINM,
mahphalke 0:08ba94bc5a30 1304 status_info[sensor_enable_status[SENSOR_CHANNEL0]]);
mahphalke 0:08ba94bc5a30 1305 printf("\t RTD2 %d AIN%d AIN%d AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1306 EOL,
mahphalke 0:08ba94bc5a30 1307 SENSOR_CHANNEL1, RTD2_3WIRE_IOUT0, RTD2_3WIRE_IOUT1, RTD2_3WIRE_AINP,
mahphalke 0:08ba94bc5a30 1308 RTD2_3WIRE_AINM,
mahphalke 0:08ba94bc5a30 1309 status_info[sensor_enable_status[SENSOR_CHANNEL1]]);
mahphalke 0:08ba94bc5a30 1310 #if defined(AD7124_8)
mahphalke 0:08ba94bc5a30 1311 printf("\t RTD3 %d AIN%d AIN%d AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1312 EOL,
mahphalke 0:08ba94bc5a30 1313 SENSOR_CHANNEL2, RTD3_3WIRE_IOUT0, RTD3_3WIRE_IOUT1, RTD3_3WIRE_AINP,
mahphalke 0:08ba94bc5a30 1314 RTD3_3WIRE_AINM,
mahphalke 0:08ba94bc5a30 1315 status_info[sensor_enable_status[SENSOR_CHANNEL2]]);
mahphalke 0:08ba94bc5a30 1316 printf("\t RTD4 %d AIN%d AIN%d AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1317 EOL,
mahphalke 0:08ba94bc5a30 1318 SENSOR_CHANNEL3, RTD4_3WIRE_IOUT0, RTD4_3WIRE_IOUT1, RTD4_3WIRE_AINP,
mahphalke 0:08ba94bc5a30 1319 RTD4_3WIRE_AINM,
mahphalke 0:08ba94bc5a30 1320 status_info[sensor_enable_status[SENSOR_CHANNEL3]]);
mahphalke 0:08ba94bc5a30 1321 #endif
mahphalke 0:08ba94bc5a30 1322 }
mahphalke 0:08ba94bc5a30 1323
mahphalke 0:08ba94bc5a30 1324
mahphalke 0:08ba94bc5a30 1325 /*!
mahphalke 0:08ba94bc5a30 1326 * @brief Display header information for 3-wire RTD calibration menu
mahphalke 0:08ba94bc5a30 1327 * @return none
mahphalke 0:08ba94bc5a30 1328 */
mahphalke 0:08ba94bc5a30 1329 void rtd_3wire_calibration_menu_header(void)
mahphalke 0:08ba94bc5a30 1330 {
mahphalke 0:08ba94bc5a30 1331 if (rtd_3wire_calibration_type == MEASURING_EXCITATION_CURRENT) {
mahphalke 0:08ba94bc5a30 1332 if (strcmp(current_sensor_config, sensor_configs[AD7124_CONFIG_3WIRE_RTD])) {
mahphalke 0:08ba94bc5a30 1333 /* Disable unused sensor channels */
mahphalke 0:08ba94bc5a30 1334 for (uint8_t chn = max_supported_sensors[AD7124_CONFIG_3WIRE_RTD];
mahphalke 0:08ba94bc5a30 1335 chn < NUM_OF_SENSOR_CHANNELS; chn++) {
mahphalke 0:08ba94bc5a30 1336 sensor_enable_status[chn] = false;
mahphalke 0:08ba94bc5a30 1337 }
mahphalke 0:08ba94bc5a30 1338
mahphalke 0:08ba94bc5a30 1339 /* Load the 3-wire RTD device configuration */
mahphalke 0:08ba94bc5a30 1340 init_with_configuration(AD7124_CONFIG_3WIRE_RTD);
mahphalke 0:08ba94bc5a30 1341 }
mahphalke 0:08ba94bc5a30 1342
mahphalke 0:08ba94bc5a30 1343 /* For 'Iout measurement type calibration', the additional 2 analog inputs
mahphalke 0:08ba94bc5a30 1344 * are needed for Ref measurement, which reduces number of allowed sensors
mahphalke 0:08ba94bc5a30 1345 * interfaces by 1 */
mahphalke 0:08ba94bc5a30 1346 #if defined(AD7124_8)
mahphalke 0:08ba94bc5a30 1347 /* Chn 0, 1 and 2 are active. Chn3 is disabled */
mahphalke 0:08ba94bc5a30 1348 sensor_enable_status[SENSOR_CHANNEL3] = false;
mahphalke 0:08ba94bc5a30 1349 #else
mahphalke 0:08ba94bc5a30 1350 /* Chn0 is active. Chn1 is disabled */
mahphalke 0:08ba94bc5a30 1351 sensor_enable_status[SENSOR_CHANNEL1] = false;
mahphalke 0:08ba94bc5a30 1352 #endif
mahphalke 0:08ba94bc5a30 1353
mahphalke 0:08ba94bc5a30 1354 printf("\t Calibration Type: Measuring Excitation Current" EOL);
mahphalke 0:08ba94bc5a30 1355 printf("\t -------------------------------------------------------------------"
mahphalke 0:08ba94bc5a30 1356 EOL);
mahphalke 0:08ba94bc5a30 1357 printf("\t Sensor Channel RTD RTD IOUT0 IOUT1 Ref Ref Enable"
mahphalke 0:08ba94bc5a30 1358 EOL);
mahphalke 0:08ba94bc5a30 1359 printf("\t AIN+ AIN- AIN+ AIN- "
mahphalke 0:08ba94bc5a30 1360 EOL);
mahphalke 0:08ba94bc5a30 1361 printf("\t -------------------------------------------------------------------"
mahphalke 0:08ba94bc5a30 1362 EOL);
mahphalke 0:08ba94bc5a30 1363
mahphalke 0:08ba94bc5a30 1364 printf("\t RTD1 %d AIN%d AIN%d AIN%d AIN%d AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1365 EOL,
mahphalke 0:08ba94bc5a30 1366 SENSOR_CHANNEL0,
mahphalke 0:08ba94bc5a30 1367 RTD1_3WIRE_AINP, RTD1_3WIRE_AINM, RTD1_3WIRE_IOUT0,
mahphalke 0:08ba94bc5a30 1368 RTD1_3WIRE_IOUT1, RTD_3WIRE_EXC_MEASURE_AINP, RTD_3WIRE_EXC_MEASURE_AINM,
mahphalke 0:08ba94bc5a30 1369 status_info[sensor_enable_status[SENSOR_CHANNEL0]]);
mahphalke 0:08ba94bc5a30 1370
mahphalke 0:08ba94bc5a30 1371 #if defined(AD7124_8)
mahphalke 0:08ba94bc5a30 1372 printf("\t RTD2 %d AIN%d AIN%d AIN%d AIN%d AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1373 EOL,
mahphalke 0:08ba94bc5a30 1374 SENSOR_CHANNEL1,
mahphalke 0:08ba94bc5a30 1375 RTD2_3WIRE_AINP, RTD2_3WIRE_AINM, RTD2_3WIRE_IOUT0,
mahphalke 0:08ba94bc5a30 1376 RTD2_3WIRE_IOUT1, RTD_3WIRE_EXC_MEASURE_AINP, RTD_3WIRE_EXC_MEASURE_AINM,
mahphalke 0:08ba94bc5a30 1377 status_info[sensor_enable_status[SENSOR_CHANNEL1]]);
mahphalke 0:08ba94bc5a30 1378
mahphalke 0:08ba94bc5a30 1379 printf("\t RTD3 %d AIN%d AIN%d AIN%d AIN%d AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1380 EOL,
mahphalke 0:08ba94bc5a30 1381 SENSOR_CHANNEL2,
mahphalke 0:08ba94bc5a30 1382 RTD3_3WIRE_AINP, RTD3_3WIRE_AINM, RTD3_3WIRE_IOUT0,
mahphalke 0:08ba94bc5a30 1383 RTD3_3WIRE_IOUT1, RTD_3WIRE_EXC_MEASURE_AINP, RTD_3WIRE_EXC_MEASURE_AINM,
mahphalke 0:08ba94bc5a30 1384 status_info[sensor_enable_status[SENSOR_CHANNEL2]]);
mahphalke 0:08ba94bc5a30 1385 #endif
mahphalke 0:08ba94bc5a30 1386 } else {
mahphalke 0:08ba94bc5a30 1387 printf("\t Calibration Type: Chopping Excitation Current " EOL);
mahphalke 0:08ba94bc5a30 1388 printf("\t ------------------------------------------------------" EOL);
mahphalke 0:08ba94bc5a30 1389 rtd_3wire_menu_header();
mahphalke 0:08ba94bc5a30 1390 }
mahphalke 0:08ba94bc5a30 1391
mahphalke 0:08ba94bc5a30 1392 printf("\t -------------------------------------------------------------------"
mahphalke 0:08ba94bc5a30 1393 EOL);
mahphalke 0:08ba94bc5a30 1394 printf("\tNote: For single RTD measurement, connect Rref at the higher side"
mahphalke 0:08ba94bc5a30 1395 EOL);
mahphalke 0:08ba94bc5a30 1396 printf("\t For multiple RTD measurement, connect Rref at the lower side"
mahphalke 0:08ba94bc5a30 1397 EOL);
mahphalke 0:08ba94bc5a30 1398 }
mahphalke 0:08ba94bc5a30 1399
mahphalke 0:08ba94bc5a30 1400
mahphalke 0:08ba94bc5a30 1401 /*!
mahphalke 0:08ba94bc5a30 1402 * @brief Display header information for 4-wire RTD measurement menu
mahphalke 0:08ba94bc5a30 1403 * @return none
mahphalke 0:08ba94bc5a30 1404 */
mahphalke 0:08ba94bc5a30 1405 void rtd_4wire_menu_header(void)
mahphalke 0:08ba94bc5a30 1406 {
mahphalke 0:08ba94bc5a30 1407 if (strcmp(current_sensor_config, sensor_configs[AD7124_CONFIG_4WIRE_RTD])) {
mahphalke 0:08ba94bc5a30 1408 /* Disable unused sensor channels */
mahphalke 0:08ba94bc5a30 1409 for (uint8_t chn = max_supported_sensors[AD7124_CONFIG_4WIRE_RTD];
mahphalke 0:08ba94bc5a30 1410 chn < NUM_OF_SENSOR_CHANNELS; chn++) {
mahphalke 0:08ba94bc5a30 1411 sensor_enable_status[chn] = false;
mahphalke 0:08ba94bc5a30 1412 }
mahphalke 0:08ba94bc5a30 1413
mahphalke 0:08ba94bc5a30 1414 /* Load the 4-wire RTD device configuration */
mahphalke 0:08ba94bc5a30 1415 init_with_configuration(AD7124_CONFIG_4WIRE_RTD);
mahphalke 0:08ba94bc5a30 1416 }
mahphalke 0:08ba94bc5a30 1417
mahphalke 0:08ba94bc5a30 1418 printf("\t Sensor Channel IOUT0 AIN+ AIN- Enable" EOL);
mahphalke 0:08ba94bc5a30 1419 printf("\t -----------------------------------------------" EOL);
mahphalke 0:08ba94bc5a30 1420 printf("\t RTD1 %d AIN%d AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1421 EOL,
mahphalke 0:08ba94bc5a30 1422 SENSOR_CHANNEL0, RTD1_4WIRE_IOUT0, RTD1_4WIRE_AINP, RTD1_4WIRE_AINM,
mahphalke 0:08ba94bc5a30 1423 status_info[sensor_enable_status[SENSOR_CHANNEL0]]);
mahphalke 0:08ba94bc5a30 1424 printf("\t RTD2 %d AIN%d AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1425 EOL,
mahphalke 0:08ba94bc5a30 1426 SENSOR_CHANNEL1, RTD2_4WIRE_IOUT0, RTD2_4WIRE_AINP, RTD2_4WIRE_AINM,
mahphalke 0:08ba94bc5a30 1427 status_info[sensor_enable_status[SENSOR_CHANNEL1]]);
mahphalke 0:08ba94bc5a30 1428 #if defined(AD7124_8)
mahphalke 0:08ba94bc5a30 1429 printf("\t RTD3 %d AIN%d AIN%d AIN%d %c" EOL,
mahphalke 0:08ba94bc5a30 1430 SENSOR_CHANNEL2, RTD3_4WIRE_IOUT0, RTD3_4WIRE_AINP, RTD3_4WIRE_AINM,
mahphalke 0:08ba94bc5a30 1431 status_info[sensor_enable_status[SENSOR_CHANNEL2]]);
mahphalke 0:08ba94bc5a30 1432 printf("\t RTD4 %d AIN%d AIN%d AIN%d %c" EOL,
mahphalke 0:08ba94bc5a30 1433 SENSOR_CHANNEL3, RTD4_4WIRE_IOUT0, RTD4_4WIRE_AINP, RTD4_4WIRE_AINM,
mahphalke 0:08ba94bc5a30 1434 status_info[sensor_enable_status[SENSOR_CHANNEL3]]);
mahphalke 0:08ba94bc5a30 1435 printf("\t RTD5 %d AIN%d AIN%d AIN%d %c" EOL,
mahphalke 0:08ba94bc5a30 1436 SENSOR_CHANNEL4, RTD5_4WIRE_IOUT0, RTD5_4WIRE_AINP, RTD5_4WIRE_AINM,
mahphalke 0:08ba94bc5a30 1437 status_info[sensor_enable_status[SENSOR_CHANNEL4]]);
mahphalke 0:08ba94bc5a30 1438 #endif
mahphalke 0:08ba94bc5a30 1439 }
mahphalke 0:08ba94bc5a30 1440
mahphalke 0:08ba94bc5a30 1441
mahphalke 0:08ba94bc5a30 1442 /*!
mahphalke 0:08ba94bc5a30 1443 * @brief Display header information for NTC thermistor measurement menu
mahphalke 0:08ba94bc5a30 1444 * @return none
mahphalke 0:08ba94bc5a30 1445 */
mahphalke 0:08ba94bc5a30 1446 void ntc_thermistor_menu_header(void)
mahphalke 0:08ba94bc5a30 1447 {
mahphalke 0:08ba94bc5a30 1448 if (strcmp(current_sensor_config, sensor_configs[AD7124_CONFIG_THERMISTOR])) {
mahphalke 0:08ba94bc5a30 1449 /* Disable unused sensor channels */
mahphalke 0:08ba94bc5a30 1450 for (uint8_t chn = max_supported_sensors[AD7124_CONFIG_THERMISTOR];
mahphalke 0:08ba94bc5a30 1451 chn < NUM_OF_SENSOR_CHANNELS; chn++) {
mahphalke 0:08ba94bc5a30 1452 sensor_enable_status[chn] = false;
mahphalke 0:08ba94bc5a30 1453 }
mahphalke 0:08ba94bc5a30 1454
mahphalke 0:08ba94bc5a30 1455 /* Load the Thermistor device configuration */
mahphalke 0:08ba94bc5a30 1456 init_with_configuration(AD7124_CONFIG_THERMISTOR);
mahphalke 0:08ba94bc5a30 1457 }
mahphalke 0:08ba94bc5a30 1458
mahphalke 0:08ba94bc5a30 1459 printf("\t Sensor Channel AIN+ AIN- Enable" EOL);
mahphalke 0:08ba94bc5a30 1460 printf("\t ---------------------------------------" EOL);
mahphalke 0:08ba94bc5a30 1461 printf("\t NTC1 %d AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1462 EOL,
mahphalke 0:08ba94bc5a30 1463 SENSOR_CHANNEL0, NTC1_THERMISTOR_AINP, NTC1_THERMISTOR_AINM,
mahphalke 0:08ba94bc5a30 1464 status_info[sensor_enable_status[SENSOR_CHANNEL0]]);
mahphalke 0:08ba94bc5a30 1465 printf("\t NTC2 %d AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1466 EOL,
mahphalke 0:08ba94bc5a30 1467 SENSOR_CHANNEL1, NTC2_THERMISTOR_AINP, NTC2_THERMISTOR_AINM,
mahphalke 0:08ba94bc5a30 1468 status_info[sensor_enable_status[SENSOR_CHANNEL1]]);
mahphalke 0:08ba94bc5a30 1469 printf("\t NTC3 %d AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1470 EOL,
mahphalke 0:08ba94bc5a30 1471 SENSOR_CHANNEL2, NTC3_THERMISTOR_AINP, NTC3_THERMISTOR_AINM,
mahphalke 0:08ba94bc5a30 1472 status_info[sensor_enable_status[SENSOR_CHANNEL2]]);
mahphalke 0:08ba94bc5a30 1473 printf("\t NTC4 %d AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1474 EOL,
mahphalke 0:08ba94bc5a30 1475 SENSOR_CHANNEL3, NTC4_THERMISTOR_AINP, NTC4_THERMISTOR_AINM,
mahphalke 0:08ba94bc5a30 1476 status_info[sensor_enable_status[SENSOR_CHANNEL3]]);
mahphalke 0:08ba94bc5a30 1477 #if defined(AD7124_8)
mahphalke 0:08ba94bc5a30 1478 printf("\t NTC5 %d AIN%d AIN%d %c" EOL,
mahphalke 0:08ba94bc5a30 1479 SENSOR_CHANNEL4, NTC5_THERMISTOR_AINP, NTC5_THERMISTOR_AINM,
mahphalke 0:08ba94bc5a30 1480 status_info[sensor_enable_status[SENSOR_CHANNEL4]]);
mahphalke 0:08ba94bc5a30 1481 printf("\t NTC6 %d AIN%d AIN%d %c" EOL,
mahphalke 0:08ba94bc5a30 1482 SENSOR_CHANNEL5, NTC6_THERMISTOR_AINP, NTC6_THERMISTOR_AINM,
mahphalke 0:08ba94bc5a30 1483 status_info[sensor_enable_status[SENSOR_CHANNEL5]]);
mahphalke 0:08ba94bc5a30 1484 printf("\t NTC7 %d AIN%d AIN%d %c" EOL,
mahphalke 0:08ba94bc5a30 1485 SENSOR_CHANNEL6, NTC7_THERMISTOR_AINP, NTC7_THERMISTOR_AINM,
mahphalke 0:08ba94bc5a30 1486 status_info[sensor_enable_status[SENSOR_CHANNEL6]]);
mahphalke 0:08ba94bc5a30 1487 printf("\t NTC8 %d AIN%d AIN%d %c" EOL,
mahphalke 0:08ba94bc5a30 1488 SENSOR_CHANNEL7, NTC8_THERMISTOR_AINP, NTC8_THERMISTOR_AINM,
mahphalke 0:08ba94bc5a30 1489 status_info[sensor_enable_status[SENSOR_CHANNEL7]]);
mahphalke 0:08ba94bc5a30 1490 #endif
mahphalke 0:08ba94bc5a30 1491 }
mahphalke 0:08ba94bc5a30 1492
mahphalke 0:08ba94bc5a30 1493
mahphalke 0:08ba94bc5a30 1494 /*!
mahphalke 0:08ba94bc5a30 1495 * @brief Display header information for NTC thermistor measurement menu
mahphalke 0:08ba94bc5a30 1496 * @return none
mahphalke 0:08ba94bc5a30 1497 */
mahphalke 0:08ba94bc5a30 1498 void thermocouple_menu_header(void)
mahphalke 0:08ba94bc5a30 1499 {
mahphalke 0:08ba94bc5a30 1500 if (strcmp(current_sensor_config, sensor_configs[AD7124_CONFIG_THERMOCOUPLE])) {
mahphalke 0:08ba94bc5a30 1501 /* Disable unused sensor channels */
mahphalke 0:08ba94bc5a30 1502 for (uint8_t chn = max_supported_sensors[AD7124_CONFIG_THERMOCOUPLE];
mahphalke 0:08ba94bc5a30 1503 chn < NUM_OF_SENSOR_CHANNELS; chn++) {
mahphalke 0:08ba94bc5a30 1504 sensor_enable_status[chn] = false;
mahphalke 0:08ba94bc5a30 1505 }
mahphalke 0:08ba94bc5a30 1506
mahphalke 0:08ba94bc5a30 1507 /* Select CJC sensor */
mahphalke 0:08ba94bc5a30 1508 select_cjc_sensor(current_cjc_sensor);
mahphalke 0:08ba94bc5a30 1509
mahphalke 0:08ba94bc5a30 1510 /* Load the Thermocouple device configuration */
mahphalke 0:08ba94bc5a30 1511 init_with_configuration(AD7124_CONFIG_THERMOCOUPLE);
mahphalke 0:08ba94bc5a30 1512 }
mahphalke 0:08ba94bc5a30 1513
mahphalke 0:08ba94bc5a30 1514 printf("\t Sensor Channel IOUT0 AIN+ AIN- Enable" EOL);
mahphalke 0:08ba94bc5a30 1515 printf("\t ----------------------------------------------" EOL);
mahphalke 0:08ba94bc5a30 1516 printf("\t TC1 %d - AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1517 EOL,
mahphalke 0:08ba94bc5a30 1518 SENSOR_CHANNEL0, THERMOCOUPLE1_AINP, THERMOCOUPLE1_AINM,
mahphalke 0:08ba94bc5a30 1519 status_info[sensor_enable_status[SENSOR_CHANNEL0]]);
mahphalke 0:08ba94bc5a30 1520 printf("\t TC2 %d - AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1521 EOL,
mahphalke 0:08ba94bc5a30 1522 SENSOR_CHANNEL1, THERMOCOUPLE2_AINP, THERMOCOUPLE2_AINM,
mahphalke 0:08ba94bc5a30 1523 status_info[sensor_enable_status[SENSOR_CHANNEL1]]);
mahphalke 0:08ba94bc5a30 1524 #if defined(AD7124_8)
mahphalke 0:08ba94bc5a30 1525 printf("\t TC3 %d - AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1526 EOL,
mahphalke 0:08ba94bc5a30 1527 SENSOR_CHANNEL2, THERMOCOUPLE3_AINP, THERMOCOUPLE3_AINM,
mahphalke 0:08ba94bc5a30 1528 status_info[sensor_enable_status[SENSOR_CHANNEL2]]);
mahphalke 0:08ba94bc5a30 1529 printf("\t TC4 %d - AIN%d AIN%d %c"
mahphalke 0:08ba94bc5a30 1530 EOL,
mahphalke 0:08ba94bc5a30 1531 SENSOR_CHANNEL3, THERMOCOUPLE4_AINP, THERMOCOUPLE4_AINM,
mahphalke 0:08ba94bc5a30 1532 status_info[sensor_enable_status[SENSOR_CHANNEL3]]);
mahphalke 0:08ba94bc5a30 1533 printf("\t TC5 %d - AIN%d AIN%d %c" EOL,
mahphalke 0:08ba94bc5a30 1534 SENSOR_CHANNEL4, THERMOCOUPLE5_AINP, THERMOCOUPLE5_AINM,
mahphalke 0:08ba94bc5a30 1535 status_info[sensor_enable_status[SENSOR_CHANNEL4]]);
mahphalke 0:08ba94bc5a30 1536 printf("\t TC6 %d - AIN%d AIN%d %c" EOL,
mahphalke 0:08ba94bc5a30 1537 SENSOR_CHANNEL5, THERMOCOUPLE6_AINP, THERMOCOUPLE6_AINM,
mahphalke 0:08ba94bc5a30 1538 status_info[sensor_enable_status[SENSOR_CHANNEL5]]);
mahphalke 0:08ba94bc5a30 1539 #endif
mahphalke 0:08ba94bc5a30 1540
mahphalke 0:08ba94bc5a30 1541 printf(EOL "\t Current CJC: %s" EOL, cjc_sensor_names[current_cjc_sensor]);
mahphalke 0:08ba94bc5a30 1542 printf("\t ----------------------------------------------" EOL);
mahphalke 0:08ba94bc5a30 1543
mahphalke 0:08ba94bc5a30 1544 switch (current_cjc_sensor) {
mahphalke 0:08ba94bc5a30 1545 case PT100_4WIRE_RTD:
mahphalke 0:08ba94bc5a30 1546 case PT1000_4WIRE_RTD:
mahphalke 0:08ba94bc5a30 1547 printf("\t CJC %d AIN%d AIN%d AIN%d Y"
mahphalke 0:08ba94bc5a30 1548 EOL,
mahphalke 0:08ba94bc5a30 1549 CJC_RTD_CHN,
mahphalke 0:08ba94bc5a30 1550 CJC_4WIRE_RTD_IOUT0,
mahphalke 0:08ba94bc5a30 1551 CJC_4WIRE_RTD_AINP,
mahphalke 0:08ba94bc5a30 1552 CJC_4WIRE_RTD_AINM);
mahphalke 0:08ba94bc5a30 1553 break;
mahphalke 0:08ba94bc5a30 1554
mahphalke 0:08ba94bc5a30 1555 case THERMISTOR_PTC_KY81_110:
mahphalke 0:08ba94bc5a30 1556 printf("\t CJC %d AIN%d AIN%d AIN%d Y"
mahphalke 0:08ba94bc5a30 1557 EOL,
mahphalke 0:08ba94bc5a30 1558 CJC_THERMISTOR_CHN,
mahphalke 0:08ba94bc5a30 1559 CJC_PTC_THERMISTOR_IOUT0,
mahphalke 0:08ba94bc5a30 1560 CJC_PTC_THERMISTOR_AINP,
mahphalke 0:08ba94bc5a30 1561 CJC_PTC_THERMISTOR_AINM);
mahphalke 0:08ba94bc5a30 1562 break;
mahphalke 0:08ba94bc5a30 1563
mahphalke 0:08ba94bc5a30 1564 default:
mahphalke 0:08ba94bc5a30 1565 printf("\t No CJC selected!!" EOL);
mahphalke 0:08ba94bc5a30 1566 break;
mahphalke 0:08ba94bc5a30 1567 }
mahphalke 0:08ba94bc5a30 1568 }
mahphalke 0:08ba94bc5a30 1569
mahphalke 0:08ba94bc5a30 1570
mahphalke 0:08ba94bc5a30 1571 /*!
mahphalke 0:08ba94bc5a30 1572 * @brief Display header information for ADC calibration menu
mahphalke 0:08ba94bc5a30 1573 * @return none
mahphalke 0:08ba94bc5a30 1574 */
mahphalke 0:08ba94bc5a30 1575 void adc_calibration_menu_header(void)
mahphalke 0:08ba94bc5a30 1576 {
mahphalke 0:08ba94bc5a30 1577 printf("\tCurrent Config: %s" EOL, current_sensor_config);
mahphalke 0:08ba94bc5a30 1578 printf("\t----------------------------------------------------" EOL);
mahphalke 0:08ba94bc5a30 1579 printf("\t CHN0: %c | CHN1: %c | CHN2: %c | CHN3: %c" EOL
mahphalke 0:08ba94bc5a30 1580 "\t CHN4: %c | CHN5: %c | CHN6: %c | CHN7: %c" EOL,
mahphalke 0:08ba94bc5a30 1581 status_info[sensor_enable_status[SENSOR_CHANNEL0]],
mahphalke 0:08ba94bc5a30 1582 status_info[sensor_enable_status[SENSOR_CHANNEL1]],
mahphalke 0:08ba94bc5a30 1583 status_info[sensor_enable_status[SENSOR_CHANNEL2]],
mahphalke 0:08ba94bc5a30 1584 status_info[sensor_enable_status[SENSOR_CHANNEL3]],
mahphalke 0:08ba94bc5a30 1585 status_info[sensor_enable_status[SENSOR_CHANNEL4]],
mahphalke 0:08ba94bc5a30 1586 status_info[sensor_enable_status[SENSOR_CHANNEL5]],
mahphalke 0:08ba94bc5a30 1587 status_info[sensor_enable_status[SENSOR_CHANNEL6]],
mahphalke 0:08ba94bc5a30 1588 status_info[sensor_enable_status[SENSOR_CHANNEL7]]);
mahphalke 0:08ba94bc5a30 1589 }
mahphalke 0:08ba94bc5a30 1590
mahphalke 0:08ba94bc5a30 1591
mahphalke 0:08ba94bc5a30 1592 /*!
mahphalke 0:08ba94bc5a30 1593 * @brief Display header information for main menu
mahphalke 0:08ba94bc5a30 1594 * @return none
mahphalke 0:08ba94bc5a30 1595 */
mahphalke 0:08ba94bc5a30 1596 void main_menu_header(void)
mahphalke 0:08ba94bc5a30 1597 {
mahphalke 0:08ba94bc5a30 1598 printf("\tCurrent Config: %s,", current_sensor_config);
mahphalke 0:08ba94bc5a30 1599 printf(" Active Device: %s" EOL, ACTIVE_DEVICE);
mahphalke 0:08ba94bc5a30 1600 }
mahphalke 0:08ba94bc5a30 1601
mahphalke 0:08ba94bc5a30 1602
mahphalke 0:08ba94bc5a30 1603 /*!
mahphalke 0:08ba94bc5a30 1604 * @brief Display 2-wire RTD measurement main menu
mahphalke 0:08ba94bc5a30 1605 * @param menu_id[in]- Optional menu ID
mahphalke 0:08ba94bc5a30 1606 * @return MENU_CONTINUE
mahphalke 0:08ba94bc5a30 1607 */
mahphalke 0:08ba94bc5a30 1608 int32_t display_2wire_rtd_menu(uint32_t menu_id)
mahphalke 0:08ba94bc5a30 1609 {
mahphalke 0:08ba94bc5a30 1610 return adi_do_console_menu(&rtd_2wire_menu);
mahphalke 0:08ba94bc5a30 1611 }
mahphalke 0:08ba94bc5a30 1612
mahphalke 0:08ba94bc5a30 1613
mahphalke 0:08ba94bc5a30 1614 /*!
mahphalke 0:08ba94bc5a30 1615 * @brief Display 3-wire RTD measurement main menu
mahphalke 0:08ba94bc5a30 1616 * @param menu_id[in]- Optional menu ID
mahphalke 0:08ba94bc5a30 1617 * @return MENU_CONTINUE
mahphalke 0:08ba94bc5a30 1618 */
mahphalke 0:08ba94bc5a30 1619 int32_t display_3wire_rtd_menu(uint32_t menu_id)
mahphalke 0:08ba94bc5a30 1620 {
mahphalke 0:08ba94bc5a30 1621 return adi_do_console_menu(&rtd_3wire_menu);
mahphalke 0:08ba94bc5a30 1622 }
mahphalke 0:08ba94bc5a30 1623
mahphalke 0:08ba94bc5a30 1624
mahphalke 0:08ba94bc5a30 1625 /*!
mahphalke 0:08ba94bc5a30 1626 * @brief Display 3-wire RTD calibration main menu
mahphalke 0:08ba94bc5a30 1627 * @param menu_id[in]- Optional menu ID
mahphalke 0:08ba94bc5a30 1628 * @return MENU_CONTINUE
mahphalke 0:08ba94bc5a30 1629 */
mahphalke 0:08ba94bc5a30 1630 int32_t display_3wire_rtd_calibration_menu(uint32_t menu_id)
mahphalke 0:08ba94bc5a30 1631 {
mahphalke 0:08ba94bc5a30 1632 return adi_do_console_menu(&rtd_3wire_calibration_menu);
mahphalke 0:08ba94bc5a30 1633 }
mahphalke 0:08ba94bc5a30 1634
mahphalke 0:08ba94bc5a30 1635
mahphalke 0:08ba94bc5a30 1636 /*!
mahphalke 0:08ba94bc5a30 1637 * @brief Display 4-wire RTD measurement main menu
mahphalke 0:08ba94bc5a30 1638 * @param menu_id[in]- Optional menu ID
mahphalke 0:08ba94bc5a30 1639 * @return MENU_CONTINUE
mahphalke 0:08ba94bc5a30 1640 */
mahphalke 0:08ba94bc5a30 1641 int32_t display_4wire_rtd_menu(uint32_t menu_id)
mahphalke 0:08ba94bc5a30 1642 {
mahphalke 0:08ba94bc5a30 1643 return adi_do_console_menu(&rtd_4wire_menu);
mahphalke 0:08ba94bc5a30 1644 }
mahphalke 0:08ba94bc5a30 1645
mahphalke 0:08ba94bc5a30 1646
mahphalke 0:08ba94bc5a30 1647 /*!
mahphalke 0:08ba94bc5a30 1648 * @brief Display thermoucouple measurement main menu
mahphalke 0:08ba94bc5a30 1649 * @param menu_id[in]- Optional menu ID
mahphalke 0:08ba94bc5a30 1650 * @return MENU_CONTINUE
mahphalke 0:08ba94bc5a30 1651 */
mahphalke 0:08ba94bc5a30 1652 int32_t display_thermocouple_menu(uint32_t menu_id)
mahphalke 0:08ba94bc5a30 1653 {
mahphalke 0:08ba94bc5a30 1654 return adi_do_console_menu(&thermocouple_menu);
mahphalke 0:08ba94bc5a30 1655 }
mahphalke 0:08ba94bc5a30 1656
mahphalke 0:08ba94bc5a30 1657
mahphalke 0:08ba94bc5a30 1658 /*!
mahphalke 0:08ba94bc5a30 1659 * @brief Display thermistor measurement main menu
mahphalke 0:08ba94bc5a30 1660 * @param menu_id[in]- Optional menu ID
mahphalke 0:08ba94bc5a30 1661 * @return MENU_CONTINUE
mahphalke 0:08ba94bc5a30 1662 */
mahphalke 0:08ba94bc5a30 1663 int32_t display_ntc_thermistor_menu(uint32_t menu_id)
mahphalke 0:08ba94bc5a30 1664 {
mahphalke 0:08ba94bc5a30 1665 return adi_do_console_menu(&ntc_thermistor_menu);
mahphalke 0:08ba94bc5a30 1666 }
mahphalke 0:08ba94bc5a30 1667
mahphalke 0:08ba94bc5a30 1668
mahphalke 0:08ba94bc5a30 1669 /*!
mahphalke 0:08ba94bc5a30 1670 * @brief Display ADC calibration main menu
mahphalke 0:08ba94bc5a30 1671 * @param menu_id[in]- Optional menu ID
mahphalke 0:08ba94bc5a30 1672 * @return MENU_CONTINUE
mahphalke 0:08ba94bc5a30 1673 */
mahphalke 0:08ba94bc5a30 1674 int32_t display_adc_calibration_menu(uint32_t menu_id)
mahphalke 0:08ba94bc5a30 1675 {
mahphalke 0:08ba94bc5a30 1676 return adi_do_console_menu(&adc_calibration_menu);
mahphalke 0:08ba94bc5a30 1677 }
mahphalke 0:08ba94bc5a30 1678
mahphalke 0:08ba94bc5a30 1679
mahphalke 0:08ba94bc5a30 1680 /* =========== Menu Declarations =========== */
mahphalke 0:08ba94bc5a30 1681
mahphalke 0:08ba94bc5a30 1682 static console_menu_item rtd_2wire_menu_items[] = {
mahphalke 0:08ba94bc5a30 1683 { "Enable/Disable RTD1", '1', enable_disable_sensor, SENSOR_CHANNEL0 },
mahphalke 0:08ba94bc5a30 1684 { "Enable/Disable RTD2", '2', enable_disable_sensor, SENSOR_CHANNEL1 },
mahphalke 0:08ba94bc5a30 1685 #if defined(AD7124_8)
mahphalke 0:08ba94bc5a30 1686 { "Enable/Disable RTD3", '3', enable_disable_sensor, SENSOR_CHANNEL2 },
mahphalke 0:08ba94bc5a30 1687 { "Enable/Disable RTD4", '4', enable_disable_sensor, SENSOR_CHANNEL3 },
mahphalke 0:08ba94bc5a30 1688 { "Enable/Disable RTD5", '5', enable_disable_sensor, SENSOR_CHANNEL4 },
mahphalke 0:08ba94bc5a30 1689 #endif
mahphalke 0:08ba94bc5a30 1690 { " " },
mahphalke 0:08ba94bc5a30 1691 { "Perform Measurement", 'M', perform_rtd_measurement, AD7124_CONFIG_2WIRE_RTD },
mahphalke 0:08ba94bc5a30 1692 };
mahphalke 0:08ba94bc5a30 1693
mahphalke 0:08ba94bc5a30 1694 console_menu rtd_2wire_menu = {
mahphalke 0:08ba94bc5a30 1695 .title = "2-Wire RTD Measurement",
mahphalke 0:08ba94bc5a30 1696 .items = rtd_2wire_menu_items,
mahphalke 0:08ba94bc5a30 1697 .itemCount = ARRAY_SIZE(rtd_2wire_menu_items),
mahphalke 0:08ba94bc5a30 1698 .headerItem = rtd_2wire_menu_header,
mahphalke 0:08ba94bc5a30 1699 .footerItem = NULL,
mahphalke 0:08ba94bc5a30 1700 .enableEscapeKey = true
mahphalke 0:08ba94bc5a30 1701 };
mahphalke 0:08ba94bc5a30 1702
mahphalke 0:08ba94bc5a30 1703 static console_menu_item rtd_3wire_menu_items[] = {
mahphalke 0:08ba94bc5a30 1704 { "Enable/Disable RTD1", '1', enable_disable_sensor, SENSOR_CHANNEL0 },
mahphalke 0:08ba94bc5a30 1705 { "Enable/Disable RTD2", '2', enable_disable_sensor, SENSOR_CHANNEL1 },
mahphalke 0:08ba94bc5a30 1706 #if defined(AD7124_8)
mahphalke 0:08ba94bc5a30 1707 { "Enable/Disable RTD3", '3', enable_disable_sensor, SENSOR_CHANNEL2 },
mahphalke 0:08ba94bc5a30 1708 { "Enable/Disable RTD4", '4', enable_disable_sensor, SENSOR_CHANNEL3 },
mahphalke 0:08ba94bc5a30 1709 #endif
mahphalke 0:08ba94bc5a30 1710 { " " },
mahphalke 0:08ba94bc5a30 1711 { "Calibrate RTD and Perform Measurement", 'A', display_3wire_rtd_calibration_menu },
mahphalke 0:08ba94bc5a30 1712 { " " },
mahphalke 0:08ba94bc5a30 1713 { "Perform RTD Measurement (no calibration)", 'B', perform_rtd_measurement, AD7124_CONFIG_3WIRE_RTD },
mahphalke 0:08ba94bc5a30 1714 };
mahphalke 0:08ba94bc5a30 1715
mahphalke 0:08ba94bc5a30 1716 console_menu rtd_3wire_menu = {
mahphalke 0:08ba94bc5a30 1717 .title = "3-Wire RTD Measurement",
mahphalke 0:08ba94bc5a30 1718 .items = rtd_3wire_menu_items,
mahphalke 0:08ba94bc5a30 1719 .itemCount = ARRAY_SIZE(rtd_3wire_menu_items),
mahphalke 0:08ba94bc5a30 1720 .headerItem = rtd_3wire_menu_header,
mahphalke 0:08ba94bc5a30 1721 .footerItem = NULL,
mahphalke 0:08ba94bc5a30 1722 .enableEscapeKey = true
mahphalke 0:08ba94bc5a30 1723 };
mahphalke 0:08ba94bc5a30 1724
mahphalke 0:08ba94bc5a30 1725 static console_menu_item rtd_3wire_calibration_menu_items[] = {
mahphalke 0:08ba94bc5a30 1726 { "Change type to Measuring Excitation Current", 'A', change_3wire_rtd_calibration_type, MEASURING_EXCITATION_CURRENT },
mahphalke 0:08ba94bc5a30 1727 { "Change type to Chopping Excitation Current", 'B', change_3wire_rtd_calibration_type, CHOPPING_EXCITATION_CURRENT },
mahphalke 0:08ba94bc5a30 1728 { " " },
mahphalke 0:08ba94bc5a30 1729 { "Perform Measurement", 'M', calibrate_and_measure_3wire_rtd },
mahphalke 0:08ba94bc5a30 1730 };
mahphalke 0:08ba94bc5a30 1731
mahphalke 0:08ba94bc5a30 1732 console_menu rtd_3wire_calibration_menu = {
mahphalke 0:08ba94bc5a30 1733 .title = "Calibrate 3-Wire RTD Excitation Source",
mahphalke 0:08ba94bc5a30 1734 .items = rtd_3wire_calibration_menu_items,
mahphalke 0:08ba94bc5a30 1735 .itemCount = ARRAY_SIZE(rtd_3wire_calibration_menu_items),
mahphalke 0:08ba94bc5a30 1736 .headerItem = rtd_3wire_calibration_menu_header,
mahphalke 0:08ba94bc5a30 1737 .footerItem = NULL,
mahphalke 0:08ba94bc5a30 1738 .enableEscapeKey = true
mahphalke 0:08ba94bc5a30 1739 };
mahphalke 0:08ba94bc5a30 1740
mahphalke 0:08ba94bc5a30 1741 static console_menu_item rtd_4wire_menu_items[] = {
mahphalke 0:08ba94bc5a30 1742 { "Enable/Disable RTD1", '1', enable_disable_sensor, SENSOR_CHANNEL0 },
mahphalke 0:08ba94bc5a30 1743 { "Enable/Disable RTD2", '2', enable_disable_sensor, SENSOR_CHANNEL1 },
mahphalke 0:08ba94bc5a30 1744 #if defined(AD7124_8)
mahphalke 0:08ba94bc5a30 1745 { "Enable/Disable RTD3", '3', enable_disable_sensor, SENSOR_CHANNEL2 },
mahphalke 0:08ba94bc5a30 1746 { "Enable/Disable RTD4", '4', enable_disable_sensor, SENSOR_CHANNEL3 },
mahphalke 0:08ba94bc5a30 1747 { "Enable/Disable RTD5", '5', enable_disable_sensor, SENSOR_CHANNEL4 },
mahphalke 0:08ba94bc5a30 1748 #endif
mahphalke 0:08ba94bc5a30 1749 { " " },
mahphalke 0:08ba94bc5a30 1750 { "Perform Measurement", 'M', perform_rtd_measurement, AD7124_CONFIG_4WIRE_RTD },
mahphalke 0:08ba94bc5a30 1751 };
mahphalke 0:08ba94bc5a30 1752
mahphalke 0:08ba94bc5a30 1753 console_menu rtd_4wire_menu = {
mahphalke 0:08ba94bc5a30 1754 .title = "4-Wire RTD Measurement",
mahphalke 0:08ba94bc5a30 1755 .items = rtd_4wire_menu_items,
mahphalke 0:08ba94bc5a30 1756 .itemCount = ARRAY_SIZE(rtd_4wire_menu_items),
mahphalke 0:08ba94bc5a30 1757 .headerItem = rtd_4wire_menu_header,
mahphalke 0:08ba94bc5a30 1758 .footerItem = NULL,
mahphalke 0:08ba94bc5a30 1759 .enableEscapeKey = true
mahphalke 0:08ba94bc5a30 1760 };
mahphalke 0:08ba94bc5a30 1761
mahphalke 0:08ba94bc5a30 1762 static console_menu_item ntc_thermistor_menu_items[] = {
mahphalke 0:08ba94bc5a30 1763 { "Enable/Disable NTC1", '1', enable_disable_sensor, SENSOR_CHANNEL0 },
mahphalke 0:08ba94bc5a30 1764 { "Enable/Disable NTC2", '2', enable_disable_sensor, SENSOR_CHANNEL1 },
mahphalke 0:08ba94bc5a30 1765 { "Enable/Disable NTC3", '3', enable_disable_sensor, SENSOR_CHANNEL2 },
mahphalke 0:08ba94bc5a30 1766 { "Enable/Disable NTC4", '4', enable_disable_sensor, SENSOR_CHANNEL3 },
mahphalke 0:08ba94bc5a30 1767 #if defined(AD7124_8)
mahphalke 0:08ba94bc5a30 1768 { "Enable/Disable NTC5", '5', enable_disable_sensor, SENSOR_CHANNEL4 },
mahphalke 0:08ba94bc5a30 1769 { "Enable/Disable NTC6", '6', enable_disable_sensor, SENSOR_CHANNEL5 },
mahphalke 0:08ba94bc5a30 1770 { "Enable/Disable NTC7", '7', enable_disable_sensor, SENSOR_CHANNEL6 },
mahphalke 0:08ba94bc5a30 1771 { "Enable/Disable NTC8", '8', enable_disable_sensor, SENSOR_CHANNEL7 },
mahphalke 0:08ba94bc5a30 1772 #endif
mahphalke 0:08ba94bc5a30 1773 { " " },
mahphalke 0:08ba94bc5a30 1774 { "Perform Measurement", 'M', perform_ntc_thermistor_measurement, AD7124_CONFIG_THERMISTOR },
mahphalke 0:08ba94bc5a30 1775 };
mahphalke 0:08ba94bc5a30 1776
mahphalke 0:08ba94bc5a30 1777 console_menu ntc_thermistor_menu = {
mahphalke 0:08ba94bc5a30 1778 .title = "NTC Thermistor Measurement",
mahphalke 0:08ba94bc5a30 1779 .items = ntc_thermistor_menu_items,
mahphalke 0:08ba94bc5a30 1780 .itemCount = ARRAY_SIZE(ntc_thermistor_menu_items),
mahphalke 0:08ba94bc5a30 1781 .headerItem = ntc_thermistor_menu_header,
mahphalke 0:08ba94bc5a30 1782 .footerItem = NULL,
mahphalke 0:08ba94bc5a30 1783 .enableEscapeKey = true
mahphalke 0:08ba94bc5a30 1784 };
mahphalke 0:08ba94bc5a30 1785
mahphalke 0:08ba94bc5a30 1786 static console_menu_item thermocouple_menu_items[] = {
mahphalke 0:08ba94bc5a30 1787 { "Enable/Disable TC1", '1', enable_disable_sensor, SENSOR_CHANNEL0 },
mahphalke 0:08ba94bc5a30 1788 { "Enable/Disable TC2", '2', enable_disable_sensor, SENSOR_CHANNEL1 },
mahphalke 0:08ba94bc5a30 1789 #if defined(AD7124_8)
mahphalke 0:08ba94bc5a30 1790 { "Enable/Disable TC3", '3', enable_disable_sensor, SENSOR_CHANNEL2 },
mahphalke 0:08ba94bc5a30 1791 { "Enable/Disable TC4", '4', enable_disable_sensor, SENSOR_CHANNEL3 },
mahphalke 0:08ba94bc5a30 1792 { "Enable/Disable TC5", '5', enable_disable_sensor, SENSOR_CHANNEL4 },
mahphalke 0:08ba94bc5a30 1793 { "Enable/Disable TC6", '6', enable_disable_sensor, SENSOR_CHANNEL5 },
mahphalke 0:08ba94bc5a30 1794 #endif
mahphalke 0:08ba94bc5a30 1795 { " " },
mahphalke 0:08ba94bc5a30 1796 { "Select CJC (PT100 4-wire RTD)", '7', select_cjc_sensor, PT100_4WIRE_RTD },
mahphalke 0:08ba94bc5a30 1797 { "Select CJC (PTC KY81/110 Thermistor)", '8', select_cjc_sensor, THERMISTOR_PTC_KY81_110 },
mahphalke 0:08ba94bc5a30 1798 { "Select CJC (PT1000 4-wire RTD)", '9', select_cjc_sensor, PT1000_4WIRE_RTD },
mahphalke 0:08ba94bc5a30 1799 { " " },
mahphalke 0:08ba94bc5a30 1800 { "Perform Measurement", 'M', perform_thermocouple_measurement, AD7124_CONFIG_THERMOCOUPLE },
mahphalke 0:08ba94bc5a30 1801 };
mahphalke 0:08ba94bc5a30 1802
mahphalke 0:08ba94bc5a30 1803 console_menu thermocouple_menu = {
mahphalke 0:08ba94bc5a30 1804 .title = "Thermocouple Measurement",
mahphalke 0:08ba94bc5a30 1805 .items = thermocouple_menu_items,
mahphalke 0:08ba94bc5a30 1806 .itemCount = ARRAY_SIZE(thermocouple_menu_items),
mahphalke 0:08ba94bc5a30 1807 .headerItem = thermocouple_menu_header,
mahphalke 0:08ba94bc5a30 1808 .footerItem = NULL,
mahphalke 0:08ba94bc5a30 1809 .enableEscapeKey = true
mahphalke 0:08ba94bc5a30 1810 };
mahphalke 0:08ba94bc5a30 1811
mahphalke 0:08ba94bc5a30 1812 static console_menu_item adc_calibration_menu_items[] = {
mahphalke 0:08ba94bc5a30 1813 { "Perform Internal Calibration", 'I', perform_adc_calibration, INTERNAL_CALIBRATION },
mahphalke 0:08ba94bc5a30 1814 { "Perform System Calibration", 'S', perform_adc_calibration, SYSTEM_CALIBRATION },
mahphalke 0:08ba94bc5a30 1815 };
mahphalke 0:08ba94bc5a30 1816
mahphalke 0:08ba94bc5a30 1817 console_menu adc_calibration_menu = {
mahphalke 0:08ba94bc5a30 1818 .title = "AD7124 Calibration",
mahphalke 0:08ba94bc5a30 1819 .items = adc_calibration_menu_items,
mahphalke 0:08ba94bc5a30 1820 .itemCount = ARRAY_SIZE(adc_calibration_menu_items),
mahphalke 0:08ba94bc5a30 1821 .headerItem = adc_calibration_menu_header,
mahphalke 0:08ba94bc5a30 1822 .footerItem = NULL,
mahphalke 0:08ba94bc5a30 1823 .enableEscapeKey = true
mahphalke 0:08ba94bc5a30 1824 };
mahphalke 0:08ba94bc5a30 1825
mahphalke 0:08ba94bc5a30 1826 /*
mahphalke 0:08ba94bc5a30 1827 * Definition of the Main Menu Items and menu itself
mahphalke 0:08ba94bc5a30 1828 */
mahphalke 0:08ba94bc5a30 1829 static console_menu_item main_menu_items[] = {
mahphalke 0:08ba94bc5a30 1830 {"2-Wire RTD", 'A', display_2wire_rtd_menu },
mahphalke 0:08ba94bc5a30 1831 {"3-Wire RTD", 'B', display_3wire_rtd_menu },
mahphalke 0:08ba94bc5a30 1832 {"4-Wire RTD", 'C', display_4wire_rtd_menu },
mahphalke 0:08ba94bc5a30 1833 {"Thermocouple", 'D', display_thermocouple_menu },
mahphalke 0:08ba94bc5a30 1834 {"Thermistor", 'E', display_ntc_thermistor_menu },
mahphalke 0:08ba94bc5a30 1835 {"Calibrate ADC", 'F', display_adc_calibration_menu },
mahphalke 0:08ba94bc5a30 1836 };
mahphalke 0:08ba94bc5a30 1837
mahphalke 0:08ba94bc5a30 1838 console_menu ad7124_main_menu = {
mahphalke 0:08ba94bc5a30 1839 .title = "AD7124 Sensor Measurement Menu",
mahphalke 0:08ba94bc5a30 1840 .items = main_menu_items,
mahphalke 0:08ba94bc5a30 1841 .itemCount = ARRAY_SIZE(main_menu_items),
mahphalke 0:08ba94bc5a30 1842 .headerItem = main_menu_header,
mahphalke 0:08ba94bc5a30 1843 .footerItem = NULL,
mahphalke 0:08ba94bc5a30 1844 .enableEscapeKey = false
mahphalke 0:08ba94bc5a30 1845 };