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@8:3d7b5897b028, 2021-03-24 (annotated)
- 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?
User | Revision | Line number | New 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 | } |