Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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