CN0391 4-thermocouple shield driver

Dependencies:   AD7124 Thermocouple

Dependents:   cn0391-helloworld

For additional information check out the mbed page of the Analog Devices wiki: https://wiki.analog.com/resources/tools-software/mbed-drivers-all

Committer:
adisuciu
Date:
Mon Nov 07 16:05:19 2016 +0000
Revision:
1:f40851ca9316
Parent:
0:69053d5c21ee
Updated dependencies

Who changed what in which revision?

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