Pratyush Mallick
/
testing
this is testing
Diff: app/noos_mbed/drivers/impedance-analyzer/ad5933/ad5933.h
- Revision:
- 0:3afcd581558d
diff -r 000000000000 -r 3afcd581558d app/noos_mbed/drivers/impedance-analyzer/ad5933/ad5933.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/noos_mbed/drivers/impedance-analyzer/ad5933/ad5933.h Thu Jan 14 18:54:16 2021 +0530 @@ -0,0 +1,213 @@ +/***************************************************************************//** + * @file AD5933.h + * @brief Header file of AD5933 Driver. + * @author DBogdan (dragos.bogdan@analog.com) +******************************************************************************** + * Copyright 2012(c) Analog Devices, Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * - Neither the name of Analog Devices, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * - The use of this software may or may not infringe the patent rights + * of one or more patent holders. This license does not release you + * from the requirement that you obtain separate licenses from these + * patent holders to use this software. + * - Use of the software either in source or binary form, must be run + * on or directly connected to an Analog Devices Inc. component. + * + * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*******************************************************************************/ +#ifndef __AD5933_H__ +#define __AD5933_H__ + +#include <math.h> + +#ifndef M_PI +#define M_PI 3.14159265359 +#endif +const double radToDeg180ovPi = 180 / M_PI; + +/******************************************************************************/ +/************************** AD5933 Definitions ********************************/ +/******************************************************************************/ + +/* AD5933 Registers */ +#define AD5933_REG_CONTROL_HB 0x80 // HB of the Control register +#define AD5933_REG_CONTROL_LB 0x81 // LB of the Control register +#define AD5933_REG_FREQ_START 0x82 // Start frequency +#define AD5933_REG_FREQ_INC 0x85 // Frequency increment +#define AD5933_REG_INC_NUM 0x88 // Number of increments +#define AD5933_REG_SETTLING_CYCLES 0x8A // Number of settling time cycles +#define AD5933_REG_STATUS 0x8F // Status +#define AD5933_REG_TEMP_DATA 0x92 // Temperature data +#define AD5933_REG_REAL_DATA 0x94 // Real data +#define AD5933_REG_IMAG_DATA 0x96 // Imaginary data + +/* AD5933_REG_CONTROL_HB Bits */ +#define AD5933_CONTROL_FUNCTION(x) ((x) << 4) +#define AD5933_CONTROL_RANGE(x) ((x) << 1) +#define AD5933_CONTROL_PGA_GAIN(x) ((x) << 0) + +/* AD5933_REG_CONTROL_LB Bits */ +#define AD5933_CONTROL_RESET (0x1 << 4) +#define AD5933_CONTROL_INT_SYSCLK (0x0 << 3) +#define AD5933_CONTROL_EXT_SYSCLK (0x1 << 3) + +/* AD5933_CONTROL_FUNCTION(x) options */ +#define AD5933_FUNCTION_NOP 0x0 +#define AD5933_FUNCTION_INIT_START_FREQ 0x1 +#define AD5933_FUNCTION_START_SWEEP 0x2 +#define AD5933_FUNCTION_INC_FREQ 0x3 +#define AD5933_FUNCTION_REPEAT_FREQ 0x4 +#define AD5933_FUNCTION_MEASURE_TEMP 0x9 +#define AD5933_FUNCTION_POWER_DOWN 0xA +#define AD5933_FUNCTION_STANDBY 0xB + +/* AD5933_CONTROL_RANGE(x) options */ +#define AD5933_RANGE_2000mVpp 0x0 +#define AD5933_RANGE_200mVpp 0x1 +#define AD5933_RANGE_400mVpp 0x2 +#define AD5933_RANGE_1000mVpp 0x3 + +/* AD5933_CONTROL_PGA_GAIN(x) options */ +#define AD5933_GAIN_X5 0 +#define AD5933_GAIN_X1 1 + +/* AD5933 Default number of settling cycles */ +#define AD5933_15_CYCLES 15 + +/* AD5933 settling cycles mulitiplier */ +#define AD5933_SETTLING_X1 0 +#define AD5933_SETTLING_X2 1 +#define AD5933_SETTLING_X4 3 + +/* AD5933_REG_STATUS Bits */ +#define AD5933_STAT_TEMP_VALID (0x1 << 0) +#define AD5933_STAT_DATA_VALID (0x1 << 1) +#define AD5933_STAT_SWEEP_DONE (0x1 << 2) + +/* AD5933 Address */ +#define AD5933_ADDRESS 0x0D + +/* AD5933 Block Commands */ +#define AD5933_BLOCK_WRITE 0xA0 +#define AD5933_BLOCK_READ 0xA1 +#define AD5933_ADDR_POINTER 0xB0 + +/* AD5933 Specifications */ +#define AD5933_INTERNAL_SYS_CLK 16000000ul // 16MHz +#define AD5933_MAX_INC_NUM 511 // Maximum increment number +#define AD5933_MAX_SETTLING_CYCLES 511 + +/******************************************************************************/ +/*************************** Types Declarations *******************************/ +/******************************************************************************/ + +struct ad5933_dev { + /* I2C */ + i2c_desc *i2c_desc; + /* Device Settings */ + uint32_t current_sys_clk; + uint8_t current_clock_source; + uint8_t current_gain; + uint8_t current_range; + uint16_t current_settling; +}; + +struct ad5933_init_param { + /* I2C */ + i2c_init_param i2c_init; + /* Device Settings */ + uint32_t current_sys_clk; + uint8_t current_clock_source; + uint8_t current_gain; + uint8_t current_range; + uint16_t current_settling; +}; + +typedef struct ad5933_result { + double magnitude; + double phase; +}ad5933_result; + +/******************************************************************************/ +/************************ Functions Declarations ******************************/ +/******************************************************************************/ + +/*! Initializes the communication peripheral. */ +int32_t ad5933_init(struct ad5933_dev **device, + struct ad5933_init_param init_param); + +/*! Free the resources allocated by ad5686_init(). */ +int32_t ad5933_remove(struct ad5933_dev *dev); + +/*! Writes data into a register. */ +void ad5933_set_register_value(struct ad5933_dev *dev, + uint8_t register_address, + uint32_t register_value, + uint8_t bytes_number); + +/*! Reads the value of a register. */ +uint32_t ad5933_get_register_value(struct ad5933_dev *dev, + uint8_t register_address, + uint8_t bytes_number); + +/*! Resets the device. */ +void ad5933_reset(struct ad5933_dev *dev); + +/*! Selects the source of the system clock. */ +void ad5933_set_system_clk(struct ad5933_dev *dev, + int8_t clk_source, + uint32_t ext_clk_freq); + +/*! Selects the range and gain of the device. */ +void ad5933_set_range_and_gain(struct ad5933_dev *dev, + int8_t range, + int8_t gain); + +/*! Reads the temp. from the part and returns the data in degrees Celsius. */ +float ad5933_get_temperature(struct ad5933_dev *dev); + +/*! Configures the sweep parameters. */ +void ad5933_config_sweep(struct ad5933_dev *dev, + uint32_t start_freq, + uint32_t inc_freq, + uint16_t inc_num); + +/*! Starts the sweep operation. */ +void ad5933_start_sweep(struct ad5933_dev *dev); + +/*! Reads the real and the imaginary data and calculates the Gain Factor. */ +double ad5933_calculate_gain_factor(struct ad5933_dev *dev, + uint32_t calibration_impedance, + uint8_t freq_function); + +/*! Reads the real and the imaginary data and calculates the Impedance. */ +ad5933_result ad5933_calculate_impedance(struct ad5933_dev *dev, + double gain_factor, + uint8_t freq_function); + +void ad5933_set_settling_time(struct ad5933_dev *dev, + uint8_t mulitplier, + uint16_t number_cycles); + +#endif /* __AD5933_H__ */