Library to communicate with LDC1614

Dependencies:   SHTx

Dependents:   Inductive_Sensor_3

Fork of LDC1101 by Bob Giesberts

Committer:
bobgiesberts
Date:
Wed Dec 16 10:58:31 2015 +0000
Revision:
18:fc9bb81a631f
Parent:
17:a5cf2b4bec13
Child:
19:e205ab9142d8
First working code with realistic outcome values. Removed a lot of double coding and corrected an error in reading LHR_data. Some tweaking is still possible (necessary) to increase resolution, stability and accuracy.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bobgiesberts 16:07d0e43c2d12 1 #ifndef _LDC1101_H_
bobgiesberts 16:07d0e43c2d12 2 #define _LDC1101_H_
bobgiesberts 16:07d0e43c2d12 3
bobgiesberts 16:07d0e43c2d12 4 #include "FastPWM.h"
bobgiesberts 16:07d0e43c2d12 5 /**
bobgiesberts 16:07d0e43c2d12 6 * @file LDC1101.h
bobgiesberts 16:07d0e43c2d12 7 * @brief this header file will contain all required
bobgiesberts 16:07d0e43c2d12 8 * definitions for the functions to interface with Texas
bobgiesberts 16:07d0e43c2d12 9 * Instruments' LDC1101.
bobgiesberts 16:07d0e43c2d12 10 *
bobgiesberts 16:07d0e43c2d12 11 * @author Victor Sluiter
bobgiesberts 16:07d0e43c2d12 12 *
bobgiesberts 16:07d0e43c2d12 13 * @date 2015-12-09
bobgiesberts 16:07d0e43c2d12 14 */
bobgiesberts 16:07d0e43c2d12 15
bobgiesberts 16:07d0e43c2d12 16 #include "mbed.h"
bobgiesberts 16:07d0e43c2d12 17
bobgiesberts 16:07d0e43c2d12 18 #ifndef PI
bobgiesberts 16:07d0e43c2d12 19 #define PI 3.14
bobgiesberts 16:07d0e43c2d12 20 #endif
bobgiesberts 16:07d0e43c2d12 21
bobgiesberts 16:07d0e43c2d12 22 typedef enum { LDC_RESPONSE_192 = 2, \
bobgiesberts 16:07d0e43c2d12 23 LDC_RESPONSE_384 = 3, \
bobgiesberts 16:07d0e43c2d12 24 LDC_RESPONSE_768 = 4, \
bobgiesberts 16:07d0e43c2d12 25 LDC_RESPONSE_1536= 5, \
bobgiesberts 16:07d0e43c2d12 26 LDC_RESPONSE_3072= 6, \
bobgiesberts 16:07d0e43c2d12 27 LDC_RESPONSE_6144= 7} LDC_RESPONSE;
bobgiesberts 16:07d0e43c2d12 28
bobgiesberts 16:07d0e43c2d12 29 typedef enum { LDC_MODE_ACTIVE = 0, \
bobgiesberts 16:07d0e43c2d12 30 LDC_MODE_STANDBY = 1, \
bobgiesberts 16:07d0e43c2d12 31 LDC_MODE_SHUTDOWN = 2} LDC_MODE;
bobgiesberts 16:07d0e43c2d12 32
bobgiesberts 17:a5cf2b4bec13 33 typedef enum { DIVIDER_1 = 0, \
bobgiesberts 17:a5cf2b4bec13 34 DIVIDER_2 = 1, \
bobgiesberts 17:a5cf2b4bec13 35 DIVIDER_4 = 2, \
bobgiesberts 17:a5cf2b4bec13 36 DIVIDER_8 = 3} DIVIDER;
bobgiesberts 17:a5cf2b4bec13 37
bobgiesberts 17:a5cf2b4bec13 38
bobgiesberts 16:07d0e43c2d12 39 /**
bobgiesberts 16:07d0e43c2d12 40 * Class for the LDC1101.
bobgiesberts 16:07d0e43c2d12 41 * @author Victor Sluiter
bobgiesberts 16:07d0e43c2d12 42 * @date 2015-12-09
bobgiesberts 16:07d0e43c2d12 43 */
bobgiesberts 16:07d0e43c2d12 44 class LDC1101
bobgiesberts 16:07d0e43c2d12 45 {
bobgiesberts 16:07d0e43c2d12 46 public:
bobgiesberts 16:07d0e43c2d12 47 /**
bobgiesberts 16:07d0e43c2d12 48 * @brief Create a new Class to interface to an LDC1101
bobgiesberts 16:07d0e43c2d12 49 **/
bobgiesberts 18:fc9bb81a631f 50 LDC1101(PinName mosi, PinName miso, PinName sck, PinName cs, float capacitor, float f_CLKIN, PinName clock_out=NC);
bobgiesberts 16:07d0e43c2d12 51
bobgiesberts 16:07d0e43c2d12 52 /**
bobgiesberts 16:07d0e43c2d12 53 * @brief Set power mode.
bobgiesberts 16:07d0e43c2d12 54 * The constructor sets the LDC1101 in Active mode.
bobgiesberts 16:07d0e43c2d12 55 * @param mode choose from LDC_MODE_ACTIVE, LDC_MODE STANDBY or LDC_MODE_SHUTDOWN
bobgiesberts 16:07d0e43c2d12 56 **/
bobgiesberts 16:07d0e43c2d12 57 void mode(LDC_MODE mode) { writeSPI((uint8_t *)(&mode), 0x0B); };
bobgiesberts 16:07d0e43c2d12 58
bobgiesberts 16:07d0e43c2d12 59 /**
bobgiesberts 16:07d0e43c2d12 60 * @brief initial configurations
bobgiesberts 16:07d0e43c2d12 61 **/
bobgiesberts 16:07d0e43c2d12 62 void init(void);
bobgiesberts 16:07d0e43c2d12 63
bobgiesberts 16:07d0e43c2d12 64 /**
bobgiesberts 17:a5cf2b4bec13 65 * @brief Sensor divider (p.26)
bobgiesberts 17:a5cf2b4bec13 66 * @param div
bobgiesberts 17:a5cf2b4bec13 67 * Divides the sensor by a certain amount
bobgiesberts 17:a5cf2b4bec13 68 * - DIVIDER_1
bobgiesberts 17:a5cf2b4bec13 69 * - DIVIDER_2
bobgiesberts 17:a5cf2b4bec13 70 * - DIVIDER_4
bobgiesberts 17:a5cf2b4bec13 71 * - DIVIDER_8
bobgiesberts 17:a5cf2b4bec13 72 **/
bobgiesberts 17:a5cf2b4bec13 73 void setDivider(DIVIDER div);
bobgiesberts 17:a5cf2b4bec13 74
bobgiesberts 18:fc9bb81a631f 75
bobgiesberts 18:fc9bb81a631f 76 /**
bobgiesberts 18:fc9bb81a631f 77 * @brief get the calculated value for f_sensor
bobgiesberts 18:fc9bb81a631f 78 **/
bobgiesberts 18:fc9bb81a631f 79 float get_fsensor(void);
bobgiesberts 18:fc9bb81a631f 80
bobgiesberts 18:fc9bb81a631f 81
bobgiesberts 17:a5cf2b4bec13 82 /**
bobgiesberts 16:07d0e43c2d12 83 * @brief get the calculated inductance value
bobgiesberts 16:07d0e43c2d12 84 **/
bobgiesberts 18:fc9bb81a631f 85 float get_Inductance(void);
bobgiesberts 16:07d0e43c2d12 86
bobgiesberts 16:07d0e43c2d12 87
bobgiesberts 16:07d0e43c2d12 88 // EXTRA test get variables values to verify (to calculate the induction)
bobgiesberts 18:fc9bb81a631f 89 float get_fCLKIN(void);
bobgiesberts 16:07d0e43c2d12 90 float get_responsetime(void);
bobgiesberts 16:07d0e43c2d12 91 float get_cap(void);
bobgiesberts 16:07d0e43c2d12 92
bobgiesberts 16:07d0e43c2d12 93
bobgiesberts 16:07d0e43c2d12 94 /**
bobgiesberts 16:07d0e43c2d12 95 * @brief Set the value of the external capacitor
bobgiesberts 16:07d0e43c2d12 96 * This is needed for the calculation of the inductance.
bobgiesberts 16:07d0e43c2d12 97 **/
bobgiesberts 16:07d0e43c2d12 98 void setCapacitor(float c){cap = c;};
bobgiesberts 16:07d0e43c2d12 99 /**
bobgiesberts 16:07d0e43c2d12 100 * @brief set the value of the external clock
bobgiesberts 16:07d0e43c2d12 101 * If PWMout is used to generate a clock signal, this will update the output frequency.s
bobgiesberts 16:07d0e43c2d12 102 **/
bobgiesberts 16:07d0e43c2d12 103 void setFrequency(float frequency);
bobgiesberts 18:fc9bb81a631f 104
bobgiesberts 16:07d0e43c2d12 105 /**
bobgiesberts 18:fc9bb81a631f 106 * @brief Read LHR_Data, the raw 24-bit inductance value.
bobgiesberts 16:07d0e43c2d12 107 * This is needed for the calculation of the inductance.
bobgiesberts 18:fc9bb81a631f 108 * It reads from addresses 0x38, 0x39 & 0x3A.
bobgiesberts 16:07d0e43c2d12 109 **/
bobgiesberts 18:fc9bb81a631f 110 uint32_t get_LHR_Data(void);
bobgiesberts 16:07d0e43c2d12 111
bobgiesberts 16:07d0e43c2d12 112
bobgiesberts 16:07d0e43c2d12 113 /**
bobgiesberts 16:07d0e43c2d12 114 * @brief Set the Response Time parameters.
bobgiesberts 16:07d0e43c2d12 115 * @param responsetime
bobgiesberts 16:07d0e43c2d12 116 * Larger value increases accuracy, but slows down the output data rate. Choose one of these values:
bobgiesberts 16:07d0e43c2d12 117 * - LDC_RESPONSE_192
bobgiesberts 16:07d0e43c2d12 118 * - LDC_RESPONSE_384
bobgiesberts 16:07d0e43c2d12 119 * - LDC_RESPONSE_768
bobgiesberts 16:07d0e43c2d12 120 * - LDC_RESPONSE_1536
bobgiesberts 16:07d0e43c2d12 121 * - LDC_RESPONSE_3072
bobgiesberts 16:07d0e43c2d12 122 * - LDC_RESPONSE_6144
bobgiesberts 16:07d0e43c2d12 123 **/
bobgiesberts 16:07d0e43c2d12 124 void setResponseTime(LDC_RESPONSE responsetime);
bobgiesberts 16:07d0e43c2d12 125
bobgiesberts 16:07d0e43c2d12 126 private:
bobgiesberts 16:07d0e43c2d12 127 void readSPI(uint8_t *data, uint8_t address, uint8_t num_bytes = 1);
bobgiesberts 16:07d0e43c2d12 128 void writeSPI(uint8_t *data, uint8_t address, uint8_t num_bytes = 1);
bobgiesberts 16:07d0e43c2d12 129 void writeSPIregister(uint8_t reg, uint8_t value){writeSPI(&value,reg);}; // VERKEERD OM?!
bobgiesberts 16:07d0e43c2d12 130
bobgiesberts 16:07d0e43c2d12 131 uint32_t readINTB(void); // EXTRA UNTB Read register
bobgiesberts 18:fc9bb81a631f 132 LDC_RESPONSE _responsetime_;
bobgiesberts 18:fc9bb81a631f 133 DIVIDER _divider_;
bobgiesberts 18:fc9bb81a631f 134 float _responsetime;
bobgiesberts 18:fc9bb81a631f 135 float _divider;
bobgiesberts 16:07d0e43c2d12 136 float _fsensor;
bobgiesberts 16:07d0e43c2d12 137 float _inductance;
bobgiesberts 18:fc9bb81a631f 138 float _fCLKIN; //frequency of external clock: 16MHz
bobgiesberts 16:07d0e43c2d12 139 float cap;
bobgiesberts 18:fc9bb81a631f 140 uint32_t _L_data;
bobgiesberts 16:07d0e43c2d12 141 uint32_t INTB; // extra: read register INTB
bobgiesberts 16:07d0e43c2d12 142
bobgiesberts 16:07d0e43c2d12 143 SPI _spiport;
bobgiesberts 16:07d0e43c2d12 144 DigitalOut _cs_pin;
bobgiesberts 16:07d0e43c2d12 145
bobgiesberts 17:a5cf2b4bec13 146 //FastPWM _clock;
bobgiesberts 16:07d0e43c2d12 147 };
bobgiesberts 16:07d0e43c2d12 148
bobgiesberts 16:07d0e43c2d12 149 #endif