Bob Giesberts / LDC1614

Dependencies:   SHTx

Dependents:   Inductive_Sensor_3

Fork of LDC1101 by Bob Giesberts

Committer:
hamid567
Date:
Wed Apr 29 14:57:22 2015 +0000
Revision:
1:a88df80e7664
Parent:
0:90873b4e8330
Child:
2:44b76f6f19d5
Corrected read and write actions

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);
hamid567 1:a88df80e7664 20 wait_us(100);
hamid567 1:a88df80e7664 21 mode(LDC_MODE_ACTIVE);
hamid567 1:a88df80e7664 22 wait_us(10);
vsluiter 0:90873b4e8330 23 setFrequency(f_external);
vsluiter 0:90873b4e8330 24 setResponseTime(LDC_RESPONSE_384);
vsluiter 0:90873b4e8330 25 }
vsluiter 0:90873b4e8330 26
vsluiter 0:90873b4e8330 27 void LDC1000::setOutputPower(LDC_AMPLITUDE amplitude)
vsluiter 0:90873b4e8330 28 {
vsluiter 0:90873b4e8330 29 uint8_t buffer;
vsluiter 0:90873b4e8330 30 _amplitude = amplitude;
vsluiter 0:90873b4e8330 31 readSPI(&buffer, 0x04);
vsluiter 0:90873b4e8330 32 buffer &= 0xE7; //clear amplitude bits
vsluiter 0:90873b4e8330 33 buffer |= (amplitude<<3) & 0xE7;
vsluiter 0:90873b4e8330 34 writeSPI(&buffer,0x04);
vsluiter 0:90873b4e8330 35
vsluiter 0:90873b4e8330 36 }
vsluiter 0:90873b4e8330 37
hamid567 1:a88df80e7664 38
hamid567 1:a88df80e7664 39
vsluiter 0:90873b4e8330 40 void LDC1000::setResponseTime(LDC_RESPONSE responsetime)
vsluiter 0:90873b4e8330 41 {
vsluiter 0:90873b4e8330 42 uint8_t buffer;
vsluiter 0:90873b4e8330 43 _responsetime = responsetime;
vsluiter 0:90873b4e8330 44 readSPI(&buffer, 0x04);
vsluiter 0:90873b4e8330 45 buffer &= 0xF8; //clear responsetime bits
vsluiter 0:90873b4e8330 46 buffer |= responsetime & 0xF8;
vsluiter 0:90873b4e8330 47 writeSPI(&buffer,0x04);
vsluiter 0:90873b4e8330 48 }
vsluiter 0:90873b4e8330 49
vsluiter 0:90873b4e8330 50 void LDC1000::setFrequency(float frequency)
vsluiter 0:90873b4e8330 51 {
vsluiter 0:90873b4e8330 52 _frequency = frequency;
hamid567 1:a88df80e7664 53 _clock.write(0.5);
vsluiter 0:90873b4e8330 54 _clock.period(1.0/frequency);
vsluiter 0:90873b4e8330 55 }
vsluiter 0:90873b4e8330 56
vsluiter 0:90873b4e8330 57 float LDC1000::getInductance()
vsluiter 0:90873b4e8330 58 {
vsluiter 0:90873b4e8330 59 uint16_t resp[] = {192, 384, 768, 1536, 3072, 6144};
vsluiter 0:90873b4e8330 60 _raw_l = readRawCounts();
vsluiter 0:90873b4e8330 61 _fsensor = (_frequency/(_raw_l*3.0))*resp[(uint8_t)(_responsetime)];
vsluiter 0:90873b4e8330 62 return 1/(cap*pow(2*PI*_fsensor,2));
vsluiter 0:90873b4e8330 63 };
vsluiter 0:90873b4e8330 64
vsluiter 0:90873b4e8330 65 uint32_t LDC1000::readRawCounts(void)
vsluiter 0:90873b4e8330 66 {
vsluiter 0:90873b4e8330 67 union
vsluiter 0:90873b4e8330 68 {
vsluiter 0:90873b4e8330 69 uint8_t buf[4];
vsluiter 0:90873b4e8330 70 uint32_t value;
vsluiter 0:90873b4e8330 71 } val;
vsluiter 0:90873b4e8330 72 val.value = 0;
vsluiter 0:90873b4e8330 73 readSPI(val.buf,0x23,3);
vsluiter 0:90873b4e8330 74 return val.value;
vsluiter 0:90873b4e8330 75 }
vsluiter 0:90873b4e8330 76
vsluiter 0:90873b4e8330 77 void LDC1000::readSPI(uint8_t *data, uint8_t address, uint8_t num_bytes)
vsluiter 0:90873b4e8330 78 {
vsluiter 0:90873b4e8330 79 _cs_pin.write(0);
vsluiter 0:90873b4e8330 80 _spiport.write(address | 0x80); //read flag
vsluiter 0:90873b4e8330 81 for(int i=0; i < num_bytes ; i++)
vsluiter 0:90873b4e8330 82 {
hamid567 1:a88df80e7664 83 data[i] = _spiport.write(0xFF);
vsluiter 0:90873b4e8330 84 }
vsluiter 0:90873b4e8330 85 _cs_pin.write(1);
vsluiter 0:90873b4e8330 86 }
vsluiter 0:90873b4e8330 87
vsluiter 0:90873b4e8330 88 void LDC1000::writeSPI(uint8_t *data, uint8_t address, uint8_t num_bytes)
vsluiter 0:90873b4e8330 89 {
vsluiter 0:90873b4e8330 90 _cs_pin.write(0);
vsluiter 0:90873b4e8330 91 _spiport.write(address);
vsluiter 0:90873b4e8330 92 for(int i=0; i < num_bytes ; i++)
vsluiter 0:90873b4e8330 93 {
hamid567 1:a88df80e7664 94 _spiport.write(data[i]);
vsluiter 0:90873b4e8330 95 }
vsluiter 0:90873b4e8330 96 _cs_pin.write(1);
vsluiter 0:90873b4e8330 97 }