Bob Giesberts / LDC1614

Dependencies:   SHTx

Dependents:   Inductive_Sensor_3

Fork of LDC1101 by Bob Giesberts

Committer:
hamid567
Date:
Fri May 29 09:28:46 2015 +0000
Revision:
8:b5fb9681869c
Parent:
7:7f1522ad3df5
Child:
9:6e2d808b113d
Working program but with not the right return data from readCounts()

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 8:b5fb9681869c 31 /* writeSPIregister(0x0B,0x00); */
hamid567 8:b5fb9681869c 32 writeSPIregister(0x01,0x0E);
hamid567 8:b5fb9681869c 33 writeSPIregister(0x02,0x3C);
hamid567 5:98d4fd07734a 34 writeSPIregister(0x03,0x15);
hamid567 8:b5fb9681869c 35 writeSPIregister(0x04,0x17);
hamid567 8:b5fb9681869c 36 writeSPIregister(0x05,0x00);
hamid567 8:b5fb9681869c 37 writeSPIregister(0x06,0x50);
hamid567 8:b5fb9681869c 38 writeSPIregister(0x07,0x14);
hamid567 8:b5fb9681869c 39 writeSPIregister(0x08,0xC0);
hamid567 8:b5fb9681869c 40 writeSPIregister(0x09,0x12);
hamid567 8:b5fb9681869c 41 writeSPIregister(0x0A,0x04);
hamid567 8:b5fb9681869c 42 writeSPIregister(0x0C,0x01);
hamid567 8:b5fb9681869c 43 writeSPIregister(0x0B,0x01);/*
hamid567 8:b5fb9681869c 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 8:b5fb9681869c 93 /* oude code terugzetten*/
hamid567 8:b5fb9681869c 94
hamid567 8:b5fb9681869c 95 uint32_t LDC1000::readRawCounts(void)
hamid567 8:b5fb9681869c 96 {
hamid567 8:b5fb9681869c 97 //union
hamid567 8:b5fb9681869c 98 //{
hamid567 8:b5fb9681869c 99 // uint8_t buf[4];
hamid567 8:b5fb9681869c 100 // uint32_t value;
hamid567 8:b5fb9681869c 101 //} val;
hamid567 8:b5fb9681869c 102 //val.value = 0;
hamid567 8:b5fb9681869c 103 uint8_t val[5];
hamid567 8:b5fb9681869c 104 readSPI(val,0x21,5);
hamid567 8:b5fb9681869c 105 return (uint32_t)(*(&val[2]));
hamid567 8:b5fb9681869c 106 }
hamid567 8:b5fb9681869c 107
hamid567 8:b5fb9681869c 108
hamid567 8:b5fb9681869c 109
hamid567 8:b5fb9681869c 110
hamid567 8:b5fb9681869c 111
hamid567 8:b5fb9681869c 112 /*
vsluiter 0:90873b4e8330 113 uint32_t LDC1000::readRawCounts(void)
vsluiter 0:90873b4e8330 114 {
vsluiter 0:90873b4e8330 115 union
vsluiter 0:90873b4e8330 116 {
vsluiter 0:90873b4e8330 117 uint8_t buf[4];
vsluiter 0:90873b4e8330 118 uint32_t value;
vsluiter 0:90873b4e8330 119 } val;
hamid567 8:b5fb9681869c 120 val.value = 8;
hamid567 8:b5fb9681869c 121 readSPI(val.buf,0x23,3);
vsluiter 0:90873b4e8330 122 return val.value;
vsluiter 0:90873b4e8330 123 }
hamid567 8:b5fb9681869c 124 */
hamid567 5:98d4fd07734a 125
vsluiter 0:90873b4e8330 126 void LDC1000::readSPI(uint8_t *data, uint8_t address, uint8_t num_bytes)
vsluiter 0:90873b4e8330 127 {
vsluiter 0:90873b4e8330 128 _cs_pin.write(0);
vsluiter 0:90873b4e8330 129 _spiport.write(address | 0x80); //read flag
vsluiter 0:90873b4e8330 130 for(int i=0; i < num_bytes ; i++)
vsluiter 0:90873b4e8330 131 {
hamid567 1:a88df80e7664 132 data[i] = _spiport.write(0xFF);
vsluiter 0:90873b4e8330 133 }
vsluiter 0:90873b4e8330 134 _cs_pin.write(1);
vsluiter 0:90873b4e8330 135 }
vsluiter 0:90873b4e8330 136
vsluiter 0:90873b4e8330 137 void LDC1000::writeSPI(uint8_t *data, uint8_t address, uint8_t num_bytes)
vsluiter 0:90873b4e8330 138 {
vsluiter 0:90873b4e8330 139 _cs_pin.write(0);
vsluiter 0:90873b4e8330 140 _spiport.write(address);
vsluiter 0:90873b4e8330 141 for(int i=0; i < num_bytes ; i++)
vsluiter 0:90873b4e8330 142 {
hamid567 1:a88df80e7664 143 _spiport.write(data[i]);
vsluiter 0:90873b4e8330 144 }
vsluiter 0:90873b4e8330 145 _cs_pin.write(1);
hamid567 8:b5fb9681869c 146 }
hamid567 8:b5fb9681869c 147
hamid567 8:b5fb9681869c 148 // EXTRA test get and print variables values to verify (to calculate the induction)
hamid567 8:b5fb9681869c 149 // Begin ***********************************************************
hamid567 8:b5fb9681869c 150 float LDC1000::get_raw_l() {_raw_l = readRawCounts();
hamid567 8:b5fb9681869c 151 return _raw_l;};
hamid567 8:b5fb9681869c 152 float LDC1000::get_fsensor() {
hamid567 8:b5fb9681869c 153 uint16_t resp[] = {0, 0, 192, 384, 768, 1536, 3072, 6144};
hamid567 8:b5fb9681869c 154 _raw_l = readRawCounts();
hamid567 8:b5fb9681869c 155 _fsensor = (_frequency/(_raw_l*3.0))*resp[(uint8_t)(_responsetime)];
hamid567 8:b5fb9681869c 156 return _fsensor;};
hamid567 8:b5fb9681869c 157
hamid567 8:b5fb9681869c 158 float LDC1000::get_frequency() {return _frequency;};
hamid567 8:b5fb9681869c 159 float LDC1000::get_responsetime() {return _responsetime;};
hamid567 8:b5fb9681869c 160 float LDC1000::get_cap() {return cap;};
hamid567 8:b5fb9681869c 161 // END ***********************************************************
hamid567 8:b5fb9681869c 162