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.
Diff: ad5933.cpp
- Revision:
- 6:6b9fc31d51b0
- Parent:
- 5:2dc8c3f02788
diff -r 2dc8c3f02788 -r 6b9fc31d51b0 ad5933.cpp
--- a/ad5933.cpp Wed May 13 14:07:40 2015 +0000
+++ b/ad5933.cpp Wed May 20 09:17:24 2015 +0000
@@ -23,23 +23,22 @@
#define INCR_FREQ 0x30 // increment frequency
#define REPE_FREQ 0x40 // repeat frequency
#define STANDBY 0xB0 // standby
+#define POWERDOWN 0xA0 // PowerDown modus
#define MEAS_TEMP 0x90 // temperature
#define WRITE_CMD 0x1A // adress + write command
#define READ_CMD 0x1B // adress + read command
#define CLOCK_FREQ 0x00F42400
+#define I2C_FREQ 400000
+
+#define WAITTIME 1800 // time to wait before polling for response
AD5933::AD5933(PinName sda, PinName scl, bool extClk) : sCom(sda, scl)
{
- sCom.frequency(400000);
- firstMeasurement = true;
+ sCom.frequency(I2C_FREQ);
PGAandVoltout = 0x00;
_extClk = extClk;
- //if(_extClk)
- // setRegister(0x81, 0x08);
- //else
- // setRegister(0x81, 0x00);
}
bool AD5933::gotoAdressPointer(uint8_t Adress)
@@ -114,13 +113,28 @@
output &= setRegister(0x88,(nrOfSteps >> 8));
output &= setRegister(0x89,nrOfSteps);
- firstMeasurement = true;
+ return output;
+}
+
+bool AD5933::initFrequencySweepParam(unsigned int startFreq, unsigned int stepFreq, unsigned int nrOfSteps, unsigned int nrOfCycles, bool PGA, int RangeNr)
+{
+ bool output = setFrequencySweepParam(startFreq, stepFreq, nrOfSteps);
+ output &= setSettlingTime(nrOfCycles);
+ output &= standby();
+ output &= setAnalogCircuit(PGA, RangeNr);
+ output &= setControlReg(INIT_FREQ);
+ wait_ms(5);
+ output &= setControlReg(INIT_SWEEP);
+ wait_us(WAITTIME);
+ output &= getData();
+
return output;
}
bool AD5933::setSettlingTime(unsigned int nrOfCycles)
{
bool output = true;
+
if (nrOfCycles > 1022) {
output &= setRegister(0x8A,((nrOfCycles/4) >> 8) | 0x06);
output &= setRegister(0x8B,(nrOfCycles/4));
@@ -154,8 +168,15 @@
PGAandVoltout |= 0x02;
break;
}
- firstMeasurement = true;
- return true;
+
+ uint8_t data = 0x00;
+ if(_extClk)
+ data |= 0x08;
+
+ bool output = setRegister(0x81, data);
+ output &= setRegister(0x80,PGAandVoltout);
+
+ return output;
}
bool AD5933::reset()
@@ -170,26 +191,23 @@
bool AD5933::standby()
{
return setControlReg(STANDBY);
+}
+bool AD5933::powerdown()
+{
+ return setControlReg(POWERDOWN);
}
bool AD5933::Measure(bool increment)
{
- if(firstMeasurement) {
- setControlReg(INIT_FREQ);
- wait_ms(1000);
-
- setControlReg(INIT_SWEEP);
- wait_ms(5);
- firstMeasurement = false;
- return getData();
- } else if(increment) {
+ if(increment) {
setControlReg(INCR_FREQ);
- wait_ms(5);
+ wait_us(WAITTIME);
return getData();
} else {
+ setControlReg(0x00);
setControlReg(REPE_FREQ);
- wait_ms(5);
+ wait_us(WAITTIME);
return getData();
}
}
@@ -201,7 +219,7 @@
bool output;
while(((getRegister(0x8F) & 0x02) != 0x02) && i < 10) {
- wait_ms(50);
+ wait_us(500);
i++;
}
if(i == 10)
@@ -218,12 +236,12 @@
{
int i = 0;
uint8_t data[2];
-
+
setControlReg(MEAS_TEMP);
- wait_ms(5);
+ wait_us(WAITTIME);
while(((getRegister(0x8F) & 0x01) != 0x01) && i < 10) {
- wait_ms(5);
+ wait_us(500);
i++;
}
if(i == 10)