Marijn Billiet / AD5933
Revision:
6:6b9fc31d51b0
Parent:
5:2dc8c3f02788
--- 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)