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/CN0391/CN0391.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 _CN0391_H_ |
| Adrian Suciu |
33:c3ec596a29c2 | 2 | #define _CN0391_H_ |
| Adrian Suciu |
33:c3ec596a29c2 | 3 | #include "AD7124.h" |
| Adrian Suciu |
33:c3ec596a29c2 | 4 | #include "Thermocouple.h" |
| Adrian Suciu |
33:c3ec596a29c2 | 5 | |
| Adrian Suciu |
33:c3ec596a29c2 | 6 | |
| Adrian Suciu |
33:c3ec596a29c2 | 7 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 8 | * @brief Thermocouple_Channel class |
| Adrian Suciu |
33:c3ec596a29c2 | 9 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 10 | class Thermocouple_Channel |
| Adrian Suciu |
33:c3ec596a29c2 | 11 | { |
| Adrian Suciu |
33:c3ec596a29c2 | 12 | private: |
| Adrian Suciu |
33:c3ec596a29c2 | 13 | public: |
| Adrian Suciu |
33:c3ec596a29c2 | 14 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 15 | * @brief Thermocouple channel constructor |
| Adrian Suciu |
33:c3ec596a29c2 | 16 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 17 | Thermocouple_Channel(); |
| Adrian Suciu |
33:c3ec596a29c2 | 18 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 19 | * @brief Constructs thermocouple channel using thermocouple type t |
| Adrian Suciu |
33:c3ec596a29c2 | 20 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 21 | Thermocouple_Channel(Thermocouple *t); |
| Adrian Suciu |
33:c3ec596a29c2 | 22 | |
| Adrian Suciu |
33:c3ec596a29c2 | 23 | Thermocouple *t; |
| Adrian Suciu |
33:c3ec596a29c2 | 24 | uint16_t thermocouple_channel; |
| Adrian Suciu |
33:c3ec596a29c2 | 25 | uint16_t rtd_channel; |
| Adrian Suciu |
33:c3ec596a29c2 | 26 | uint16_t calibration_channel; |
| Adrian Suciu |
33:c3ec596a29c2 | 27 | float calibration_current; |
| Adrian Suciu |
33:c3ec596a29c2 | 28 | |
| Adrian Suciu |
33:c3ec596a29c2 | 29 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 30 | * @brief gets thermocouple type |
| Adrian Suciu |
33:c3ec596a29c2 | 31 | * @return thermocouple type |
| Adrian Suciu |
33:c3ec596a29c2 | 32 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 33 | Thermocouple* get_thermocouple_type(); |
| Adrian Suciu |
33:c3ec596a29c2 | 34 | |
| Adrian Suciu |
33:c3ec596a29c2 | 35 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 36 | * @brief sets new thermocouple type |
| Adrian Suciu |
33:c3ec596a29c2 | 37 | * @param new_t new thermocouple type |
| Adrian Suciu |
33:c3ec596a29c2 | 38 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 39 | void set_thermocouple_type(Thermocouple* new_t); |
| Adrian Suciu |
33:c3ec596a29c2 | 40 | |
| Adrian Suciu |
33:c3ec596a29c2 | 41 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 42 | * @brief sets up thermocouple channel |
| Adrian Suciu |
33:c3ec596a29c2 | 43 | * @param new_t thermocouple type |
| Adrian Suciu |
33:c3ec596a29c2 | 44 | * @param thermocouple_channel - thermocouple ADC channel |
| Adrian Suciu |
33:c3ec596a29c2 | 45 | * @param rtd_channel - RTD ADC channel |
| Adrian Suciu |
33:c3ec596a29c2 | 46 | * @param calibration_channel - ADC channel used in calibration |
| Adrian Suciu |
33:c3ec596a29c2 | 47 | * |
| Adrian Suciu |
33:c3ec596a29c2 | 48 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 49 | void setup_channel(Thermocouple* new_t, uint16_t thermocouple_channel, uint16_t rtd_channel, uint16_t calibration_channel); |
| Adrian Suciu |
33:c3ec596a29c2 | 50 | }; |
| Adrian Suciu |
33:c3ec596a29c2 | 51 | |
| Adrian Suciu |
33:c3ec596a29c2 | 52 | class CN0391 |
| Adrian Suciu |
33:c3ec596a29c2 | 53 | { |
| Adrian Suciu |
33:c3ec596a29c2 | 54 | private: |
| Adrian Suciu |
33:c3ec596a29c2 | 55 | public: |
| Adrian Suciu |
33:c3ec596a29c2 | 56 | CN0391(PinName cs); |
| Adrian Suciu |
33:c3ec596a29c2 | 57 | |
| Adrian Suciu |
33:c3ec596a29c2 | 58 | typedef enum { |
| Adrian Suciu |
33:c3ec596a29c2 | 59 | CHANNEL_P1 = 0, |
| Adrian Suciu |
33:c3ec596a29c2 | 60 | CHANNEL_P2, |
| Adrian Suciu |
33:c3ec596a29c2 | 61 | CHANNEL_P3, |
| Adrian Suciu |
33:c3ec596a29c2 | 62 | CHANNEL_P4 |
| Adrian Suciu |
33:c3ec596a29c2 | 63 | } channel_t; |
| Adrian Suciu |
33:c3ec596a29c2 | 64 | |
| Adrian Suciu |
33:c3ec596a29c2 | 65 | Thermocouple_Channel tc[4]; |
| Adrian Suciu |
33:c3ec596a29c2 | 66 | |
| Adrian Suciu |
33:c3ec596a29c2 | 67 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 68 | * @brief sets channel with thermocouple type |
| Adrian Suciu |
33:c3ec596a29c2 | 69 | * @param ch - channel |
| Adrian Suciu |
33:c3ec596a29c2 | 70 | * @param new_t - thermocouple type |
| Adrian Suciu |
33:c3ec596a29c2 | 71 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 72 | void set_thermocouple_type(channel_t ch, Thermocouple* new_t); |
| Adrian Suciu |
33:c3ec596a29c2 | 73 | |
| Adrian Suciu |
33:c3ec596a29c2 | 74 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 75 | * @brief Reads thermocouple channel |
| Adrian Suciu |
33:c3ec596a29c2 | 76 | * @param ch - channel |
| Adrian Suciu |
33:c3ec596a29c2 | 77 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 78 | float read_channel(channel_t ch); |
| Adrian Suciu |
33:c3ec596a29c2 | 79 | |
| Adrian Suciu |
33:c3ec596a29c2 | 80 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 81 | * @brief Calibrate channel |
| Adrian Suciu |
33:c3ec596a29c2 | 82 | * @param ch - channel |
| Adrian Suciu |
33:c3ec596a29c2 | 83 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 84 | float calibrate(channel_t ch); |
| Adrian Suciu |
33:c3ec596a29c2 | 85 | |
| Adrian Suciu |
33:c3ec596a29c2 | 86 | |
| Adrian Suciu |
33:c3ec596a29c2 | 87 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 88 | * @brief converts ADC counts to voltage |
| Adrian Suciu |
33:c3ec596a29c2 | 89 | * @param data - ADC counts |
| Adrian Suciu |
33:c3ec596a29c2 | 90 | * @return voltage |
| Adrian Suciu |
33:c3ec596a29c2 | 91 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 92 | float data_to_voltage(uint32_t data); |
| Adrian Suciu |
33:c3ec596a29c2 | 93 | |
| Adrian Suciu |
33:c3ec596a29c2 | 94 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 95 | * @brief enables thermocouple channel |
| Adrian Suciu |
33:c3ec596a29c2 | 96 | * @param channel |
| Adrian Suciu |
33:c3ec596a29c2 | 97 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 98 | void enable_channel(int channel); |
| Adrian Suciu |
33:c3ec596a29c2 | 99 | |
| Adrian Suciu |
33:c3ec596a29c2 | 100 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 101 | * @brief disables thermocouple channel |
| Adrian Suciu |
33:c3ec596a29c2 | 102 | * @param channel |
| Adrian Suciu |
33:c3ec596a29c2 | 103 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 104 | void disable_channel(int channel); |
| Adrian Suciu |
33:c3ec596a29c2 | 105 | |
| Adrian Suciu |
33:c3ec596a29c2 | 106 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 107 | * @brief enables ADC current source |
| Adrian Suciu |
33:c3ec596a29c2 | 108 | * @param current_source_channel |
| Adrian Suciu |
33:c3ec596a29c2 | 109 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 110 | void enable_current_source(int current_source_channel); |
| Adrian Suciu |
33:c3ec596a29c2 | 111 | |
| Adrian Suciu |
33:c3ec596a29c2 | 112 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 113 | * @brief starts ADC single conversion |
| Adrian Suciu |
33:c3ec596a29c2 | 114 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 115 | void start_single_conversion(); |
| Adrian Suciu |
33:c3ec596a29c2 | 116 | |
| Adrian Suciu |
33:c3ec596a29c2 | 117 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 118 | * @brief resets the ADC |
| Adrian Suciu |
33:c3ec596a29c2 | 119 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 120 | void reset(); |
| Adrian Suciu |
33:c3ec596a29c2 | 121 | |
| Adrian Suciu |
33:c3ec596a29c2 | 122 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 123 | * @brief Performs ADC setup |
| Adrian Suciu |
33:c3ec596a29c2 | 124 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 125 | void setup(); |
| Adrian Suciu |
33:c3ec596a29c2 | 126 | |
| Adrian Suciu |
33:c3ec596a29c2 | 127 | /** |
| Adrian Suciu |
33:c3ec596a29c2 | 128 | * @brief Initializes the CN0391 shield |
| Adrian Suciu |
33:c3ec596a29c2 | 129 | */ |
| Adrian Suciu |
33:c3ec596a29c2 | 130 | void init(); |
| Adrian Suciu |
33:c3ec596a29c2 | 131 | |
| Adrian Suciu |
33:c3ec596a29c2 | 132 | AD7124 ad7124; |
| Adrian Suciu |
33:c3ec596a29c2 | 133 | |
| Adrian Suciu |
33:c3ec596a29c2 | 134 | |
| Adrian Suciu |
33:c3ec596a29c2 | 135 | }; |
| Adrian Suciu |
33:c3ec596a29c2 | 136 | #endif |
CN0357 - Toxic gas measurement
CN0216 - Weight Scale