Bob Giesberts / LDC1614

Dependencies:   SHTx

Dependents:   Inductive_Sensor_3

Fork of LDC1101 by Bob Giesberts

Committer:
hamid567
Date:
Tue May 19 13:26:40 2015 +0000
Revision:
2:44b76f6f19d5
Parent:
1:a88df80e7664
Child:
4:62ebb87678f8
Added timeout / watchdog

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