Library to communicate with LDC1614
Dependents: Inductive_Sensor_3
Fork of LDC1101 by
LDC1101.h
- Committer:
- bobgiesberts
- Date:
- 2015-12-12
- Revision:
- 17:a5cf2b4bec13
- Parent:
- 16:07d0e43c2d12
- Child:
- 18:fc9bb81a631f
File content as of revision 17:a5cf2b4bec13:
#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; typedef enum { DIVIDER_1 = 0, \ DIVIDER_2 = 1, \ DIVIDER_4 = 2, \ DIVIDER_8 = 3} DIVIDER; /** * 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 Sensor divider (p.26) * @param div * Divides the sensor by a certain amount * - DIVIDER_1 * - DIVIDER_2 * - DIVIDER_4 * - DIVIDER_8 **/ void setDivider(DIVIDER div); /** * @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; DIVIDER _divider; 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