Mahesh Phalke / Mbed OS ad7124_mbed_temperature-measure-example

Dependencies:   platform_drivers AD7124_no_OS adi_console_menu tempsensors_prv

Committer:
mahphalke
Date:
Wed Mar 24 19:48:08 2021 +0530
Revision:
8:3d7b5897b028
Parent:
0:08ba94bc5a30
Displaying iout average values

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mahphalke 0:08ba94bc5a30 1 /***************************************************************************//**
mahphalke 0:08ba94bc5a30 2 * @file ad7124_support.c
mahphalke 0:08ba94bc5a30 3 * @brief Provides useful support functions for the AD7124 No-OS driver
mahphalke 0:08ba94bc5a30 4 * @details
mahphalke 0:08ba94bc5a30 5 ********************************************************************************
mahphalke 0:08ba94bc5a30 6 * Copyright (c) 2019-2021 Analog Devices, Inc.
mahphalke 0:08ba94bc5a30 7 * All rights reserved.
mahphalke 0:08ba94bc5a30 8 *
mahphalke 0:08ba94bc5a30 9 * This software is proprietary to Analog Devices, Inc. and its licensors.
mahphalke 0:08ba94bc5a30 10 * By using this software you agree to the terms of the associated
mahphalke 0:08ba94bc5a30 11 * Analog Devices Software License Agreement.
mahphalke 0:08ba94bc5a30 12 *******************************************************************************/
mahphalke 0:08ba94bc5a30 13
mahphalke 0:08ba94bc5a30 14 /******************************************************************************/
mahphalke 0:08ba94bc5a30 15 /***************************** Include Files **********************************/
mahphalke 0:08ba94bc5a30 16 /******************************************************************************/
mahphalke 0:08ba94bc5a30 17
mahphalke 0:08ba94bc5a30 18 #include <stdbool.h>
mahphalke 0:08ba94bc5a30 19 #include "ad7124_support.h"
mahphalke 0:08ba94bc5a30 20
mahphalke 0:08ba94bc5a30 21 /******************************************************************************/
mahphalke 0:08ba94bc5a30 22 /************************** Functions Definitions *****************************/
mahphalke 0:08ba94bc5a30 23 /******************************************************************************/
mahphalke 0:08ba94bc5a30 24 /*
mahphalke 0:08ba94bc5a30 25 * @brief helper function get the setup setting for an ADC channel
mahphalke 0:08ba94bc5a30 26 *
mahphalke 0:08ba94bc5a30 27 * @param dev The device structure.
mahphalke 0:08ba94bc5a30 28 *
mahphalke 0:08ba94bc5a30 29 * @param channel ADC channel to get Setup for.
mahphalke 0:08ba94bc5a30 30 *
mahphalke 0:08ba94bc5a30 31 * @return value of setup field in channel configuration.
mahphalke 0:08ba94bc5a30 32 */
mahphalke 0:08ba94bc5a30 33 uint8_t ad7124_get_channel_setup(struct ad7124_dev *dev, uint8_t channel)
mahphalke 0:08ba94bc5a30 34 {
mahphalke 0:08ba94bc5a30 35 return (dev->regs[AD7124_Channel_0 + channel].value >> 12) & 0x7;
mahphalke 0:08ba94bc5a30 36 }
mahphalke 0:08ba94bc5a30 37
mahphalke 0:08ba94bc5a30 38
mahphalke 0:08ba94bc5a30 39 /*
mahphalke 0:08ba94bc5a30 40 * @brief helper function get the PGA setting for an ADC channel
mahphalke 0:08ba94bc5a30 41 *
mahphalke 0:08ba94bc5a30 42 * @param dev The device structure.
mahphalke 0:08ba94bc5a30 43 *
mahphalke 0:08ba94bc5a30 44 * @param channel ADC channel to get Setup for.
mahphalke 0:08ba94bc5a30 45 *
mahphalke 0:08ba94bc5a30 46 * @return value of PGA field in the setup for an ADC channel.
mahphalke 0:08ba94bc5a30 47 */
mahphalke 0:08ba94bc5a30 48 uint8_t ad7124_get_channel_pga(struct ad7124_dev *dev, uint8_t channel)
mahphalke 0:08ba94bc5a30 49 {
mahphalke 0:08ba94bc5a30 50 uint8_t setup = ad7124_get_channel_setup(dev, channel);
mahphalke 0:08ba94bc5a30 51
mahphalke 0:08ba94bc5a30 52 return (dev->regs[AD7124_Config_0 + setup].value) & 0x07;
mahphalke 0:08ba94bc5a30 53 }
mahphalke 0:08ba94bc5a30 54
mahphalke 0:08ba94bc5a30 55
mahphalke 0:08ba94bc5a30 56 /*
mahphalke 0:08ba94bc5a30 57 * @brief helper function get the bipolar setting for an ADC channel
mahphalke 0:08ba94bc5a30 58 *
mahphalke 0:08ba94bc5a30 59 * @param dev The device structure.
mahphalke 0:08ba94bc5a30 60 *
mahphalke 0:08ba94bc5a30 61 * @param channel ADC channel to get bipolar mode for.
mahphalke 0:08ba94bc5a30 62 *
mahphalke 0:08ba94bc5a30 63 * @return value of bipolar field in the setup for an ADC channel.
mahphalke 0:08ba94bc5a30 64 */
mahphalke 0:08ba94bc5a30 65 bool ad7124_get_channel_bipolar(struct ad7124_dev *dev, uint8_t channel)
mahphalke 0:08ba94bc5a30 66 {
mahphalke 0:08ba94bc5a30 67 uint8_t setup = ad7124_get_channel_setup(dev, channel);
mahphalke 0:08ba94bc5a30 68
mahphalke 0:08ba94bc5a30 69 return ((dev->regs[AD7124_Config_0 + setup].value >> 11) & 0x1) ? true : false;
mahphalke 0:08ba94bc5a30 70 }
mahphalke 0:08ba94bc5a30 71
mahphalke 0:08ba94bc5a30 72
mahphalke 0:08ba94bc5a30 73 /*
mahphalke 0:08ba94bc5a30 74 * @brief converts ADC sample value to voltage based on gain setting
mahphalke 0:08ba94bc5a30 75 *
mahphalke 0:08ba94bc5a30 76 * @param dev The device structure.
mahphalke 0:08ba94bc5a30 77 *
mahphalke 0:08ba94bc5a30 78 * @param channel ADC channel to get Setup for.
mahphalke 0:08ba94bc5a30 79 *
mahphalke 0:08ba94bc5a30 80 * @param sample Raw ADC sample
mahphalke 0:08ba94bc5a30 81 *
mahphalke 0:08ba94bc5a30 82 * @return Sample ADC value converted to voltage.
mahphalke 0:08ba94bc5a30 83 *
mahphalke 0:08ba94bc5a30 84 * @note The conversion equation is implemented for simplicity,
mahphalke 0:08ba94bc5a30 85 * not for accuracy or performance
mahphalke 0:08ba94bc5a30 86 *
mahphalke 0:08ba94bc5a30 87 */
mahphalke 0:08ba94bc5a30 88 float ad7124_convert_sample_to_voltage(struct ad7124_dev *dev, uint8_t channel,
mahphalke 0:08ba94bc5a30 89 int32_t sample)
mahphalke 0:08ba94bc5a30 90 {
mahphalke 0:08ba94bc5a30 91 bool isBipolar = ad7124_get_channel_bipolar(dev, channel);
mahphalke 0:08ba94bc5a30 92 uint8_t channelPGA = ad7124_get_channel_pga(dev, channel);
mahphalke 0:08ba94bc5a30 93
mahphalke 0:08ba94bc5a30 94 float convertedValue;
mahphalke 0:08ba94bc5a30 95
mahphalke 0:08ba94bc5a30 96 if (isBipolar) {
mahphalke 0:08ba94bc5a30 97 convertedValue = ( ((float)sample / (1 << (AD7124_ADC_N_BITS -1))) -1 ) * \
mahphalke 0:08ba94bc5a30 98 (AD7124_REF_VOLTAGE / AD7124_PGA_GAIN(channelPGA));
mahphalke 0:08ba94bc5a30 99 } else {
mahphalke 0:08ba94bc5a30 100 convertedValue = ((float)sample * AD7124_REF_VOLTAGE)/(AD7124_PGA_GAIN(
mahphalke 0:08ba94bc5a30 101 channelPGA) * \
mahphalke 0:08ba94bc5a30 102 (1 << AD7124_ADC_N_BITS));
mahphalke 0:08ba94bc5a30 103 }
mahphalke 0:08ba94bc5a30 104
mahphalke 0:08ba94bc5a30 105 return (convertedValue);
mahphalke 0:08ba94bc5a30 106 }