TI LDC1000 library.

Revision:
0:b9daf55d7586
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ldc1000.h	Wed Apr 05 20:34:42 2017 +0000
@@ -0,0 +1,348 @@
+/**
+ * @file ldc1000.h
+ *
+ * @author Jon Buckman
+ * 
+ * @section LICENSE
+ *
+ * Copyright (c) 2014 Jon Buckman
+ *
+ *    This program is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation, either version 3 of the License, or
+ *    (at your option) any later version.
+ *
+ *    This program is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * @section DESCRIPTION
+ *
+ * LDC1000 Inductance to Digital Converter from Texas Instruments.
+ *
+ * Datasheet:
+ *
+ * http://www.ti.com/lit/ds/symlink/ldc1000.pdf
+ *
+ * Example:
+ * @code
+ * #include "mbed.h"
+ * #include "ldc1000.h"
+ *
+ * Serial pc(USBTX, USBRX); // tx, rx
+ *
+ * LDC1000 ldc(D11, D12, D13, D10, D9);   // mosi, miso, sck, cs, irq
+ * 
+ * int main() {
+ *    while(1) {
+ *       pc.printf("The device revision ID is %d\n", ldc.getDeviceID());
+ *       wait(1);
+ *    }
+ * }
+ * @endcode
+ */
+
+#ifndef __LDC1000_H__
+#define __LDC1000_H__
+
+/**
+ * Includes
+ */
+#include "mbed.h"
+
+/**
+ * Defines
+ */
+#define LDC1000_MIN_SENSOR_FREQUENCY 27
+#define LDC1000_MAX_SENSOR_FREQUENCY 234
+#define LDC1000_AMP_1V 0x00
+#define LDC1000_AMP_2V 0x08
+#define LDC1000_AMP_4V 0x10
+#define LDC1000_RESP_192 0x02
+#define LDC1000_RESP_384 0x03
+#define LDC1000_RESP_768 0x04
+#define LDC1000_RESP_1536 0x05
+#define LDC1000_RESP_3072 0x06
+#define LDC1000_RESP_6144 0x07
+#define LDC1000_CLK_SEL 0x02
+#define LDC1000_CLK_PD 0x01
+#define LDC1000_INTB_MODE_DRDYB_ENBL 0x04
+#define LDC1000_INTB_MODE_CMP_STAT 0x03
+#define LDC1000_INTB_MODE_WAKE_ENBL 0x01
+#define LDC1000_INTB_MODE_DSBL 0x00
+#define LDC1000_PWR_MODE_ACT 0x01
+#define LDC1000_PWR_MODE_STDBY 0x00
+#define LDC1000_STAT_OSC 0x80
+#define LDC1000_STAT_DRDY 0x40
+#define LDC1000_STAT_WAKE 0x20
+#define LDC1000_STAT_CMP 0x10
+
+/**
+ * LDC1000 Inductance to Digital Converter from Texas Instruments.
+ */
+class LDC1000 {
+
+public:
+
+    /**
+     * Constructor.
+     *
+     * @param mosi mbed pin to use for MOSI line of SPI interface.
+     * @param miso mbed pin to use for MISO line of SPI interface.
+     * @param sck mbed pin to use for SCK line of SPI interface.
+     * @param csn mbed pin to use for not chip select line of SPI interface.
+     * @param irq mbed pin to use for the interrupt request line.
+     */
+    LDC1000(PinName mosi, PinName miso, PinName sck, PinName csn, PinName irq = NC);
+
+    /**
+     * Get the device ID.
+     *
+     * @return The device ID (8).
+     */
+    int getDeviceID(void);
+
+    /**
+     * Set the Rp maximum.
+     *
+     * @param rp Rp maximum (0x00 - 0x1f).
+     */
+    void setRpMaximum(int rp);
+
+    /**
+     * Get the Rp maximum.
+     *
+     * @return The device ID (0x00 - 0x1f).
+     */
+    int getRpMaximum(void);
+
+    /**
+     * Set the Rp minimum.
+     *
+     * @param rp Rp maximum (0x20 - 0x3f).
+     */
+    void setRpMinimum(int rp);
+
+    /**
+     * Get the Rp minimum.
+     *
+     * @return The device ID (0x20 - 0x3f).
+     */
+    int getRpMinimum(void);
+
+    /**
+     * Set the sensor frequency.
+     *
+     * @param frequency sensor frequency (N = 68.94 * log10(F/2000)).
+     */
+    void setSensorFrequency(int frequency);
+
+    /**
+     * Get the sensor frequency.
+     *
+     * @return The sensor frequency (0 - 255).
+     */
+    int getSensorFrequency(void);
+
+    /**
+     * Set the oscillator amplitude.
+     *
+     * @param oscamp oscillator amplitude (0x00 - 1V, 0x01 - 2V, 0x10 - 4V).
+     */
+    void setOscAmplitude(int oscamp);
+
+    /**
+     * Get the oscillator amplitude.
+     *
+     * @return The oscillator amplitude (0x00 - 1V, 0x01 - 2V, 0x02 - 4V).
+     */
+    int getOscAmplitude(void);
+
+    /**
+     * Set the response time.
+     *
+     * @param resp response time (0x02 - 192, 0x03 - 384, 0x04 - 768, 0x05 - 1536, 0x06 - 3072, 0x07 - 6144).
+     */
+    void setResponseTime(int resp);
+
+    /**
+     * Get the response time.
+     *
+     * @return The response time (0x02 - 192, 0x03 - 384, 0x04 - 768, 0x05 - 1536, 0x06 - 3072, 0x07 - 6144).
+     */
+    int getResponseTime(void);
+
+    /**
+     * Set the clock select.
+     *
+     * @param sel clock select (0 - external time base, 1 - external crystal).
+     */
+    void setClockSelect(int sel);
+
+    /**
+     * Get the clock select.
+     *
+     * @return The clock select (0 - external time base, 1 - external crystal).
+     */
+    int getClockSelect(void);
+
+    /**
+     * Set the disable external time base clock.
+     *
+     * @param pd clock select (0 - enable external time base clock, 1 - disable external time base clock).
+     */
+    void setClockTimeBase(int pd);
+
+    /**
+     * Get the disable external time base clock.
+     *
+     * @return The clock select (0 - enable external time base clock, 1 - disable external time base clock).
+     */
+    int getClockTimeBase(void);
+
+    /**
+     * Set the least significant byte of comparator threshold high register.
+     *
+     * @param data data (0 - 255).
+     */
+    void setComparatorThresholdHighLSB(int data);
+
+    /**
+     * Get the least significant byte of comparator threshold high register.
+     *
+     * @return The register (0 - 255).
+     */
+    int getComparatorThresholdHighLSB(void);
+
+    /**
+     * Set the most significant byte of comparator threshold high register.
+     *
+     * @param data data (0 - 255).
+     */
+    void setComparatorThresholdHighMSB(int data);
+
+    /**
+     * Get the most significant byte of comparator threshold high register.
+     *
+     * @return The register (0 - 255).
+     */
+    int getComparatorThresholdHighMSB(void);
+
+    /**
+     * Set the least significant byte of comparator threshold low register.
+     *
+     * @param data data (0 - 255).
+     */
+    void setComparatorThresholdLowLSB(int data);
+
+    /**
+     * Get the least significant byte of comparator threshold low register.
+     *
+     * @return The register (0 - 255).
+     */
+    int getComparatorThresholdLowLSB(void);
+
+    /**
+     * Set the mode of the INTB pin.
+     *
+     * @param mode mode (0x00 - all modes disabled, 0x01 - wake up enable on INTB pin, 0x02 - INTB pin indicates status of comparator, 0x04 - DRDYB enable on INTB pin ).
+     */
+    void setINTBPin(int mode);
+
+    /**
+     * Get the mode of the INTB pin.
+     *
+     * @return The mode register (0x00 - all modes disabled, 0x01 - wake up enable on INTB pin, 0x02 - INTB pin indicates status of comparator, 0x04 - DRDYB enable on INTB pin ).
+     */
+    int getINTBPin(void);
+
+    /**
+     * Set the power mode configuraton.
+     *
+     * @param data power mode (0 - standby, 1 - active).
+     */
+    void setPower(int data);
+
+    /**
+     * Get the power mode configuration.
+     *
+     * @return The power mode (0 - standby, 1 - active).
+     */
+    int getPower(void);
+
+    /**
+     * Get the status.
+     *
+     * @return The status (0x10 - comparator, 0x20 - wake up, 0x40 - data ready, 0x80 - OSC status).
+     */
+    int getStatus(void);
+
+    /**
+     * Get the least significant byte of promiity data.
+     *
+     * @return The proximity data (0 - 255).
+     */
+    int getProximityDataLSB(void);
+
+    /**
+     * Get the most significant byte of promiity data.
+     *
+     * @return The proximity data (0 - 255).
+     */
+    int getProximityDataMSB(void);
+
+    /**
+     * Get the least significant byte of frequency counter data.
+     *
+     * @return The frequency counter data (0 - 255).
+     */
+    int getFrequencyCounterLSB(void);
+
+    /**
+     * Get the mid significant byte of frequency counter data.
+     *
+     * @return The frequency counter data (0 - 255).
+     */
+    int getFrequencyCounterMIDSB(void);
+
+    /**
+     * Get the most significant byte of frequency counter data.
+     *
+     * @return The frequency counter data (0 - 255).
+     */
+    int getFrequencyCounterMSB(void);
+
+private:
+
+    /**
+     * Set the contents of an addressable register.
+     *
+     * @param regAddress address of the register
+     * @param regData data to write to the register
+     */
+    void setRegister(int regAddress, int regData);
+
+    /**
+     * Get the contents of an addressable register.
+     *
+     * @param regAddress address of the register
+     * @return The contents of the register
+     */
+    int getRegister(int regAddress);
+
+    SPI         spi_;
+    DigitalOut  nCS_;
+    InterruptIn nIRQ_;
+
+    int mode;
+
+};
+
+#endif /* __LDC1000_H__ */
\ No newline at end of file