A collection of Analog Devices drivers for the mbed platform
For additional information check out the mbed page of the Analog Devices wiki: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
libraries/CN0396/CN0396.h@33:c3ec596a29c2, 2016-11-07 (annotated)
- Committer:
- Adrian Suciu
- Date:
- Mon Nov 07 16:27:12 2016 +0200
- Revision:
- 33:c3ec596a29c2
Added CN0391, CN0396 and CN0397 shields
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Adrian Suciu |
33:c3ec596a29c2 | 1 | #ifndef _CN0396_H_ |
| Adrian Suciu |
33:c3ec596a29c2 | 2 | #define _CN0396_H_ |
| Adrian Suciu |
33:c3ec596a29c2 | 3 | #include <mbed.h> |
| Adrian Suciu |
33:c3ec596a29c2 | 4 | #include "AD7798.h" |
| Adrian Suciu |
33:c3ec596a29c2 | 5 | #include "AD5270.h" |
| Adrian Suciu |
33:c3ec596a29c2 | 6 | #include "ADT7310.h" |
| Adrian Suciu |
33:c3ec596a29c2 | 7 | |
| Adrian Suciu |
33:c3ec596a29c2 | 8 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 9 | * @brief The CN0396 class |
| Adrian Suciu |
33:c3ec596a29c2 | 10 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 11 | class CN0396 |
| Adrian Suciu |
33:c3ec596a29c2 | 12 | { |
| Adrian Suciu |
33:c3ec596a29c2 | 13 | public: |
| Adrian Suciu |
33:c3ec596a29c2 | 14 | |
| Adrian Suciu |
33:c3ec596a29c2 | 15 | #define V_REF 1.200 // [V] |
| Adrian Suciu |
33:c3ec596a29c2 | 16 | #define _2_16 65535.0 // 2^16 |
| Adrian Suciu |
33:c3ec596a29c2 | 17 | #define _2_15 32767.0 // 2^16 |
| Adrian Suciu |
33:c3ec596a29c2 | 18 | #define COMPENSATION_TABLE_SIZE 9 |
| Adrian Suciu |
33:c3ec596a29c2 | 19 | |
| Adrian Suciu |
33:c3ec596a29c2 | 20 | typedef enum { |
| Adrian Suciu |
33:c3ec596a29c2 | 21 | CO_SENSOR, |
| Adrian Suciu |
33:c3ec596a29c2 | 22 | H2S_SENSOR |
| Adrian Suciu |
33:c3ec596a29c2 | 23 | } sensor_type_t; |
| Adrian Suciu |
33:c3ec596a29c2 | 24 | |
| Adrian Suciu |
33:c3ec596a29c2 | 25 | typedef struct { |
| Adrian Suciu |
33:c3ec596a29c2 | 26 | int8_t temp; |
| Adrian Suciu |
33:c3ec596a29c2 | 27 | float CO_percent; |
| Adrian Suciu |
33:c3ec596a29c2 | 28 | float H2S_percent; |
| Adrian Suciu |
33:c3ec596a29c2 | 29 | } ppm_compensation_t; |
| Adrian Suciu |
33:c3ec596a29c2 | 30 | |
| Adrian Suciu |
33:c3ec596a29c2 | 31 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 32 | * @brief compensation look-up table |
| Adrian Suciu |
33:c3ec596a29c2 | 33 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 34 | const ppm_compensation_t ppm_compensation[COMPENSATION_TABLE_SIZE] = { |
| Adrian Suciu |
33:c3ec596a29c2 | 35 | { -30 , 29.9 , 82.3 }, |
| Adrian Suciu |
33:c3ec596a29c2 | 36 | { -20 , 38.8 , 84.6 }, |
| Adrian Suciu |
33:c3ec596a29c2 | 37 | { -10 , 53.7 , 88.6 }, |
| Adrian Suciu |
33:c3ec596a29c2 | 38 | {0 , 69.6 , 92.2 }, |
| Adrian Suciu |
33:c3ec596a29c2 | 39 | {10 , 84.9 , 96.2 }, |
| Adrian Suciu |
33:c3ec596a29c2 | 40 | {20 , 100.0 , 100.0}, |
| Adrian Suciu |
33:c3ec596a29c2 | 41 | {30 , 112.7 , 103.1}, |
| Adrian Suciu |
33:c3ec596a29c2 | 42 | {40 , 123.7 , 105.6}, |
| Adrian Suciu |
33:c3ec596a29c2 | 43 | {50 , 133.1 , 107.4} |
| Adrian Suciu |
33:c3ec596a29c2 | 44 | }; |
| Adrian Suciu |
33:c3ec596a29c2 | 45 | |
| Adrian Suciu |
33:c3ec596a29c2 | 46 | |
| Adrian Suciu |
33:c3ec596a29c2 | 47 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 48 | * @brief CN0396 class constructor |
| Adrian Suciu |
33:c3ec596a29c2 | 49 | * @param csad - chipselect pin of the ADC |
| Adrian Suciu |
33:c3ec596a29c2 | 50 | * @param csrdac - chipselect pin of the RDAC |
| Adrian Suciu |
33:c3ec596a29c2 | 51 | * @param cstemp - chipselect pin of the temperature sensor |
| Adrian Suciu |
33:c3ec596a29c2 | 52 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 53 | CN0396(PinName csad, PinName csrdac, PinName cstemp); |
| Adrian Suciu |
33:c3ec596a29c2 | 54 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 55 | * @brief Initializes the board |
| Adrian Suciu |
33:c3ec596a29c2 | 56 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 57 | void init(); |
| Adrian Suciu |
33:c3ec596a29c2 | 58 | |
| Adrian Suciu |
33:c3ec596a29c2 | 59 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 60 | * @brief - Reads the sensor and computes the PPM values |
| Adrian Suciu |
33:c3ec596a29c2 | 61 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 62 | void read(); |
| Adrian Suciu |
33:c3ec596a29c2 | 63 | |
| Adrian Suciu |
33:c3ec596a29c2 | 64 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 65 | * @brief computes the feedback resistor value for the sensor |
| Adrian Suciu |
33:c3ec596a29c2 | 66 | * @param sensitivity - sensor sensitivity |
| Adrian Suciu |
33:c3ec596a29c2 | 67 | * @param range - sensor range |
| Adrian Suciu |
33:c3ec596a29c2 | 68 | * @return resistor value |
| Adrian Suciu |
33:c3ec596a29c2 | 69 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 70 | float get_feedback_resistor_value(float sensitivity, float range); |
| Adrian Suciu |
33:c3ec596a29c2 | 71 | |
| Adrian Suciu |
33:c3ec596a29c2 | 72 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 73 | * @brief configures the RDACs with the resistance values |
| Adrian Suciu |
33:c3ec596a29c2 | 74 | * @param resistance1 - resistance of RDAC1 |
| Adrian Suciu |
33:c3ec596a29c2 | 75 | * @param resistance2 - resistance of RDAC2 |
| Adrian Suciu |
33:c3ec596a29c2 | 76 | * @return |
| Adrian Suciu |
33:c3ec596a29c2 | 77 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 78 | void configure_feedback_resistors(float resistance1, float resistance2); |
| Adrian Suciu |
33:c3ec596a29c2 | 79 | |
| Adrian Suciu |
33:c3ec596a29c2 | 80 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 81 | * @brief computes ADC counts-to-voltage in unipolar configuration |
| Adrian Suciu |
33:c3ec596a29c2 | 82 | * @param adcValue - value in counts |
| Adrian Suciu |
33:c3ec596a29c2 | 83 | * @param voltage - voltage value returned by the method |
| Adrian Suciu |
33:c3ec596a29c2 | 84 | * @param gain_adc - the gain of the adc |
| Adrian Suciu |
33:c3ec596a29c2 | 85 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 86 | void data_to_voltage(uint16_t adcValue, float *voltage, int gain_adc = 1); |
| Adrian Suciu |
33:c3ec596a29c2 | 87 | |
| Adrian Suciu |
33:c3ec596a29c2 | 88 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 89 | * @brief computes ADC counts-to-voltage in bipolar configuration |
| Adrian Suciu |
33:c3ec596a29c2 | 90 | * @param adcValue - value in counts |
| Adrian Suciu |
33:c3ec596a29c2 | 91 | * @param voltage - voltage value returned by the method |
| Adrian Suciu |
33:c3ec596a29c2 | 92 | * @param gain_adc - the gain of the adc |
| Adrian Suciu |
33:c3ec596a29c2 | 93 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 94 | void data_to_voltage_bipolar(uint16_t adcValue, float *voltage, int gain_adc = 1); |
| Adrian Suciu |
33:c3ec596a29c2 | 95 | |
| Adrian Suciu |
33:c3ec596a29c2 | 96 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 97 | * @brief compensates ppm value based on temperature reading |
| Adrian Suciu |
33:c3ec596a29c2 | 98 | * @param result - ppm value before compensation |
| Adrian Suciu |
33:c3ec596a29c2 | 99 | * @param temp - temperature used in compensation |
| Adrian Suciu |
33:c3ec596a29c2 | 100 | * @param sensor - sensor id |
| Adrian Suciu |
33:c3ec596a29c2 | 101 | * @return compensated value |
| Adrian Suciu |
33:c3ec596a29c2 | 102 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 103 | float compensate_ppm(float result, float temp, sensor_type_t sensor); |
| Adrian Suciu |
33:c3ec596a29c2 | 104 | DigitalOut csad, csrdac, cstemp; |
| Adrian Suciu |
33:c3ec596a29c2 | 105 | AD7798 ad; |
| Adrian Suciu |
33:c3ec596a29c2 | 106 | AD5270 rdac; |
| Adrian Suciu |
33:c3ec596a29c2 | 107 | ADT7310 temp; |
| Adrian Suciu |
33:c3ec596a29c2 | 108 | float resistance0, resistance1; |
| Adrian Suciu |
33:c3ec596a29c2 | 109 | private: |
| Adrian Suciu |
33:c3ec596a29c2 | 110 | |
| Adrian Suciu |
33:c3ec596a29c2 | 111 | |
| Adrian Suciu |
33:c3ec596a29c2 | 112 | }; |
| Adrian Suciu |
33:c3ec596a29c2 | 113 | #endif |
CN0357 - Toxic gas measurement
CN0216 - Weight Scale