Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: platform_drivers AD7124_no_OS adi_console_menu tempsensors_prv
app/ad7124_support.c
- Committer:
- mahphalke
- Date:
- 2021-03-24
- Revision:
- 8:3d7b5897b028
- Parent:
- 0:08ba94bc5a30
File content as of revision 8:3d7b5897b028:
/***************************************************************************//**
* @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);
}