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
Revision 5:98a5beab11cc, committed 2021-10-13
- Comitter:
- Kjansen
- Date:
- Wed Oct 13 11:14:40 2021 +0100
- Parent:
- 4:953fb3148f25
- Commit message:
- No-OS Adoption Changes:
Update the .lib files for adoption of no-OS repository as-is.
Replaced platform_drivers.h with required header files.
Updated the copyright year
Mbed OS update changes:
1) Added the mbed_app.json file with custom parameters.
2) Updated the mbed-os version to 6.8.0
Changed in this revision
--- a/AD593x.lib Tue Oct 29 21:42:57 2019 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://os.mbed.com/teams/AnalogDevices/code/AD593x/#7351fce36ea6
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/License.txt Wed Oct 13 11:14:40 2021 +0100 @@ -0,0 +1,35 @@ +Copyright (c) 2019 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. + - Modified versions of the software must be conspicuously marked as such. + - This software is licensed solely and exclusively for use with processors/products + manufactured by or for Analog Devices, Inc. + - This software may not be combined or merged with other code in any manner + that would cause the software to become subject to terms and conditions which + differ from those listed here. + - 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. + +THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, +TITLE, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN +NO EVENT SHALL ANALOG DEVICES, INC. OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, DAMAGES ARISING OUT OF CLAIMS OF INTELLECTUAL +PROPERTY RIGHTS INFRINGEMENT; 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. + +2019-01-10-7CBSD SLA \ No newline at end of file
--- a/README.txt Tue Oct 29 21:42:57 2019 +0000 +++ b/README.txt Wed Oct 13 11:14:40 2021 +0100 @@ -4,80 +4,42 @@ AD5934 Recommended Evaluation Board DIGILENT PMOD 1A - - + Overview -------- -These code files provide drivers to interface with Analog Devices family of -impedance-converters listed above and communicate with any compatable evaluation board. -This code was developed and tested on SDP-K1 controller board -https://os.mbed.com/platforms/SDP_K1/ and used the Digilent PMOD 1A board for testing. - +These code files provide the console application and device libraries to +interface with AD5933/AD5934 EVAL boards. This code was developed and tested on SDP-K1 +controller board: https://os.mbed.com/platforms/SDP_K1/ and and used the Digilent PMOD 1A board for testing. + Product details: https://www.analog.com/en/products/ad5933.html +Eval board details: https://reference.digilentinc.com/reference/pmod/pmodia/start?_ga=2.247997262.874832523.1572350909-1020412841.1562671075 User Guide for this code: https://wiki.analog.com/resources/tools-software/product-support-software/ad5933-mbed -Digilent PMOD 1A: https://reference.digilentinc.com/reference/pmod/pmodia/start?_ga=2.247997262.874832523.1572350909-1020412841.1562671075 +Communication Protocol: I2C Hardware Setup -------------- -Required: SDP-K1 (or alternative MBED-enabled controller board), evaluation-board - recommend Digilent PMOD 1A, +Required: SDP-K1 (or alternative MBED enabled controller board), recommend Digilent PMOD 1A, USB cable. -Connect the SPI port on the SDP-K1 board (or any other Mbed enabled +Connect the I2C port on the SDP-K1 board (or any other Mbed enabled controller board) using short jumper-wires. Connect SDP-K1 board to the PC using the USB cable. - - + + How to Get Started ------------------ Open Mbed online compiler. https://ide.mbed.com/compiler -Import Code into compiler from here: https://os.mbed.com/teams/AnalogDevices/code/EVAL-AD593x/ -instructions on how to import code are here: https://os.mbed.com/docs/mbed-os/v5.12/tools/importing-code.html -Compile code. Drag and drop binary into SDP-K1 controller board. Find detailed -instructions here: https://os.mbed.com/docs/mbed-os/v5.12/tools/getting-your-program-on-your-board.html -Open Tera Term (or alternative), select 115200 baud rate, and the applicable COM -port to see the list of options. +Import Code into compiler. Instructions on how to import code are here: https://os.mbed.com/docs/mbed-os/v6.8/quick-start/build-with-the-online-compiler.html +Compile code to generate binary file and then drag and drop binary into SDP-K1 controller board. Detailed instructions are here: +https://os.mbed.com/docs/mbed-os/v6.8/build-tools/getting-your-program-on-your-board.html - +Refer project wiki page to find detailed guide on how to use firmware: +https://wiki.analog.com/resources/tools-software/product-support-software/ad5933-mbed + + Notes ----- -If using Win 7, install serial drivers for Mbed. https://os.mbed.com/docs/mbed-os/v5.12/tutorials/windows-serial-driver.html +Refer this page for latest documentation on Mbed-OS: https://os.mbed.com/docs/mbed-os/v6.8/introduction/index.html A detailed user guide on SDP-K1 controller board is available here https://www.analog.com/en/design-center/evaluation-hardware-and-software/evaluation-boards-kits/SDP-K1.html. - -License -------- -Copyright (c) 2019 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. - - Modified versions of the software must be conspicuously marked as such. - - This software is licensed solely and exclusively for use with processors/products - manufactured by or for Analog Devices, Inc. - - This software may not be combined or merged with other code in any manner - that would cause the software to become subject to terms and conditions which - differ from those listed here. - - 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. - -THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, -TITLE, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN -NO EVENT SHALL ANALOG DEVICES, INC. OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, DAMAGES ARISING OUT OF CLAIMS OF INTELLECTUAL -PROPERTY RIGHTS INFRINGEMENT; 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. - -2019-01-10-7CBSD SLA \ No newline at end of file +Copyright (c) 2021 Analog Devices, Inc. All rights reserved. \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/.mbedignore Wed Oct 13 11:14:40 2021 +0100 @@ -0,0 +1,40 @@ +mbed_platform_drivers/adc_data_capture.c +mbed_platform_drivers/uart.cpp +no-OS/ci/ +no-OS/doc/ +no-OS/legacy/ +no-OS/accel/ +no-OS/drivers/adc/adc_demo/ +no-OS/drivers/adc/ad4* +no-OS/drivers/adc/ad6* +no-OS/drivers/adc/ad7* +no-OS/drivers/adc/ad9* +no-OS/drivers/adc/adaq* +no-OS/drivers/adc/l* +no-OS/drivers/afe/ +no-OS/drivers/amplifiers/ +no-OS/drivers/axi_core/ +no-OS/drivers/cdc/ +no-OS/drivers/dac/ +no-OS/drivers/ecg/ +no-OS/drivers/frequency/ +no-OS/drivers/gpio/ +no-OS/drivers/gyro/ +no-OS/drivers/i2c/ +no-OS/drivers/io-expander/ +no-OS/drivers/instr-amplif/ +no-OS/drivers/mux/ +no-OS/drivers/photo-electronic/ +no-OS/drivers/platform/ +no-OS/drivers/potentiometer/ +no-OS/drivers/rf-transceiver/ +no-OS/drivers/sd-card/ +no-OS/drivers/spi/ +no-OS/drivers/tdm/ +no-OS/drivers/temperature/ +no-OS/iio/ +no-OS/legacy/ +no-OS/libraries/ +no-OS/network/ +no-OS/projects/ +no-OS/tools/ \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/app_config.h Wed Oct 13 11:14:40 2021 +0100
@@ -0,0 +1,104 @@
+/*************************************************************************//**
+ * @file app_config.h
+ * @brief Configuration file of AD5686 firmware example program
+ * @author ssmith (sean.smith@analog.com)
+******************************************************************************
+* Copyright (c) 2019 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.
+* - Modified versions of the software must be conspicuously marked as such.
+* - This software is licensed solely and exclusively for use with
+* processors/products manufactured by or for Analog Devices, Inc.
+* - This software may not be combined or merged with other code in any manner
+* that would cause the software to become subject to terms and
+* conditions which differ from those listed here.
+* - 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.
+*
+* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+* NON-INFRINGEMENT, TITLE, MERCHANTABILITY AND FITNESS FOR A
+* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANALOG DEVICES,
+* INC. OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, PUNITIVE OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, DAMAGES ARISING OUT OF CLAIMS OF
+* INTELLECTUAL PROPERTY RIGHTS INFRINGEMENT; 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.
+*
+* 20180927-7CBSD SLA
+*****************************************************************************/
+
+#ifndef _APP_CONFIG_H_
+#define _APP_CONFIG_H_
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+#ifdef __cplusplus
+#include "ad5933.h"
+}
+#endif
+
+
+//#define ARDUINO
+
+
+/**
+ The ADI SDP_K1 can be used with both arduino headers
+ or the 120-pin SDP connector found on ADI evaluation
+ boards. The default is the SDP connector
+
+ Uncomment the ARDUINO #define above to enable the ARDUINO connector
+
+*/
+//#warning check this
+#ifdef ARDUINO
+ #define I2C_SCL D15
+ #define I2C_SDA D14
+
+ #define SPI_CS D10
+ #define SPI_MISO D12
+ #define SPI_MOSI D11
+ #define SPI_SCK D13
+
+ #define GAIN_PIN D8
+ #define RESET_PIN D9
+ #define LDAC_PIN D7
+ #define ADDR0_PIN D6
+#else
+
+ #define I2C_SCL SDP_I2C_SCL
+ #define I2C_SDA SDP_I2C_SDA
+
+ #define SPI_CS SDP_SPI_CS_A
+ #define SPI_MISO SDP_SPI_MISO
+ #define SPI_MOSI SDP_SPI_MOSI
+ #define SPI_SCK SDP_SPI_SCK
+
+ #define GAIN_PIN SDP_GPIO_0
+ #define RESET_PIN SDP_GPIO_2
+ #define LDAC_PIN SDP_GPIO_3
+ #define ADDR0_PIN SDP_GPIO_4
+#endif
+
+#endif //_APP_CONFIG_H_
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/main.cpp Wed Oct 13 11:14:40 2021 +0100
@@ -0,0 +1,525 @@
+/*************************************************************************//**
+ * @file main.cpp
+ * @brief Main application code for AD5933 firmware example program
+ * @author ssmith (sean.smith@analog.com)
+******************************************************************************
+* Copyright (c) 2019-2021 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.
+* - Modified versions of the software must be conspicuously marked as such.
+* - This software is licensed solely and exclusively for use with
+* processors/products manufactured by or for Analog Devices, Inc.
+* - This software may not be combined or merged with other code in any manner
+* that would cause the software to become subject to terms and
+* conditions which differ from those listed here.
+* - 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.
+*
+* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+* NON-INFRINGEMENT, TITLE, MERCHANTABILITY AND FITNESS FOR A
+* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANALOG DEVICES,
+* INC. OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, PUNITIVE OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, DAMAGES ARISING OUT OF CLAIMS OF
+* INTELLECTUAL PROPERTY RIGHTS INFRINGEMENT; 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.
+*
+* 20180927-7CBSD SLA
+*****************************************************************************/
+
+#include <mbed.h>
+#include <ctype.h>
+#include "i2c.h"
+#include "i2c_extra.h"
+#include "error.h"
+#include "app_config.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif // _cplusplus
+#include "delay.h"
+#ifdef __cplusplus // Closing extern c
+}
+#endif // _cplusplus
+
+//Lower this value if storage becomes a problem
+#define MAX_FREQ_INCREMENTS 511
+#define TEMP_LIMIT_MIN -40
+#define TEMP_LIMIT_MAX 125
+#define MAX_SETTLING_CYCLES 511
+
+static void print_title(void);
+static void getMenuSelect(uint8_t *menuSelect);
+static void print_prompt();
+static uint8_t read_temperature();
+static uint8_t set_system_clock();
+static uint8_t set_vrange_and_pga_gain();
+static int32_t configure_system();
+static uint8_t calculate_gain_factor();
+static uint8_t guide();
+static uint8_t impedance_sweep();
+
+typedef struct ad5933_config_data {
+ float start_freq;
+ uint8_t pga_gain;
+ float output_voltage_range;
+ int32_t start_frequency;
+ int32_t frequency_increment;
+ int32_t number_increments;
+ int32_t number_settling_cycles;
+}ad5933_config_data;
+
+ad5933_config_data config_data;
+
+static double gain_factor = 0;
+static double temperature;
+
+
+/******************************************************************************/
+/************************** Variables Declarations ****************************/
+/******************************************************************************/
+
+// Initialize the extra parameters for I2C initialization
+mbed_i2c_init_param i2c_init_extra_params = {
+ .i2c_sda_pin = I2C_SDA,
+ .i2c_scl_pin = I2C_SCL
+};
+
+i2c_init_param i2c_params =
+{
+ .max_speed_hz = 100000, // i2c max speed (hz)
+ .slave_address = AD5933_ADDRESS, // i2c slave address //A0 tied high
+ .extra = &i2c_init_extra_params // i2c extra initialization parameters
+};
+
+
+ad5933_init_param init_params = {
+ .i2c_init = i2c_params, // I2C parameters
+ .current_sys_clk = AD5933_INTERNAL_SYS_CLK, //current_sys_clk frequency (16MHz)
+ .current_clock_source = AD5933_CONTROL_INT_SYSCLK, //current_clock_source
+ .current_gain = AD5933_RANGE_1000mVpp, //current_gain
+ .current_range = AD5933_GAIN_X1, //current_range
+};
+
+ad5933_dev *device;
+int32_t connected = -1;
+
+int main()
+{
+
+ uint8_t menu_select = 0;
+ print_title();
+ connected = ad5933_init(&device, init_params);
+
+
+ //Do a quick check to ensure basic connectivity is ok
+ temperature = ad5933_get_temperature(device);
+ if (temperature >= TEMP_LIMIT_MIN && temperature <= TEMP_LIMIT_MAX) {
+ printf("\nTemperature: %f, AD5933 initialisation successful!\n",temperature);
+ }
+ else {
+ printf("AD5933 initialisation reported a bad temperature - recommend debug :\n");
+ }
+
+ while (connected == SUCCESS) {
+ print_prompt();
+ getMenuSelect(&menu_select);
+ config_data.start_freq = 10000;
+
+ if (menu_select > 12)
+ print_prompt();
+ else switch (menu_select)
+ {
+ case 0:
+ guide();
+ mdelay(2000);
+ break;
+
+ case 1:
+ read_temperature();
+ break;
+ case 2:
+ configure_system();
+ break;
+ case 3:
+ calculate_gain_factor();
+ break;
+ case 4:
+ impedance_sweep();
+ break;
+
+ default:
+ printf("Invalid option: Ignored.");
+ break;
+ }
+
+ mdelay(100);
+ }
+
+ return 0;
+}
+
+//! Prints the title block
+void print_title()
+{
+ printf("*****************************************************************\n");
+ printf("* AD5933 Demonstration Program *\n");
+ printf("* *\n");
+ printf("* This program demonstrates communication with the AD5933 *\n");
+ printf("* *\n");
+ printf("* 1 MSPS, 12-Bit Impedance Converter, Network analyser *\n");
+ printf("* *\n");
+ printf("* Set the baud rate to 115200 select the newline terminator. *\n");
+ printf("*****************************************************************\n");
+}
+
+void print_prompt()
+{
+ printf("\n\n\rCommand Summary:\n\n");
+ printf(" 0 -Software Guide\n");
+ printf(" 1 -Read temperature\n");
+ printf(" 2 -Configure voltage-range, PGA-Gain and sweep parameters\n");
+ printf(" 3 -Calculate Gain-Factor\n");
+ printf(" 4 -Do an impedance sweep\n");
+ printf("\n\rMake a selection...\n");
+
+}
+
+
+static void getMenuSelect(uint8_t *menuSelect) {
+ scanf("%d", (int *)menuSelect);
+}
+
+static uint8_t read_temperature()
+{
+ temperature = ad5933_get_temperature(device);
+
+ printf("Current temperature:%.3f C", temperature);
+ return SUCCESS;
+}
+
+static uint8_t set_system_clock()
+{
+ printf(" Select Internal (1) or external clock (2): ");
+
+ int input = 0;
+ scanf("%d", &input);
+ if (isdigit(input) == 0 && (input == 1 || input == 2))
+ {
+ input == 1 ? printf("\n You selected Internal clock source\n") :
+ printf(" You selected external Source clock source\n");
+ }
+ else
+ {
+ printf("Invalid entry\n");
+ mdelay(2000);
+ return FAILURE;
+ }
+
+ if (input == 2)
+ {
+
+ printf(" Enter external clock frequency in Hz ");
+ scanf("%d", &input);
+ if (isdigit(input) == 0 && input > 0 && input < 20000000)
+ {
+ printf(" External clk-source frequency set to %d \n", input);
+ }
+ else
+ {
+ printf("Invalid entry\n");
+ mdelay(2000);
+ return FAILURE;
+ }
+ }
+
+ ad5933_set_system_clk(device,
+ input == 1 ? AD5933_CONTROL_INT_SYSCLK :
+ AD5933_CONTROL_EXT_SYSCLK,
+ input);
+
+ return 0;
+}
+
+static uint8_t set_vrange_and_pga_gain()
+{
+ int input;
+ uint8_t v_range = AD5933_RANGE_1000mVpp;
+
+ printf(" Select output voltage range:\n");
+ printf(" 0: 2Vpp typical:\n");
+ printf(" 1: 200mVpp typical:\n");
+ printf(" 2: 400mVpp typical:\n");
+ printf(" 3: 1Vpp typical:\n");
+
+
+ scanf("%d", &input);
+ if (input >= 0 && input < 4)
+ {
+ switch (input)
+ {
+ case AD5933_RANGE_2000mVpp: {
+ printf(" Selected 2V pp typical.\n");
+ break;
+ }
+ case AD5933_RANGE_200mVpp: {
+ printf(" Selected 200mV pp typical.\n");
+ break;
+ }
+ case AD5933_RANGE_400mVpp: {
+ printf(" Selected 400mV pp typical.\n");
+ break;
+ }
+ case AD5933_RANGE_1000mVpp: {
+ printf(" Selected 1V pp typical.\n");
+ break;
+ }
+ }
+ v_range = input;
+ }
+ else
+ {
+ printf("Invalid entry\n");
+ mdelay(2000);
+ return FAILURE;
+ }
+
+ printf("\n Select PGA Gain (0=X5, 1=X1)\n");
+ scanf("%d", &input);
+ if (input >= 0 && input < 2)
+ {
+ config_data.pga_gain = input;
+ config_data.output_voltage_range = v_range;
+
+ printf("PGA gain set to : ");
+ input == AD5933_GAIN_X5 ? printf("X5\n\n") : printf("X1\n\n");
+ ad5933_set_range_and_gain(device,
+ config_data.output_voltage_range,
+ config_data.pga_gain);
+ }
+ else
+ {
+ printf("Invalid entry: write aborted\n");
+ mdelay(2000);
+ return FAILURE;
+ }
+
+
+ return SUCCESS;
+}
+
+static int32_t configure_system()
+{
+
+ printf("Configure the impedance meter\n\n");
+ set_vrange_and_pga_gain();
+ set_system_clock();
+
+ int start_freq;
+ int freq_inc;
+ int num_increments;
+ int num_settling_cycles;
+ int multiplier = AD5933_SETTLING_X1;
+
+ printf("\n Enter start-frequency as a decimal number: ");
+ if (scanf("%d", &start_freq) == 1)
+ {
+ if (start_freq <= 0)
+ {
+ printf(" Invalid entry, write aborted: \n");
+ return FAILURE;
+ }
+ }
+
+
+ printf("\n Enter frequency-increment as a decimal number: ");
+ scanf("%d", &freq_inc);
+ if (isdigit(freq_inc) != 0 || freq_inc <= 0)
+ {
+ printf(" Invalid entry, write aborted: \n");
+ return FAILURE;
+ }
+
+ printf("\n Enter the number of increments as a decimal number: ");
+ printf("\n Number of increments must be less than %d\n", MAX_FREQ_INCREMENTS);
+ scanf("%d", &num_increments);
+ if (isdigit(num_increments) != 0 || num_increments > MAX_FREQ_INCREMENTS)
+ {
+ printf(" Invalid entry, write aborted: \n");
+ return FAILURE;
+ }
+
+ printf("Enter the number of settling-time cycles before ADC is triggered.\n");
+ scanf("%d", &num_settling_cycles);
+ if (num_settling_cycles > MAX_SETTLING_CYCLES)
+ {
+ printf(" Invalid entry, write aborted: \n");
+ return FAILURE;
+ }
+
+ printf("Set the settling time multiplier (X1=0, X2=1, X4=2).\n");
+ scanf("%d", &multiplier);
+ if (multiplier > 2)
+ {
+ printf(" Invalid entry, write aborted: \n");
+ return FAILURE;
+ }
+ else
+ { //adjust X4 option to match memory map
+ if (multiplier == 2)
+ multiplier = AD5933_SETTLING_X4;
+ }
+
+ printf("\n Setting start frequency to %d\n\r", (unsigned int)start_freq);
+ printf(" Setting frequency increment to %d\n\r", (unsigned int)freq_inc);
+ printf(" Setting the number of increments to %d\n\r", (unsigned int)num_increments);
+ printf(" Setting the number of settling-cycles to %d\n\r", (unsigned int)num_settling_cycles);
+ printf(" The multiplier for the settling-cycles %d\n\r", (unsigned int)multiplier+1);
+
+ //update device state
+ config_data.start_freq = start_freq;
+ config_data.frequency_increment = freq_inc;
+ config_data.number_increments = num_increments;
+ config_data.number_settling_cycles = num_settling_cycles;
+
+ ad5933_set_settling_time(device,multiplier,num_settling_cycles);
+ ad5933_set_range_and_gain(device, device->current_range, device->current_gain);
+ ad5933_config_sweep(device, start_freq, freq_inc, num_increments);
+
+ return SUCCESS;
+
+}
+
+static uint8_t calculate_gain_factor()
+{
+
+ double calibration_impedance;
+
+ printf("\n\nCalculate the gain-factor (see datasheet for information)\n");
+ printf("Calcualted gain-factor will be stored for impedance measurements and\n");
+ printf("displayed on the terminal screen.\n");
+ printf("Ensure that the system has been configured before\n");
+ printf("calculating the gain factor\n");
+
+ ad5933_config_sweep(device,
+ config_data.start_freq,
+ config_data.frequency_increment,
+ config_data.number_increments);
+
+ // Do standby, init-start freq, start the sweep, and wait for valid data
+ ad5933_start_sweep(device);
+
+ printf("\nEnter calibration resistance in Ohms: ");
+ scanf("%le", &calibration_impedance);
+
+
+ printf("Calculating gain factor\n\r");
+
+ gain_factor = ad5933_calculate_gain_factor(device,
+ calibration_impedance,
+ AD5933_FUNCTION_REPEAT_FREQ);
+ printf("\n\r Calculated gain factor %e\n\r", gain_factor);
+
+
+ return SUCCESS;
+}
+
+
+
+
+static uint8_t guide()
+{
+
+ printf("\n\rAD5933-Demo quick-start guide: \n\n");
+ printf("This program can be used both as a demo of the AD5933 impedance \n");
+ printf("measurement system and as a starting point for developing a \n");
+ printf("more advanced program for prototyping. This program is not \n");
+ printf("provided as production-quality code, but as a helpful starting point.\n\n");
+
+ printf("As a quick start, the following steps can be implemented to ensure\n");
+ printf("firmware is communcating with the board and measurements taking place.\n\n");
+
+ printf("Firstly - use menu option 1 to read the on-chip temperature.\n");
+ printf("If a realistic temperature comes back - you are good to go :)\n\n");
+
+ printf("Step 1\tConnect a 200k Resistor across the SMA terminals of the PMOD 1A\n");
+ printf("Step 2\tSelect the 100k feedback resistor by pulling the SEL pin high\n");
+ printf("Step 2\tConfigure the impedance system with Menu Option 2\n");
+ printf("Step 3\tCalculate the gain factor with menu-item 3\n");
+ printf("Step 3\tReplace the 200k impedance across the SMA terminals with a \n");
+ printf("different 'unknown' impedance (300K perhaps)\n");
+ printf("Step 4\tRun the impedance measurement with menu-item 4\n");
+ printf("\tresults are dispayed on the terminal\n");
+
+ return SUCCESS;
+}
+
+
+
+static uint8_t impedance_sweep()
+{
+ printf("\nPerform a sweep to calculate an unknown impedance (see datasheet for information)\n");
+ printf("System should have been previously configured (Menu Option 2)\n");
+ printf("Impedance will be caculated and results shown.\n\r");
+
+ int32_t status = FAILURE;
+ double impedance;
+ float frequency = config_data.start_freq;
+
+
+ ad5933_config_sweep(device,
+ config_data.start_freq,
+ config_data.frequency_increment,
+ config_data.number_increments);
+
+ /*
+ > program frequency sweep parameters into relevant registerS
+ > place the ad5933 into standby mode.
+ > start frequency register
+ > number of increments register
+ */
+ ad5933_start_sweep(device);
+ printf("\n FREQUENCY MAGNITUDE PHASE IMPEDANCE\n");
+
+ do {
+
+ //Fill up the results struct with data
+ impedance = ad5933_calculate_impedance(device,
+ gain_factor,
+ AD5933_FUNCTION_INC_FREQ);
+
+ printf(" %.2f,", frequency);
+ printf(" %.2f\n", impedance);
+
+ frequency += config_data.frequency_increment;
+
+ //poll the status register to check if frequency sweep is complete.
+ status = ad5933_get_register_value(device, AD5933_REG_STATUS, 1);
+
+ } while ((status & AD5933_STAT_SWEEP_DONE) == 0);
+
+ return status;
+}
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/mbed_platform_drivers.lib Wed Oct 13 11:14:40 2021 +0100 @@ -0,0 +1,1 @@ +https://os.mbed.com/teams/AnalogDevices/code/platform_drivers/#5ae03a197e59 \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/no-OS.lib Wed Oct 13 11:14:40 2021 +0100 @@ -0,0 +1,1 @@ +https://github.com/analogdevicesinc/no-OS/#d14f824a6bee78881a277790310b12d9a3e822bd \ No newline at end of file
--- a/app_config.h Tue Oct 29 21:42:57 2019 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-/*************************************************************************//**
- * @file app_config.h
- * @brief Configuration file of AD5686 firmware example program
- * @author ssmith (sean.smith@analog.com)
-******************************************************************************
-* Copyright (c) 2019 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.
-* - Modified versions of the software must be conspicuously marked as such.
-* - This software is licensed solely and exclusively for use with
-* processors/products manufactured by or for Analog Devices, Inc.
-* - This software may not be combined or merged with other code in any manner
-* that would cause the software to become subject to terms and
-* conditions which differ from those listed here.
-* - 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.
-*
-* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. AND CONTRIBUTORS "AS IS"
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-* NON-INFRINGEMENT, TITLE, MERCHANTABILITY AND FITNESS FOR A
-* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANALOG DEVICES,
-* INC. OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-* SPECIAL, EXEMPLARY, PUNITIVE OR CONSEQUENTIAL DAMAGES
-* (INCLUDING, BUT NOT LIMITED TO, DAMAGES ARISING OUT OF CLAIMS OF
-* INTELLECTUAL PROPERTY RIGHTS INFRINGEMENT; 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.
-*
-* 20180927-7CBSD SLA
-*****************************************************************************/
-
-#ifndef _APP_CONFIG_H_
-#define _APP_CONFIG_H_
-
-#include <stdint.h>
-#include "platform_drivers.h"
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-#ifdef __cplusplus
-#include "ad5933.h"
-}
-#endif
-
-
-#define ARDUINO
-
-
-/**
- The ADI SDP_K1 can be used with both arduino headers
- or the 120-pin SDP connector found on ADI evaluation
- boards. The default is the SDP connector
-
- Uncomment the ARDUINO #define above to enable the ARDUINO connector
-
-*/
-//#warning check this
-#ifdef ARDUINO
- #define I2C_SCL D15
- #define I2C_SDA D14
-
- #define SPI_CS D10
- #define SPI_MISO D12
- #define SPI_MOSI D11
- #define SPI_SCK D13
-
- #define GAIN_PIN D8
- #define RESET_PIN D9
- #define LDAC_PIN D7
- #define ADDR0_PIN D6
-#else
-
- #define I2C_SCL SDP_I2C_SCL
- #define I2C_SDA SDP_I2C_SDA
-
- #define SPI_CS SDP_SPI_CS_A
- #define SPI_MISO SDP_SPI_MISO
- #define SPI_MOSI SDP_SPI_MOSI
- #define SPI_SCK SDP_SPI_SCK
-
- #define GAIN_PIN SDP_GPIO_0
- #define RESET_PIN SDP_GPIO_2
- #define LDAC_PIN SDP_GPIO_3
- #define ADDR0_PIN SDP_GPIO_4
-#endif
-
-#endif //_APP_CONFIG_H_
--- a/main.cpp Tue Oct 29 21:42:57 2019 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,526 +0,0 @@
-/*************************************************************************//**
- * @file main.cpp
- * @brief Main application code for AD5686 firmware example program
- * @author ssmith (sean.smith@analog.com)
-******************************************************************************
-* Copyright (c) 2019 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.
-* - Modified versions of the software must be conspicuously marked as such.
-* - This software is licensed solely and exclusively for use with
-* processors/products manufactured by or for Analog Devices, Inc.
-* - This software may not be combined or merged with other code in any manner
-* that would cause the software to become subject to terms and
-* conditions which differ from those listed here.
-* - 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.
-*
-* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. AND CONTRIBUTORS "AS IS"
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-* NON-INFRINGEMENT, TITLE, MERCHANTABILITY AND FITNESS FOR A
-* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANALOG DEVICES,
-* INC. OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-* SPECIAL, EXEMPLARY, PUNITIVE OR CONSEQUENTIAL DAMAGES
-* (INCLUDING, BUT NOT LIMITED TO, DAMAGES ARISING OUT OF CLAIMS OF
-* INTELLECTUAL PROPERTY RIGHTS INFRINGEMENT; 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.
-*
-* 20180927-7CBSD SLA
-*****************************************************************************/
-
-#include <mbed.h>
-#include <ctype.h>
-#include "app_config.h"
-
-#define NOT_USED 0
-//Lower this value if storage becomes a problem
-#define MAX_FREQ_INCREMENTS 511
-#define TEMP_LIMIT_MIN -40
-#define TEMP_LIMIT_MAX 125
-
-
-static void print_title(void);
-static void getMenuSelect(uint8_t *menuSelect);
-static void print_prompt();
-static uint8_t read_temperature();
-static uint8_t set_system_clock();
-static uint8_t set_vrange_and_pga_gain();
-static int32_t configure_system();
-static uint8_t calculate_gain_factor();
-static uint8_t guide();
-static uint8_t impedance_sweep();
-
-typedef struct ad5933_config_data {
- float start_freq;
- uint8_t pga_gain;
- float output_voltage_range;
- int32_t start_frequency;
- int32_t frequency_increment;
- int32_t number_increments;
- int32_t number_settling_cycles;
-}ad5933_config_data;
-
-ad5933_config_data config_data;
-
-static double gain_factor = 0;
-static double temperature;
-
-
-/******************************************************************************/
-/************************** Variables Declarations ****************************/
-/******************************************************************************/
-
-/**
- The following definitions are a requirement for the platform_driver
- Pin are changed if required in the app_config.h file
- ***/
-mbed::SPI spi(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS);
-mbed::I2C i2c(I2C_SDA, I2C_SCL);
-PinName slave_selects[MAX_SLAVE_SELECTS];
-
-i2c_init_param i2c_params =
-{
- GENERIC_I2C, // i2c type
- 0, // i2c id
- 100000, // i2c max speed (hz)
- AD5933_ADDRESS << 1, // i2c slave address //A0 tied high
-};
-
-
-ad5933_init_param init_params = {
- i2c_params, // I2C parameters
- AD5933_INTERNAL_SYS_CLK, //current_sys_clk frequency (16MHz)
- AD5933_CONTROL_INT_SYSCLK, //current_clock_source
- AD5933_RANGE_1000mVpp, //current_gain
- AD5933_GAIN_X1, //current_range
- AD5933_15_CYCLES, //current_settling
-};
-
-ad5933_dev *device;
-int32_t connected = -1;
-Serial pc(USBTX, USBRX, 115200);
-
-
-int main()
-{
- uint8_t menu_select = 0;
- print_title();
- connected = ad5933_init(&device, init_params);
-
-
- //Do a quick check to ensure basic connectivity is ok
- temperature = ad5933_get_temperature(device);
- if (temperature >= TEMP_LIMIT_MIN && temperature <= TEMP_LIMIT_MAX) {
- pc.printf("\nTemperature: %f, AD5933 initialisation successful!\n",temperature);
- }
- else {
- pc.printf("AD5933 initialisation reported a bad temperature - recommend debug :\n");
- }
-
- while (connected == SUCCESS) {
- print_prompt();
- getMenuSelect(&menu_select);
- config_data.start_freq = 10000;
-
- if (menu_select > 12)
- print_prompt();
- else switch (menu_select)
- {
- case 0:
- guide();
- wait(2);
- break;
-
- case 1:
- read_temperature();
- break;
- case 2:
- configure_system();
- break;
- case 3:
- calculate_gain_factor();
- break;
- case 4:
- impedance_sweep();
- break;
-
- default:
- pc.printf("Invalid option: Ignored.");
- break;
- }
-
- wait(0.1);
- }
-
- return 0;
-}
-
-//! Prints the title block
-void print_title()
-{
- pc.printf("*****************************************************************\n");
- pc.printf("* AD5933 Demonstration Program -- (mbed 1.0) *\n");
- pc.printf("* *\n");
- pc.printf("* This program demonstrates communication with the AD5933 *\n");
- pc.printf("* *\n");
- pc.printf("* 1 MSPS, 12-Bit Impedance Converter, Network analyser *\n");
- pc.printf("* *\n");
- pc.printf("* Set the baud rate to 115200 select the newline terminator. *\n");
- pc.printf("*****************************************************************\n");
-}
-
-void print_prompt()
-{
- pc.printf("\n\n\rCommand Summary:\n\n");
- pc.printf(" 0 -Software Guide\n");
- pc.printf(" 1 -Read temperature\n");
- pc.printf(" 2 -Configure voltage-range, PGA-Gain and sweep parameters\n");
- pc.printf(" 3 -Calculate Gain-Factor\n");
- pc.printf(" 4 -Do an impedance sweep\n");
- pc.printf("\n\rMake a selection...\n");
-
-}
-
-
-static void getMenuSelect(uint8_t *menuSelect) {
- pc.scanf("%d", (int *)menuSelect);
-}
-
-static uint8_t read_temperature()
-{
- temperature = ad5933_get_temperature(device);
-
- pc.printf("Current temperature:%.3f C", temperature);
- return SUCCESS;
-}
-
-static uint8_t set_system_clock()
-{
- pc.printf(" Select Internal (1) or external clock (2): ");
-
- int input = 0;
- pc.scanf("%d", &input);
- if (isdigit(input) == 0 && (input == 1 || input == 2))
- {
- input == 1 ? pc.printf("\n You selected Internal clock source\n") :
- pc.printf(" You selected external Source clock source\n");
- }
- else
- {
- pc.printf("Invalid entry\n");
- wait(2);
- return FAILURE;
- }
-
- if (input == 2)
- {
-
- pc.printf(" Enter external clock frequency in Hz ");
- pc.scanf("%d", &input);
- if (isdigit(input) == 0 && input > 0 && input < 20000000)
- {
- pc.printf(" External clk-source frequency set to %d \n", input);
- }
- else
- {
- pc.printf("Invalid entry\n");
- wait(2);
- return FAILURE;
- }
- }
-
- ad5933_set_system_clk(device,
- input == 1 ? AD5933_CONTROL_INT_SYSCLK :
- AD5933_CONTROL_EXT_SYSCLK,
- input);
-
- return 0;
-}
-
-static uint8_t set_vrange_and_pga_gain()
-{
- int input;
- uint8_t v_range = AD5933_RANGE_1000mVpp;
-
- pc.printf(" Select output voltage range:\n");
- pc.printf(" 0: 2Vpp typical:\n");
- pc.printf(" 1: 200mVpp typical:\n");
- pc.printf(" 2: 400mVpp typical:\n");
- pc.printf(" 3: 1Vpp typical:\n");
-
-
- pc.scanf("%d", &input);
- if (input >= 0 && input < 4)
- {
- switch (input)
- {
- case AD5933_RANGE_2000mVpp: {
- pc.printf(" Selected 2V pp typical.\n");
- break;
- }
- case AD5933_RANGE_200mVpp: {
- pc.printf(" Selected 200mV pp typical.\n");
- break;
- }
- case AD5933_RANGE_400mVpp: {
- pc.printf(" Selected 400mV pp typical.\n");
- break;
- }
- case AD5933_RANGE_1000mVpp: {
- pc.printf(" Selected 1V pp typical.\n");
- break;
- }
- }
- v_range = input;
- }
- else
- {
- pc.printf("Invalid entry\n");
- wait(2);
- return FAILURE;
- }
-
- pc.printf("\n Select PGA Gain (0=X5, 1=X1)\n");
- pc.scanf("%d", &input);
- if (input >= 0 && input < 2)
- {
- config_data.pga_gain = input;
- config_data.output_voltage_range = v_range;
-
- pc.printf("PGA gain set to : ");
- input == AD5933_GAIN_X5 ? printf("X5\n\n") : printf("X1\n\n");
- ad5933_set_range_and_gain(device,
- config_data.output_voltage_range,
- config_data.pga_gain);
- }
- else
- {
- pc.printf("Invalid entry: write aborted\n");
- wait(2);
- return FAILURE;
- }
-
-
- return SUCCESS;
-}
-
-static int32_t configure_system()
-{
-
- pc.printf("Configure the impedance meter\n\n");
- set_vrange_and_pga_gain();
- set_system_clock();
-
- int start_freq;
- int freq_inc;
- int num_increments;
- int num_settling_cycles;
- int multiplier = AD5933_SETTLING_X1;
-
- pc.printf("\n Enter start-frequency as a decimal number: ");
- if (pc.scanf("%d", &start_freq) == 1)
- {
- if (start_freq <= 0)
- {
- pc.printf(" Invalid entry, write aborted: \n");
- return FAILURE;
- }
- }
-
-
- pc.printf("\n Enter frequency-increment as a decimal number: ");
- pc.scanf("%d", &freq_inc);
- if (isdigit(freq_inc) != 0 || freq_inc <= 0)
- {
- pc.printf(" Invalid entry, write aborted: \n");
- return FAILURE;
- }
-
- pc.printf("\n Enter the number of increments as a decimal number: ");
- pc.printf("\n Number of increments must be less than %d\n", MAX_FREQ_INCREMENTS);
- pc.scanf("%d", &num_increments);
- if (isdigit(num_increments) != 0 || num_increments > MAX_FREQ_INCREMENTS)
- {
- pc.printf(" Invalid entry, write aborted: \n");
- return FAILURE;
- }
-
- pc.printf("Enter the number of settling-time cycles before ADC is triggered.\n");
- pc.scanf("%d", &num_settling_cycles);
- if (num_settling_cycles > AD5933_MAX_SETTLING_CYCLES )
- {
- pc.printf(" Invalid entry, write aborted: \n");
- return FAILURE;
- }
-
- pc.printf("Set the settling time multiplier (X1=0, X2=1, X4=2).\n");
- pc.scanf("%d", &multiplier);
- if (multiplier > 2)
- {
- pc.printf(" Invalid entry, write aborted: \n");
- return FAILURE;
- }
- else
- { //adjust X4 option to match memory map
- if (multiplier == 2)
- multiplier = AD5933_SETTLING_X4;
- }
-
- pc.printf("\n Setting start frequency to %d\n\r", (unsigned int)start_freq);
- pc.printf(" Setting frequency increment to %d\n\r", (unsigned int)freq_inc);
- pc.printf(" Setting the number of increments to %d\n\r", (unsigned int)num_increments);
- pc.printf(" Setting the number of settling-cycles to %d\n\r", (unsigned int)num_settling_cycles);
- pc.printf(" The multiplier for the settling-cycles %d\n\r", (unsigned int)multiplier+1);
-
- //update device state
- config_data.start_freq = start_freq;
- config_data.frequency_increment = freq_inc;
- config_data.number_increments = num_increments;
- config_data.number_settling_cycles = num_settling_cycles;
-
- ad5933_set_settling_time(device,multiplier,num_settling_cycles);
- ad5933_set_range_and_gain(device, device->current_range, device->current_gain);
- ad5933_config_sweep(device, start_freq, freq_inc, num_increments);
-
- return SUCCESS;
-
-}
-
-static uint8_t calculate_gain_factor()
-{
-
- double calibration_impedance;
-
- pc.printf("\n\nCalculate the gain-factor (see datasheet for information)\n");
- pc.printf("Calcualted gain-factor will be stored for impedance measurements and\n");
- pc.printf("displayed on the terminal screen.\n");
- pc.printf("Ensure that the system has been configured before\n");
- pc.printf("calculating the gain factor\n");
-
- ad5933_config_sweep(device,
- config_data.start_freq,
- config_data.frequency_increment,
- config_data.number_increments);
-
- // Do standby, init-start freq, start the sweep, and wait for valid data
- ad5933_start_sweep(device);
-
- pc.printf("\nEnter calibration resistance in Ohms: ");
- pc.scanf("%le", &calibration_impedance);
-
-
- pc.printf("Calculating gain factor\n\r");
-
- gain_factor = ad5933_calculate_gain_factor(device,
- calibration_impedance,
- AD5933_FUNCTION_REPEAT_FREQ);
- pc.printf("\n\r Calculated gain factor %e\n\r", gain_factor);
-
-
- return SUCCESS;
-}
-
-
-
-
-static uint8_t guide()
-{
-
- pc.printf("\n\rAD5933-Demo quick-start guide: \n\n");
- pc.printf("This program can be used both as a demo of the AD5933 impedance \n");
- pc.printf("measurement system and as a starting point for developing a \n");
- pc.printf("more advanced program for prototyping. This program is not \n");
- pc.printf("provided as production-quality code, but as a helpful starting point.\n\n");
-
- pc.printf("As a quick start, the following steps can be implemented to ensure\n");
- pc.printf("firmware is communcating with the board and measurements taking place.\n\n");
-
- pc.printf("Firstly - use menu option 1 to read the on-chip temperature.\n");
- pc.printf("If a realistic temperature comes back - you are good to go :)\n\n");
-
- pc.printf("Step 1\tConnect a 200k Resistor across the SMA terminals of the PMOD 1A\n");
- pc.printf("Step 2\tSelect the 100k feedback resistor by pulling the SEL pin high\n");
- pc.printf("Step 2\tConfigure the impedance system with Menu Option 2\n");
- pc.printf("Step 3\tCalculate the gain factor with menu-item 3\n");
- pc.printf("Step 3\tReplace the 200k impedance across the SMA terminals with a \n");
- pc.printf("different 'unknown' impedance (300K perhaps)\n");
- pc.printf("Step 4\tRun the impedance measurement with menu-item 4\n");
- pc.printf("\tresults are dispayed on the terminal\n");
-
- return SUCCESS;
-}
-
-
-
-static uint8_t impedance_sweep() {
-
- ad5933_result results;
-
- pc.printf("\nPerform a sweep to calculate an unknown impedance (see datasheet for information)\n");
- pc.printf("System should have been previously configured (Menu Option 2)\n");
- pc.printf("Impedance will be caculated and results shown.\n\r");
-
- int32_t status = FAILURE;
- double impedance;
- float frequency = config_data.start_freq;
-
-
- ad5933_config_sweep(device,
- config_data.start_freq,
- config_data.frequency_increment,
- config_data.number_increments);
-
- /*
- > program frequency sweep parameters into relevant registerS
- > place the ad5933 into standby mode.
- > start frequency register
- > number of increments register
- */
- ad5933_start_sweep(device);
- pc.printf("\n FREQUENCY MAGNITUDE PHASE IMPEDANCE\n");
-
- do {
-
- //Fill up the results struct with data
- results = ad5933_calculate_impedance(device,
- gain_factor,
- AD5933_FUNCTION_INC_FREQ);
-
- impedance = 1 / (results.magnitude * gain_factor);
-
- pc.printf(" %.2f,", frequency);
- pc.printf(" %.2f", results.magnitude);
- pc.printf(" %.2f", results.phase);
- pc.printf(" %.2f\n", impedance);
-
- frequency += config_data.frequency_increment;
-
- //poll the status register to check if frequency sweep is complete.
- status = ad5933_get_register_value(device, AD5933_REG_STATUS, 1);
-
- } while ((status & AD5933_STAT_SWEEP_DONE) == 0);
-
- return status;
-}
-
-
-
-
-
--- a/mbed-os.lib Tue Oct 29 21:42:57 2019 +0000 +++ b/mbed-os.lib Wed Oct 13 11:14:40 2021 +0100 @@ -1,1 +1,1 @@ -https://github.com/ARMmbed/mbed-os/#9cab58358b338a3a7d7de258090bf0b500b2be97 +https://github.com/ARMmbed/mbed-os/#26606218ad9d1ee1c8781aa73774fd7ea3a7658e \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed_app.json Wed Oct 13 11:14:40 2021 +0100
@@ -0,0 +1,10 @@
+{
+ "requires": ["bare-metal"],
+ "target_overrides": {
+ "*": {
+ "platform.default-serial-baud-rate": 230400,
+ "target.printf_lib": "std",
+ "target.device_has_remove": ["CAN"]
+ }
+ }
+}
\ No newline at end of file
--- a/platform_drivers.lib Tue Oct 29 21:42:57 2019 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://os.mbed.com/teams/AnalogDevices/code/platform_drivers/#efb143ea4191