Bob Giesberts / LDC1614

Dependencies:   SHTx

Dependents:   Inductive_Sensor_3

Fork of LDC1101 by Bob Giesberts

Committer:
vsluiter
Date:
Sun Apr 05 18:19:12 2015 +0000
Revision:
0:90873b4e8330
Child:
1:a88df80e7664
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vsluiter 0:90873b4e8330 1 /**
vsluiter 0:90873b4e8330 2 * @file LDC1000.h
vsluiter 0:90873b4e8330 3 * @brief this C++ file wcontains all required
vsluiter 0:90873b4e8330 4 * functions to interface with Texas
vsluiter 0:90873b4e8330 5 * Instruments' LDC1000.
vsluiter 0:90873b4e8330 6 *
vsluiter 0:90873b4e8330 7 * @author Victor Sluiter
vsluiter 0:90873b4e8330 8 *
vsluiter 0:90873b4e8330 9 * @date 2015-04-01
vsluiter 0:90873b4e8330 10 */
vsluiter 0:90873b4e8330 11
vsluiter 0:90873b4e8330 12 #include "LDC1000.h"
vsluiter 0:90873b4e8330 13
vsluiter 0:90873b4e8330 14 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)
vsluiter 0:90873b4e8330 15 {
vsluiter 0:90873b4e8330 16 cap = capacitor;
vsluiter 0:90873b4e8330 17 _spiport.format(8,3);
vsluiter 0:90873b4e8330 18 _spiport.frequency(1E6);
vsluiter 0:90873b4e8330 19 _cs_pin.write(1);
vsluiter 0:90873b4e8330 20 setFrequency(f_external);
vsluiter 0:90873b4e8330 21 setResponseTime(LDC_RESPONSE_384);
vsluiter 0:90873b4e8330 22 mode(LDC_MODE_ACTIVE);
vsluiter 0:90873b4e8330 23 }
vsluiter 0:90873b4e8330 24
vsluiter 0:90873b4e8330 25 void LDC1000::setOutputPower(LDC_AMPLITUDE amplitude)
vsluiter 0:90873b4e8330 26 {
vsluiter 0:90873b4e8330 27 uint8_t buffer;
vsluiter 0:90873b4e8330 28 _amplitude = amplitude;
vsluiter 0:90873b4e8330 29 readSPI(&buffer, 0x04);
vsluiter 0:90873b4e8330 30 buffer &= 0xE7; //clear amplitude bits
vsluiter 0:90873b4e8330 31 buffer |= (amplitude<<3) & 0xE7;
vsluiter 0:90873b4e8330 32 writeSPI(&buffer,0x04);
vsluiter 0:90873b4e8330 33
vsluiter 0:90873b4e8330 34 }
vsluiter 0:90873b4e8330 35
vsluiter 0:90873b4e8330 36 void LDC1000::setResponseTime(LDC_RESPONSE responsetime)
vsluiter 0:90873b4e8330 37 {
vsluiter 0:90873b4e8330 38 uint8_t buffer;
vsluiter 0:90873b4e8330 39 _responsetime = responsetime;
vsluiter 0:90873b4e8330 40 readSPI(&buffer, 0x04);
vsluiter 0:90873b4e8330 41 buffer &= 0xF8; //clear responsetime bits
vsluiter 0:90873b4e8330 42 buffer |= responsetime & 0xF8;
vsluiter 0:90873b4e8330 43 writeSPI(&buffer,0x04);
vsluiter 0:90873b4e8330 44 }
vsluiter 0:90873b4e8330 45
vsluiter 0:90873b4e8330 46 void LDC1000::setFrequency(float frequency)
vsluiter 0:90873b4e8330 47 {
vsluiter 0:90873b4e8330 48 _frequency = frequency;
vsluiter 0:90873b4e8330 49 _clock.period(1.0/frequency);
vsluiter 0:90873b4e8330 50 }
vsluiter 0:90873b4e8330 51
vsluiter 0:90873b4e8330 52 float LDC1000::getInductance()
vsluiter 0:90873b4e8330 53 {
vsluiter 0:90873b4e8330 54 uint16_t resp[] = {192, 384, 768, 1536, 3072, 6144};
vsluiter 0:90873b4e8330 55 _raw_l = readRawCounts();
vsluiter 0:90873b4e8330 56 _fsensor = (_frequency/(_raw_l*3.0))*resp[(uint8_t)(_responsetime)];
vsluiter 0:90873b4e8330 57 return 1/(cap*pow(2*PI*_fsensor,2));
vsluiter 0:90873b4e8330 58 };
vsluiter 0:90873b4e8330 59
vsluiter 0:90873b4e8330 60 uint32_t LDC1000::readRawCounts(void)
vsluiter 0:90873b4e8330 61 {
vsluiter 0:90873b4e8330 62 union
vsluiter 0:90873b4e8330 63 {
vsluiter 0:90873b4e8330 64 uint8_t buf[4];
vsluiter 0:90873b4e8330 65 uint32_t value;
vsluiter 0:90873b4e8330 66 } val;
vsluiter 0:90873b4e8330 67 val.value = 0;
vsluiter 0:90873b4e8330 68 readSPI(val.buf,0x23,3);
vsluiter 0:90873b4e8330 69 return val.value;
vsluiter 0:90873b4e8330 70 }
vsluiter 0:90873b4e8330 71
vsluiter 0:90873b4e8330 72 void LDC1000::readSPI(uint8_t *data, uint8_t address, uint8_t num_bytes)
vsluiter 0:90873b4e8330 73 {
vsluiter 0:90873b4e8330 74 _cs_pin.write(0);
vsluiter 0:90873b4e8330 75 _spiport.write(address | 0x80); //read flag
vsluiter 0:90873b4e8330 76 for(int i=0; i < num_bytes ; i++)
vsluiter 0:90873b4e8330 77 {
vsluiter 0:90873b4e8330 78 _spiport.write(data[i]);
vsluiter 0:90873b4e8330 79 }
vsluiter 0:90873b4e8330 80 _cs_pin.write(1);
vsluiter 0:90873b4e8330 81 }
vsluiter 0:90873b4e8330 82
vsluiter 0:90873b4e8330 83 void LDC1000::writeSPI(uint8_t *data, uint8_t address, uint8_t num_bytes)
vsluiter 0:90873b4e8330 84 {
vsluiter 0:90873b4e8330 85 _cs_pin.write(0);
vsluiter 0:90873b4e8330 86 _spiport.write(address);
vsluiter 0:90873b4e8330 87 for(int i=0; i < num_bytes ; i++)
vsluiter 0:90873b4e8330 88 {
vsluiter 0:90873b4e8330 89 *data = _spiport.write(0xFF);
vsluiter 0:90873b4e8330 90 }
vsluiter 0:90873b4e8330 91 _cs_pin.write(1);
vsluiter 0:90873b4e8330 92 }