Library to communicate with LDC1614
Dependents: Inductive_Sensor_3
Fork of LDC1101 by
Diff: LDC1101.h
- Revision:
- 16:07d0e43c2d12
- Child:
- 17:a5cf2b4bec13
diff -r 8a09279a05eb -r 07d0e43c2d12 LDC1101.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LDC1101.h Thu Dec 10 15:12:16 2015 +0000 @@ -0,0 +1,123 @@ +#ifndef _LDC1101_H_ +#define _LDC1101_H_ + +#include "FastPWM.h" +/** +* @file LDC1101.h +* @brief this header file will contain all required +* definitions for the functions to interface with Texas +* Instruments' LDC1101. +* +* @author Victor Sluiter +* +* @date 2015-12-09 +*/ + +#include "mbed.h" + +#ifndef PI +#define PI 3.14 +#endif + +typedef enum { LDC_RESPONSE_192 = 2, \ + LDC_RESPONSE_384 = 3, \ + LDC_RESPONSE_768 = 4, \ + LDC_RESPONSE_1536= 5, \ + LDC_RESPONSE_3072= 6, \ + LDC_RESPONSE_6144= 7} LDC_RESPONSE; + +typedef enum { LDC_MODE_ACTIVE = 0, \ + LDC_MODE_STANDBY = 1, \ + LDC_MODE_SHUTDOWN = 2} LDC_MODE; + +/** +* Class for the LDC1101. +* @author Victor Sluiter +* @date 2015-12-09 +*/ +class LDC1101 +{ + public: + /** + * @brief Create a new Class to interface to an LDC1101 + **/ + LDC1101(PinName mosi, PinName miso, PinName sck, PinName cs, float capacitor, float f_external, PinName clock_out=NC); + + /** + * @brief Set power mode. + * The constructor sets the LDC1101 in Active mode. + * @param mode choose from LDC_MODE_ACTIVE, LDC_MODE STANDBY or LDC_MODE_SHUTDOWN + **/ + void mode(LDC_MODE mode) { writeSPI((uint8_t *)(&mode), 0x0B); }; + + /** + * @brief initial configurations + **/ + void init(void); + + /** + * @brief get the calculated inductance value + **/ + float getInductance(void); + + + // EXTRA test get variables values to verify (to calculate the induction) + float get_raw_l(void); + float get_fsensor(void); + float get_frequency(void); + float get_responsetime(void); + float get_cap(void); + + + /** + * @brief Set the value of the external capacitor + * This is needed for the calculation of the inductance. + **/ + void setCapacitor(float c){cap = c;}; + /** + * @brief set the value of the external clock + * If PWMout is used to generate a clock signal, this will update the output frequency.s + **/ + void setFrequency(float frequency); + /** + * @brief Read the raw 24-bit inductance value. + * This is needed for the calculation of the inductance. + **/ + uint32_t readRawL(void){_raw_l = readRawCounts(); return _raw_l;}; + + + /** + * @brief Set the Response Time parameters. + * @param responsetime + * Larger value increases accuracy, but slows down the output data rate. Choose one of these values: + * - LDC_RESPONSE_192 + * - LDC_RESPONSE_384 + * - LDC_RESPONSE_768 + * - LDC_RESPONSE_1536 + * - LDC_RESPONSE_3072 + * - LDC_RESPONSE_6144 + **/ + void setResponseTime(LDC_RESPONSE responsetime); + + private: + void readSPI(uint8_t *data, uint8_t address, uint8_t num_bytes = 1); + void writeSPI(uint8_t *data, uint8_t address, uint8_t num_bytes = 1); + void writeSPIregister(uint8_t reg, uint8_t value){writeSPI(&value,reg);}; // VERKEERD OM?! + + uint32_t readRawCounts(void); + uint32_t readINTB(void); // EXTRA UNTB Read register + LDC_RESPONSE _responsetime; + float _fsensor; + float _inductance; + float _frequency; //frequency of external clock + float cap; + uint32_t _raw_l; + uint32_t INTB; // extra: read register INTB + + SPI _spiport; + DigitalOut _cs_pin; + + FastPWM _clock; +}; + +#endif \ No newline at end of file