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

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?

UserRevisionLine numberNew 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