CN0391 4-thermocouple shield driver
Dependencies: AD7124 Thermocouple
For additional information check out the mbed page of the Analog Devices wiki: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
CN0391.h@0:69053d5c21ee, 2016-11-07 (annotated)
- Committer:
- adisuciu
- Date:
- Mon Nov 07 15:48:05 2016 +0000
- Revision:
- 0:69053d5c21ee
Initial revision
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
adisuciu | 0:69053d5c21ee | 1 | #ifndef _CN0391_H_ |
adisuciu | 0:69053d5c21ee | 2 | #define _CN0391_H_ |
adisuciu | 0:69053d5c21ee | 3 | #include "AD7124.h" |
adisuciu | 0:69053d5c21ee | 4 | #include "Thermocouple.h" |
adisuciu | 0:69053d5c21ee | 5 | |
adisuciu | 0:69053d5c21ee | 6 | |
adisuciu | 0:69053d5c21ee | 7 | /** |
adisuciu | 0:69053d5c21ee | 8 | * @brief Thermocouple_Channel class |
adisuciu | 0:69053d5c21ee | 9 | */ |
adisuciu | 0:69053d5c21ee | 10 | class Thermocouple_Channel |
adisuciu | 0:69053d5c21ee | 11 | { |
adisuciu | 0:69053d5c21ee | 12 | private: |
adisuciu | 0:69053d5c21ee | 13 | public: |
adisuciu | 0:69053d5c21ee | 14 | /** |
adisuciu | 0:69053d5c21ee | 15 | * @brief Thermocouple channel constructor |
adisuciu | 0:69053d5c21ee | 16 | */ |
adisuciu | 0:69053d5c21ee | 17 | Thermocouple_Channel(); |
adisuciu | 0:69053d5c21ee | 18 | /** |
adisuciu | 0:69053d5c21ee | 19 | * @brief Constructs thermocouple channel using thermocouple type t |
adisuciu | 0:69053d5c21ee | 20 | */ |
adisuciu | 0:69053d5c21ee | 21 | Thermocouple_Channel(Thermocouple *t); |
adisuciu | 0:69053d5c21ee | 22 | |
adisuciu | 0:69053d5c21ee | 23 | Thermocouple *t; |
adisuciu | 0:69053d5c21ee | 24 | uint16_t thermocouple_channel; |
adisuciu | 0:69053d5c21ee | 25 | uint16_t rtd_channel; |
adisuciu | 0:69053d5c21ee | 26 | uint16_t calibration_channel; |
adisuciu | 0:69053d5c21ee | 27 | float calibration_current; |
adisuciu | 0:69053d5c21ee | 28 | |
adisuciu | 0:69053d5c21ee | 29 | /** |
adisuciu | 0:69053d5c21ee | 30 | * @brief gets thermocouple type |
adisuciu | 0:69053d5c21ee | 31 | * @return thermocouple type |
adisuciu | 0:69053d5c21ee | 32 | */ |
adisuciu | 0:69053d5c21ee | 33 | Thermocouple* get_thermocouple_type(); |
adisuciu | 0:69053d5c21ee | 34 | |
adisuciu | 0:69053d5c21ee | 35 | /** |
adisuciu | 0:69053d5c21ee | 36 | * @brief sets new thermocouple type |
adisuciu | 0:69053d5c21ee | 37 | * @param new_t new thermocouple type |
adisuciu | 0:69053d5c21ee | 38 | */ |
adisuciu | 0:69053d5c21ee | 39 | void set_thermocouple_type(Thermocouple* new_t); |
adisuciu | 0:69053d5c21ee | 40 | |
adisuciu | 0:69053d5c21ee | 41 | /** |
adisuciu | 0:69053d5c21ee | 42 | * @brief sets up thermocouple channel |
adisuciu | 0:69053d5c21ee | 43 | * @param new_t thermocouple type |
adisuciu | 0:69053d5c21ee | 44 | * @param thermocouple_channel - thermocouple ADC channel |
adisuciu | 0:69053d5c21ee | 45 | * @param rtd_channel - RTD ADC channel |
adisuciu | 0:69053d5c21ee | 46 | * @param calibration_channel - ADC channel used in calibration |
adisuciu | 0:69053d5c21ee | 47 | * |
adisuciu | 0:69053d5c21ee | 48 | */ |
adisuciu | 0:69053d5c21ee | 49 | void setup_channel(Thermocouple* new_t, uint16_t thermocouple_channel, uint16_t rtd_channel, uint16_t calibration_channel); |
adisuciu | 0:69053d5c21ee | 50 | }; |
adisuciu | 0:69053d5c21ee | 51 | |
adisuciu | 0:69053d5c21ee | 52 | class CN0391 |
adisuciu | 0:69053d5c21ee | 53 | { |
adisuciu | 0:69053d5c21ee | 54 | private: |
adisuciu | 0:69053d5c21ee | 55 | public: |
adisuciu | 0:69053d5c21ee | 56 | CN0391(PinName cs); |
adisuciu | 0:69053d5c21ee | 57 | |
adisuciu | 0:69053d5c21ee | 58 | typedef enum { |
adisuciu | 0:69053d5c21ee | 59 | CHANNEL_P1 = 0, |
adisuciu | 0:69053d5c21ee | 60 | CHANNEL_P2, |
adisuciu | 0:69053d5c21ee | 61 | CHANNEL_P3, |
adisuciu | 0:69053d5c21ee | 62 | CHANNEL_P4 |
adisuciu | 0:69053d5c21ee | 63 | } channel_t; |
adisuciu | 0:69053d5c21ee | 64 | |
adisuciu | 0:69053d5c21ee | 65 | Thermocouple_Channel tc[4]; |
adisuciu | 0:69053d5c21ee | 66 | |
adisuciu | 0:69053d5c21ee | 67 | /** |
adisuciu | 0:69053d5c21ee | 68 | * @brief sets channel with thermocouple type |
adisuciu | 0:69053d5c21ee | 69 | * @param ch - channel |
adisuciu | 0:69053d5c21ee | 70 | * @param new_t - thermocouple type |
adisuciu | 0:69053d5c21ee | 71 | */ |
adisuciu | 0:69053d5c21ee | 72 | void set_thermocouple_type(channel_t ch, Thermocouple* new_t); |
adisuciu | 0:69053d5c21ee | 73 | |
adisuciu | 0:69053d5c21ee | 74 | /** |
adisuciu | 0:69053d5c21ee | 75 | * @brief Reads thermocouple channel |
adisuciu | 0:69053d5c21ee | 76 | * @param ch - channel |
adisuciu | 0:69053d5c21ee | 77 | */ |
adisuciu | 0:69053d5c21ee | 78 | float read_channel(channel_t ch); |
adisuciu | 0:69053d5c21ee | 79 | |
adisuciu | 0:69053d5c21ee | 80 | /** |
adisuciu | 0:69053d5c21ee | 81 | * @brief Calibrate channel |
adisuciu | 0:69053d5c21ee | 82 | * @param ch - channel |
adisuciu | 0:69053d5c21ee | 83 | */ |
adisuciu | 0:69053d5c21ee | 84 | float calibrate(channel_t ch); |
adisuciu | 0:69053d5c21ee | 85 | |
adisuciu | 0:69053d5c21ee | 86 | |
adisuciu | 0:69053d5c21ee | 87 | /** |
adisuciu | 0:69053d5c21ee | 88 | * @brief converts ADC counts to voltage |
adisuciu | 0:69053d5c21ee | 89 | * @param data - ADC counts |
adisuciu | 0:69053d5c21ee | 90 | * @return voltage |
adisuciu | 0:69053d5c21ee | 91 | */ |
adisuciu | 0:69053d5c21ee | 92 | float data_to_voltage(uint32_t data); |
adisuciu | 0:69053d5c21ee | 93 | |
adisuciu | 0:69053d5c21ee | 94 | /** |
adisuciu | 0:69053d5c21ee | 95 | * @brief enables thermocouple channel |
adisuciu | 0:69053d5c21ee | 96 | * @param channel |
adisuciu | 0:69053d5c21ee | 97 | */ |
adisuciu | 0:69053d5c21ee | 98 | void enable_channel(int channel); |
adisuciu | 0:69053d5c21ee | 99 | |
adisuciu | 0:69053d5c21ee | 100 | /** |
adisuciu | 0:69053d5c21ee | 101 | * @brief disables thermocouple channel |
adisuciu | 0:69053d5c21ee | 102 | * @param channel |
adisuciu | 0:69053d5c21ee | 103 | */ |
adisuciu | 0:69053d5c21ee | 104 | void disable_channel(int channel); |
adisuciu | 0:69053d5c21ee | 105 | |
adisuciu | 0:69053d5c21ee | 106 | /** |
adisuciu | 0:69053d5c21ee | 107 | * @brief enables ADC current source |
adisuciu | 0:69053d5c21ee | 108 | * @param current_source_channel |
adisuciu | 0:69053d5c21ee | 109 | */ |
adisuciu | 0:69053d5c21ee | 110 | void enable_current_source(int current_source_channel); |
adisuciu | 0:69053d5c21ee | 111 | |
adisuciu | 0:69053d5c21ee | 112 | /** |
adisuciu | 0:69053d5c21ee | 113 | * @brief starts ADC single conversion |
adisuciu | 0:69053d5c21ee | 114 | */ |
adisuciu | 0:69053d5c21ee | 115 | void start_single_conversion(); |
adisuciu | 0:69053d5c21ee | 116 | |
adisuciu | 0:69053d5c21ee | 117 | /** |
adisuciu | 0:69053d5c21ee | 118 | * @brief resets the ADC |
adisuciu | 0:69053d5c21ee | 119 | */ |
adisuciu | 0:69053d5c21ee | 120 | void reset(); |
adisuciu | 0:69053d5c21ee | 121 | |
adisuciu | 0:69053d5c21ee | 122 | /** |
adisuciu | 0:69053d5c21ee | 123 | * @brief Performs ADC setup |
adisuciu | 0:69053d5c21ee | 124 | */ |
adisuciu | 0:69053d5c21ee | 125 | void setup(); |
adisuciu | 0:69053d5c21ee | 126 | |
adisuciu | 0:69053d5c21ee | 127 | /** |
adisuciu | 0:69053d5c21ee | 128 | * @brief Initializes the CN0391 shield |
adisuciu | 0:69053d5c21ee | 129 | */ |
adisuciu | 0:69053d5c21ee | 130 | void init(); |
adisuciu | 0:69053d5c21ee | 131 | |
adisuciu | 0:69053d5c21ee | 132 | AD7124 ad7124; |
adisuciu | 0:69053d5c21ee | 133 | |
adisuciu | 0:69053d5c21ee | 134 | |
adisuciu | 0:69053d5c21ee | 135 | }; |
adisuciu | 0:69053d5c21ee | 136 | #endif |