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.
Dependents: Inductive_Sensor_3
Fork of LDC1101 by
Diff: LDC1000.cpp
- Revision:
- 0:90873b4e8330
- Child:
- 1:a88df80e7664
diff -r 000000000000 -r 90873b4e8330 LDC1000.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LDC1000.cpp Sun Apr 05 18:19:12 2015 +0000
@@ -0,0 +1,92 @@
+/**
+* @file LDC1000.h
+* @brief this C++ file wcontains all required
+* functions to interface with Texas
+* Instruments' LDC1000.
+*
+* @author Victor Sluiter
+*
+* @date 2015-04-01
+*/
+
+#include "LDC1000.h"
+
+LDC1000::LDC1000(PinName mosi, PinName miso, PinName sck, PinName cs, float capacitor, float f_external, PinName clock_out) : _spiport(mosi,miso,sck,NC), _cs_pin(cs), _clock(clock_out)
+{
+ cap = capacitor;
+ _spiport.format(8,3);
+ _spiport.frequency(1E6);
+ _cs_pin.write(1);
+ setFrequency(f_external);
+ setResponseTime(LDC_RESPONSE_384);
+ mode(LDC_MODE_ACTIVE);
+}
+
+void LDC1000::setOutputPower(LDC_AMPLITUDE amplitude)
+{
+ uint8_t buffer;
+ _amplitude = amplitude;
+ readSPI(&buffer, 0x04);
+ buffer &= 0xE7; //clear amplitude bits
+ buffer |= (amplitude<<3) & 0xE7;
+ writeSPI(&buffer,0x04);
+
+}
+
+void LDC1000::setResponseTime(LDC_RESPONSE responsetime)
+{
+ uint8_t buffer;
+ _responsetime = responsetime;
+ readSPI(&buffer, 0x04);
+ buffer &= 0xF8; //clear responsetime bits
+ buffer |= responsetime & 0xF8;
+ writeSPI(&buffer,0x04);
+}
+
+void LDC1000::setFrequency(float frequency)
+{
+ _frequency = frequency;
+ _clock.period(1.0/frequency);
+}
+
+float LDC1000::getInductance()
+{
+ uint16_t resp[] = {192, 384, 768, 1536, 3072, 6144};
+ _raw_l = readRawCounts();
+ _fsensor = (_frequency/(_raw_l*3.0))*resp[(uint8_t)(_responsetime)];
+ return 1/(cap*pow(2*PI*_fsensor,2));
+};
+
+uint32_t LDC1000::readRawCounts(void)
+{
+ union
+ {
+ uint8_t buf[4];
+ uint32_t value;
+ } val;
+ val.value = 0;
+ readSPI(val.buf,0x23,3);
+ return val.value;
+}
+
+void LDC1000::readSPI(uint8_t *data, uint8_t address, uint8_t num_bytes)
+{
+ _cs_pin.write(0);
+ _spiport.write(address | 0x80); //read flag
+ for(int i=0; i < num_bytes ; i++)
+ {
+ _spiport.write(data[i]);
+ }
+ _cs_pin.write(1);
+}
+
+void LDC1000::writeSPI(uint8_t *data, uint8_t address, uint8_t num_bytes)
+{
+ _cs_pin.write(0);
+ _spiport.write(address);
+ for(int i=0; i < num_bytes ; i++)
+ {
+ *data = _spiport.write(0xFF);
+ }
+ _cs_pin.write(1);
+}
\ No newline at end of file
