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 _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