Bob Giesberts / LDC1614

Dependencies:   SHTx

Dependents:   Inductive_Sensor_3

Fork of LDC1101 by Bob Giesberts

Committer:
hamid567
Date:
Fri May 29 13:35:48 2015 +0000
Revision:
10:4fa62f8092c4
Parent:
9:6e2d808b113d
Child:
11:0f53fbf73613
working version with registers commented and all not needed write commando's disabled.

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
hamid567 4:62ebb87678f8 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,1)
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 7:7f1522ad3df5 21 mode(LDC_MODE_STANDBY);
hamid567 5:98d4fd07734a 22 setFrequency(f_external);
hamid567 8:b5fb9681869c 23 wait(0.1);
hamid567 1:a88df80e7664 24 wait_us(10);
hamid567 8:b5fb9681869c 25
hamid567 8:b5fb9681869c 26 setWatchdog(5000);
hamid567 8:b5fb9681869c 27 setResponseTime(LDC_RESPONSE_6144);
hamid567 8:b5fb9681869c 28 setOutputPower(LDC_AMPLITUDE_4V);
hamid567 5:98d4fd07734a 29
hamid567 8:b5fb9681869c 30 //*** Write comando's like in EVM start log:
hamid567 10:4fa62f8092c4 31 /* writeSPIregister(0x0B,0x00); // power op standby
hamid567 10:4fa62f8092c4 32 writeSPIregister(0x01,0x0E); // rp_max
hamid567 10:4fa62f8092c4 33 writeSPIregister(0x02,0x3C); // rp_min
hamid567 10:4fa62f8092c4 34 writeSPIregister(0x03,0x15); // min reson freq
hamid567 10:4fa62f8092c4 35 writeSPIregister(0x04,0x17);*/ // LDC config
hamid567 10:4fa62f8092c4 36 writeSPIregister(0x05,0x00); // clock config >> we get 0x00 if this line is disabled and the cable is reconnected
hamid567 10:4fa62f8092c4 37 /* writeSPIregister(0x06,0x50); // treshhold High LSB we get 0x00 if this 4 lines is disabled and the cable is reconnected
hamid567 10:4fa62f8092c4 38 writeSPIregister(0x07,0x14); // treshhold High MSB
hamid567 10:4fa62f8092c4 39 writeSPIregister(0x08,0xC0); // treshhold Low LSB
hamid567 10:4fa62f8092c4 40 writeSPIregister(0x09,0x12); // treshhold Low MSB
hamid567 10:4fa62f8092c4 41 writeSPIregister(0x0A,0x04); */ // INTB pin config
hamid567 10:4fa62f8092c4 42 writeSPIregister(0x0C,0x01); //
hamid567 10:4fa62f8092c4 43 // writeSPIregister(0x0B,0x01); // Power mode active
hamid567 10:4fa62f8092c4 44
hamid567 5:98d4fd07734a 45 mode(LDC_MODE_ACTIVE);
vsluiter 0:90873b4e8330 46 }
vsluiter 0:90873b4e8330 47
vsluiter 0:90873b4e8330 48 void LDC1000::setOutputPower(LDC_AMPLITUDE amplitude)
vsluiter 0:90873b4e8330 49 {
vsluiter 0:90873b4e8330 50 uint8_t buffer;
vsluiter 0:90873b4e8330 51 _amplitude = amplitude;
vsluiter 0:90873b4e8330 52 readSPI(&buffer, 0x04);
vsluiter 0:90873b4e8330 53 buffer &= 0xE7; //clear amplitude bits
hamid567 8:b5fb9681869c 54 buffer |= (amplitude<<3) & 0x18;
vsluiter 0:90873b4e8330 55 writeSPI(&buffer,0x04);
vsluiter 0:90873b4e8330 56
vsluiter 0:90873b4e8330 57 }
vsluiter 0:90873b4e8330 58
hamid567 2:44b76f6f19d5 59 void LDC1000::setWatchdog(float frequency)
hamid567 2:44b76f6f19d5 60 {
hamid567 2:44b76f6f19d5 61 uint8_t buffer;
hamid567 2:44b76f6f19d5 62 buffer = 68.94*log(frequency/2500);
hamid567 2:44b76f6f19d5 63 writeSPI(&buffer,0x03);
hamid567 2:44b76f6f19d5 64 }
hamid567 1:a88df80e7664 65
vsluiter 0:90873b4e8330 66 void LDC1000::setResponseTime(LDC_RESPONSE responsetime)
vsluiter 0:90873b4e8330 67 {
vsluiter 0:90873b4e8330 68 uint8_t buffer;
vsluiter 0:90873b4e8330 69 _responsetime = responsetime;
vsluiter 0:90873b4e8330 70 readSPI(&buffer, 0x04);
vsluiter 0:90873b4e8330 71 buffer &= 0xF8; //clear responsetime bits
hamid567 5:98d4fd07734a 72 buffer |= responsetime & 0x07;
hamid567 8:b5fb9681869c 73 //writeSPIregister(0x04,buffer);
vsluiter 0:90873b4e8330 74 writeSPI(&buffer,0x04);
vsluiter 0:90873b4e8330 75 }
vsluiter 0:90873b4e8330 76
vsluiter 0:90873b4e8330 77 void LDC1000::setFrequency(float frequency)
vsluiter 0:90873b4e8330 78 {
vsluiter 0:90873b4e8330 79 _frequency = frequency;
vsluiter 0:90873b4e8330 80 _clock.period(1.0/frequency);
hamid567 4:62ebb87678f8 81 _clock.pulsewidth(0.5/frequency);
vsluiter 0:90873b4e8330 82 }
vsluiter 0:90873b4e8330 83
vsluiter 0:90873b4e8330 84 float LDC1000::getInductance()
vsluiter 0:90873b4e8330 85 {
hamid567 8:b5fb9681869c 86 uint16_t resp[] = {0,0,192, 384, 768, 1536, 3072, 6144};
vsluiter 0:90873b4e8330 87 _raw_l = readRawCounts();
vsluiter 0:90873b4e8330 88 _fsensor = (_frequency/(_raw_l*3.0))*resp[(uint8_t)(_responsetime)];
hamid567 2:44b76f6f19d5 89 return 1./(cap*pow(2*PI*_fsensor,2));
vsluiter 0:90873b4e8330 90 };
vsluiter 0:90873b4e8330 91
hamid567 8:b5fb9681869c 92
hamid567 9:6e2d808b113d 93 /* reads all 5 registers also after cable reconnect but het returns just one byte*/
hamid567 8:b5fb9681869c 94 uint32_t LDC1000::readRawCounts(void)
hamid567 8:b5fb9681869c 95 {
hamid567 8:b5fb9681869c 96 uint8_t val[5];
hamid567 8:b5fb9681869c 97 readSPI(val,0x21,5);
hamid567 9:6e2d808b113d 98 unsigned int combinedbytes = (val[4]<<16)| (val[3]<<8) | val[2]; // combine the 3 bytes from registers 23, 24 and 25
hamid567 9:6e2d808b113d 99 return combinedbytes;
hamid567 9:6e2d808b113d 100 // return (uint32_t)(*(&val[2]));
hamid567 8:b5fb9681869c 101 }
hamid567 8:b5fb9681869c 102
hamid567 8:b5fb9681869c 103
hamid567 8:b5fb9681869c 104 /*
vsluiter 0:90873b4e8330 105 uint32_t LDC1000::readRawCounts(void)
vsluiter 0:90873b4e8330 106 {
vsluiter 0:90873b4e8330 107 union
vsluiter 0:90873b4e8330 108 {
vsluiter 0:90873b4e8330 109 uint8_t buf[4];
vsluiter 0:90873b4e8330 110 uint32_t value;
vsluiter 0:90873b4e8330 111 } val;
hamid567 8:b5fb9681869c 112 val.value = 8;
hamid567 8:b5fb9681869c 113 readSPI(val.buf,0x23,3);
vsluiter 0:90873b4e8330 114 return val.value;
vsluiter 0:90873b4e8330 115 }
hamid567 8:b5fb9681869c 116 */
hamid567 5:98d4fd07734a 117
vsluiter 0:90873b4e8330 118 void LDC1000::readSPI(uint8_t *data, uint8_t address, uint8_t num_bytes)
vsluiter 0:90873b4e8330 119 {
vsluiter 0:90873b4e8330 120 _cs_pin.write(0);
vsluiter 0:90873b4e8330 121 _spiport.write(address | 0x80); //read flag
vsluiter 0:90873b4e8330 122 for(int i=0; i < num_bytes ; i++)
vsluiter 0:90873b4e8330 123 {
hamid567 1:a88df80e7664 124 data[i] = _spiport.write(0xFF);
vsluiter 0:90873b4e8330 125 }
vsluiter 0:90873b4e8330 126 _cs_pin.write(1);
vsluiter 0:90873b4e8330 127 }
vsluiter 0:90873b4e8330 128
vsluiter 0:90873b4e8330 129 void LDC1000::writeSPI(uint8_t *data, uint8_t address, uint8_t num_bytes)
vsluiter 0:90873b4e8330 130 {
vsluiter 0:90873b4e8330 131 _cs_pin.write(0);
vsluiter 0:90873b4e8330 132 _spiport.write(address);
vsluiter 0:90873b4e8330 133 for(int i=0; i < num_bytes ; i++)
vsluiter 0:90873b4e8330 134 {
hamid567 1:a88df80e7664 135 _spiport.write(data[i]);
vsluiter 0:90873b4e8330 136 }
vsluiter 0:90873b4e8330 137 _cs_pin.write(1);
hamid567 8:b5fb9681869c 138 }
hamid567 8:b5fb9681869c 139
hamid567 8:b5fb9681869c 140 // EXTRA test get and print variables values to verify (to calculate the induction)
hamid567 8:b5fb9681869c 141 // Begin ***********************************************************
hamid567 8:b5fb9681869c 142 float LDC1000::get_raw_l() {_raw_l = readRawCounts();
hamid567 8:b5fb9681869c 143 return _raw_l;};
hamid567 8:b5fb9681869c 144 float LDC1000::get_fsensor() {
hamid567 8:b5fb9681869c 145 uint16_t resp[] = {0, 0, 192, 384, 768, 1536, 3072, 6144};
hamid567 8:b5fb9681869c 146 _raw_l = readRawCounts();
hamid567 8:b5fb9681869c 147 _fsensor = (_frequency/(_raw_l*3.0))*resp[(uint8_t)(_responsetime)];
hamid567 8:b5fb9681869c 148 return _fsensor;};
hamid567 8:b5fb9681869c 149
hamid567 8:b5fb9681869c 150 float LDC1000::get_frequency() {return _frequency;};
hamid567 8:b5fb9681869c 151 float LDC1000::get_responsetime() {return _responsetime;};
hamid567 8:b5fb9681869c 152 float LDC1000::get_cap() {return cap;};
hamid567 8:b5fb9681869c 153 // END ***********************************************************
hamid567 8:b5fb9681869c 154