Vadim Kimlaychuk / AD5933
Committer:
vadimk
Date:
Sun Aug 22 10:39:50 2021 +0300
Revision:
8:20576c73ba85
Parent:
7:0e8dabae876c
real/imaginary values are signed integers

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dipi 1:b6eb241a5fa3 1 /* ---------------------------------------------------------------------------------
dipi 1:b6eb241a5fa3 2 Copyright 2015 Marijn Billiet
dipi 1:b6eb241a5fa3 3
dipi 1:b6eb241a5fa3 4 Licensed under the Apache License, Version 2.0 (the "License");
dipi 1:b6eb241a5fa3 5 you may not use this file except in compliance with the License.
dipi 1:b6eb241a5fa3 6 You may obtain a copy of the License at
dipi 1:b6eb241a5fa3 7
dipi 1:b6eb241a5fa3 8 http://www.apache.org/licenses/LICENSE-2.0
dipi 1:b6eb241a5fa3 9
dipi 1:b6eb241a5fa3 10 Unless required by applicable law or agreed to in writing, software
dipi 1:b6eb241a5fa3 11 distributed under the License is distributed on an "AS IS" BASIS,
dipi 1:b6eb241a5fa3 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
dipi 1:b6eb241a5fa3 13 See the License for the specific language governing permissions and
dipi 1:b6eb241a5fa3 14 limitations under the License.
dipi 6:6b9fc31d51b0 15
dipi 1:b6eb241a5fa3 16 --------------------------------------------------------------------------------- */
dipi 1:b6eb241a5fa3 17
dipi 2:93dd1ebfedea 18 #ifndef MBED_AD5933_H
dipi 2:93dd1ebfedea 19 #include "mbed.h"
dipi 2:93dd1ebfedea 20 #define MBED_AD5933_H
dipi 1:b6eb241a5fa3 21
dipi 0:6a71184e6f66 22
dipi 0:6a71184e6f66 23 /** AD5933 class.
dipi 0:6a71184e6f66 24 * Library to communicate with the AD5933 impedance meter chip.
dipi 6:6b9fc31d51b0 25 *
dipi 6:6b9fc31d51b0 26 * Example:
dipi 6:6b9fc31d51b0 27 * @code
dipi 6:6b9fc31d51b0 28 * #include "mbed.h"
dipi 6:6b9fc31d51b0 29 * #include "ad5933.h"
vadimk 7:0e8dabae876c 30 * #define WAIT_TIME_MS 3000
vadimk 7:0e8dabae876c 31 * #define START_FREQ 10000
vadimk 7:0e8dabae876c 32 * #define STEP_FREQ 100
vadimk 7:0e8dabae876c 33 *
vadimk 7:0e8dabae876c 34 * AD5933 Zmeter(P3_4, P3_5, false);
vadimk 7:0e8dabae876c 35 *
vadimk 7:0e8dabae876c 36 * int main()
vadimk 7:0e8dabae876c 37 * {
vadimk 7:0e8dabae876c 38 *
vadimk 7:0e8dabae876c 39 * printf("This is AD5933 test running on Mbed OS %d.%d.%d.\n", MBED_MAJOR_VERSION, MBED_MINOR_VERSION, MBED_PATCH_VERSION);
dipi 6:6b9fc31d51b0 40 * float temp = Zmeter.getTemperature();
vadimk 7:0e8dabae876c 41 * Zmeter.initFrequencySweepParam(START_FREQ, STEP_FREQ, 10, 5, true, 1);
vadimk 7:0e8dabae876c 42 *
vadimk 7:0e8dabae876c 43 * int i=0;
vadimk 7:0e8dabae876c 44 * printf("Sweep started \n");
vadimk 7:0e8dabae876c 45 * int status = Zmeter.Measure(false);
vadimk 7:0e8dabae876c 46 * while (status != 7)
vadimk 7:0e8dabae876c 47 * {
vadimk 7:0e8dabae876c 48 * temp = Zmeter.getTemperature();
vadimk 7:0e8dabae876c 49 * printf("freq = %d Hz, real = %d, img = %d, T = %.2fC\n", START_FREQ + STEP_FREQ*i, Zmeter.real, Zmeter.imaginary, temp);
vadimk 7:0e8dabae876c 50 * thread_sleep_for(WAIT_TIME_MS);
vadimk 7:0e8dabae876c 51 * status = Zmeter.Measure(true);
vadimk 7:0e8dabae876c 52 * i++;
dipi 6:6b9fc31d51b0 53 * }
vadimk 7:0e8dabae876c 54 *
vadimk 7:0e8dabae876c 55 * printf("Sweep completed \n");
vadimk 7:0e8dabae876c 56 }
dipi 6:6b9fc31d51b0 57 * @endcode
dipi 0:6a71184e6f66 58 */
dipi 0:6a71184e6f66 59 class AD5933
dipi 0:6a71184e6f66 60 {
dipi 0:6a71184e6f66 61 public:
dipi 0:6a71184e6f66 62 /** Create AD5933 instance
dipi 0:6a71184e6f66 63 @param sda I2C data line pin
dipi 0:6a71184e6f66 64 @param scl I2C clock line pin
dipi 0:6a71184e6f66 65 @param extClk source of the Clock signal: true = external; false = internal
dipi 0:6a71184e6f66 66 */
dipi 0:6a71184e6f66 67 AD5933(PinName sda, PinName scl, bool extClk);
dipi 6:6b9fc31d51b0 68
dipi 0:6a71184e6f66 69 /** Time to wait before the ADC starts to sample
dipi 0:6a71184e6f66 70 @param nrOfCycles Number of cycles (outputfrequency) to wait for sampling can start (max 2044)
dipi 6:6b9fc31d51b0 71 @return true on succes, false on failure
dipi 6:6b9fc31d51b0 72 */
dipi 0:6a71184e6f66 73 bool setSettlingTime(unsigned int nrOfCycles);
dipi 6:6b9fc31d51b0 74
dipi 0:6a71184e6f66 75 /** Set the gain of the pre-amplification and the output voltage range
dipi 0:6a71184e6f66 76 @param PGA Gain of the pre-amplifier (true = x1; false = x5)
dipi 0:6a71184e6f66 77 @param RangeNr Set the output voltage (1 = 2V; 2 = 1V; 3 = 400mV; 4 = 200mV)
dipi 6:6b9fc31d51b0 78 @return true on succes, false on failure
dipi 6:6b9fc31d51b0 79 */
dipi 0:6a71184e6f66 80 bool setAnalogCircuit(bool PGA, int RangeNr);
dipi 6:6b9fc31d51b0 81
dipi 0:6a71184e6f66 82 /** Measure Impedance
dipi 0:6a71184e6f66 83 @param increment (true = goto next frequency in sweep; false = remeasure at current frequency)
dipi 6:6b9fc31d51b0 84 @return true on succes, false on failure
dipi 6:6b9fc31d51b0 85 */
vadimk 7:0e8dabae876c 86 uint8_t Measure(bool increment);
dipi 6:6b9fc31d51b0 87
dipi 0:6a71184e6f66 88 /// Resets Device
dipi 6:6b9fc31d51b0 89 ///@return true on succes, false on failure
dipi 0:6a71184e6f66 90 bool reset();
dipi 6:6b9fc31d51b0 91
dipi 3:b844dd14179c 92 /// Get temperature of chip
dipi 6:6b9fc31d51b0 93 ///@return temperature in degrees Celcius
dipi 3:b844dd14179c 94 float getTemperature();
dipi 6:6b9fc31d51b0 95
dipi 6:6b9fc31d51b0 96 /// Puts the Device in Standby Mode
dipi 6:6b9fc31d51b0 97 ///@return true on succes, false on failure
dipi 4:1ecb56465953 98 bool standby();
dipi 6:6b9fc31d51b0 99
dipi 6:6b9fc31d51b0 100 /// Puts the Device in PowerDown Mode
dipi 6:6b9fc31d51b0 101 ///@return true on succes, false on failure
dipi 6:6b9fc31d51b0 102 bool powerdown();
dipi 6:6b9fc31d51b0 103
dipi 6:6b9fc31d51b0 104 /** Initialises a frequency sweep.
dipi 6:6b9fc31d51b0 105 @param startFreq initial frequency (max 100000Hz)
dipi 6:6b9fc31d51b0 106 @param stepFreq stepsize of increment in frequency
dipi 6:6b9fc31d51b0 107 @param nrOfSteps number of increments
dipi 6:6b9fc31d51b0 108 @param nrOfCycles Number of cycles (outputfrequency) to wait for sampling can start (max 2044)
dipi 6:6b9fc31d51b0 109 @param PGA Gain of the pre-amplifier (true = x1; false = x5)
dipi 6:6b9fc31d51b0 110 @param RangeNr Set the output voltage (1 = 2V; 2 = 1V; 3 = 400mV; 4 = 200mV)
dipi 6:6b9fc31d51b0 111 @return true on succes, false on failure
dipi 6:6b9fc31d51b0 112 */
dipi 6:6b9fc31d51b0 113 bool initFrequencySweepParam(unsigned int startFreq, unsigned int stepFreq, unsigned int nrOfSteps, unsigned int nrOfCycles, bool PGA, int RangeNr);
dipi 6:6b9fc31d51b0 114
dipi 0:6a71184e6f66 115 /// real part of impedance (uncalibrated)
vadimk 8:20576c73ba85 116 int real;
dipi 6:6b9fc31d51b0 117
dipi 0:6a71184e6f66 118 /// imaginary part of impedance (uncalibrated)
vadimk 8:20576c73ba85 119 int imaginary;
dipi 6:6b9fc31d51b0 120
dipi 0:6a71184e6f66 121 private:
dipi 0:6a71184e6f66 122 I2C sCom;
dipi 0:6a71184e6f66 123 uint8_t PGAandVoltout;
dipi 0:6a71184e6f66 124
dipi 6:6b9fc31d51b0 125 bool setFrequencySweepParam(unsigned int startFreq, unsigned int stepFreq, unsigned int nrOfSteps);
dipi 0:6a71184e6f66 126 bool gotoAdressPointer(uint8_t Adress);
dipi 0:6a71184e6f66 127 bool setRegister(uint8_t RegisterAdress, uint8_t RegisterValue);
dipi 0:6a71184e6f66 128 bool writeBlock(uint8_t ByteArray[], uint8_t sizeArray);
dipi 0:6a71184e6f66 129 uint8_t getRegister(uint8_t RegisterAdress);
dipi 0:6a71184e6f66 130 bool readBlock(uint8_t* ByteArray, uint8_t sizeArray);
dipi 0:6a71184e6f66 131 bool setControlReg(uint8_t Command);
vadimk 7:0e8dabae876c 132 uint8_t getData();
dipi 0:6a71184e6f66 133 bool _extClk;
dipi 0:6a71184e6f66 134
dipi 0:6a71184e6f66 135 };
dipi 0:6a71184e6f66 136 #endif