Mahesh Phalke / Mbed OS ad7124_mbed_temperature-measure-example

Dependencies:   platform_drivers AD7124_no_OS adi_console_menu tempsensors_prv

Revision:
0:08ba94bc5a30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/ad7124_support.c	Fri Feb 19 16:26:06 2021 +0530
@@ -0,0 +1,106 @@
+/***************************************************************************//**
+ * @file     ad7124_support.c
+ * @brief    Provides useful support functions for the AD7124 No-OS driver
+ * @details
+********************************************************************************
+* Copyright (c) 2019-2021 Analog Devices, Inc.
+* All rights reserved.
+*
+* This software is proprietary to Analog Devices, Inc. and its licensors.
+* By using this software you agree to the terms of the associated
+* Analog Devices Software License Agreement.
+*******************************************************************************/
+
+/******************************************************************************/
+/***************************** Include Files **********************************/
+/******************************************************************************/
+
+#include <stdbool.h>
+#include "ad7124_support.h"
+
+/******************************************************************************/
+/************************** Functions Definitions *****************************/
+/******************************************************************************/
+/*
+ * @brief helper function get the setup setting for an ADC channel
+ *
+ * @param dev The device structure.
+ *
+ * @param channel ADC channel to get Setup for.
+ *
+ * @return value of setup field in channel configuration.
+ */
+uint8_t ad7124_get_channel_setup(struct ad7124_dev *dev, uint8_t channel)
+{
+	return (dev->regs[AD7124_Channel_0 + channel].value >> 12) & 0x7;
+}
+
+
+/*
+ * @brief helper function get the PGA setting for an ADC channel
+ *
+ * @param dev The device structure.
+ *
+ * @param channel ADC channel to get Setup for.
+ *
+ * @return value of PGA field in the setup for an ADC channel.
+ */
+uint8_t ad7124_get_channel_pga(struct ad7124_dev *dev, uint8_t channel)
+{
+	uint8_t setup = ad7124_get_channel_setup(dev, channel);
+
+	return (dev->regs[AD7124_Config_0 + setup].value) & 0x07;
+}
+
+
+/*
+ * @brief helper function get the bipolar setting for an ADC channel
+ *
+ * @param dev The device structure.
+ *
+ * @param channel ADC channel to get bipolar mode for.
+ *
+ * @return value of bipolar field in the setup for an ADC channel.
+ */
+bool ad7124_get_channel_bipolar(struct ad7124_dev *dev, uint8_t channel)
+{
+	uint8_t setup = ad7124_get_channel_setup(dev, channel);
+
+	return ((dev->regs[AD7124_Config_0 + setup].value >> 11) & 0x1) ? true : false;
+}
+
+
+/*
+ * @brief converts ADC sample value to voltage based on gain setting
+ *
+ * @param dev The device structure.
+ *
+ * @param channel ADC channel to get Setup for.
+ *
+ * @param sample Raw ADC sample
+ *
+ * @return Sample ADC value converted to voltage.
+ *
+ * @note The conversion equation is implemented for simplicity,
+ *       not for accuracy or performance
+ *
+ */
+float ad7124_convert_sample_to_voltage(struct ad7124_dev *dev, uint8_t channel,
+				       int32_t sample)
+{
+	bool isBipolar = ad7124_get_channel_bipolar(dev, channel);
+	uint8_t channelPGA = ad7124_get_channel_pga(dev, channel);
+
+	float convertedValue;
+
+	if (isBipolar) {
+		convertedValue = ( ((float)sample / (1 << (AD7124_ADC_N_BITS -1))) -1 ) * \
+				 (AD7124_REF_VOLTAGE / AD7124_PGA_GAIN(channelPGA));
+	} else {
+		convertedValue = ((float)sample * AD7124_REF_VOLTAGE)/(AD7124_PGA_GAIN(
+					 channelPGA) * \
+				 (1 << AD7124_ADC_N_BITS));
+	}
+
+	return (convertedValue);
+}