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
Diff: CN0391.h
- Revision:
- 0:69053d5c21ee
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CN0391.h Mon Nov 07 15:48:05 2016 +0000 @@ -0,0 +1,136 @@ +#ifndef _CN0391_H_ +#define _CN0391_H_ +#include "AD7124.h" +#include "Thermocouple.h" + + +/** + * @brief Thermocouple_Channel class + */ +class Thermocouple_Channel +{ +private: +public: + /** + * @brief Thermocouple channel constructor + */ + Thermocouple_Channel(); + /** + * @brief Constructs thermocouple channel using thermocouple type t + */ + Thermocouple_Channel(Thermocouple *t); + + Thermocouple *t; + uint16_t thermocouple_channel; + uint16_t rtd_channel; + uint16_t calibration_channel; + float calibration_current; + + /** + * @brief gets thermocouple type + * @return thermocouple type + */ + Thermocouple* get_thermocouple_type(); + + /** + * @brief sets new thermocouple type + * @param new_t new thermocouple type + */ + void set_thermocouple_type(Thermocouple* new_t); + + /** + * @brief sets up thermocouple channel + * @param new_t thermocouple type + * @param thermocouple_channel - thermocouple ADC channel + * @param rtd_channel - RTD ADC channel + * @param calibration_channel - ADC channel used in calibration + * + */ + void setup_channel(Thermocouple* new_t, uint16_t thermocouple_channel, uint16_t rtd_channel, uint16_t calibration_channel); +}; + +class CN0391 +{ +private: +public: + CN0391(PinName cs); + + typedef enum { + CHANNEL_P1 = 0, + CHANNEL_P2, + CHANNEL_P3, + CHANNEL_P4 + } channel_t; + + Thermocouple_Channel tc[4]; + + /** + * @brief sets channel with thermocouple type + * @param ch - channel + * @param new_t - thermocouple type + */ + void set_thermocouple_type(channel_t ch, Thermocouple* new_t); + + /** + * @brief Reads thermocouple channel + * @param ch - channel + */ + float read_channel(channel_t ch); + + /** + * @brief Calibrate channel + * @param ch - channel + */ + float calibrate(channel_t ch); + + + /** + * @brief converts ADC counts to voltage + * @param data - ADC counts + * @return voltage + */ + float data_to_voltage(uint32_t data); + + /** + * @brief enables thermocouple channel + * @param channel + */ + void enable_channel(int channel); + + /** + * @brief disables thermocouple channel + * @param channel + */ + void disable_channel(int channel); + + /** + * @brief enables ADC current source + * @param current_source_channel + */ + void enable_current_source(int current_source_channel); + + /** + * @brief starts ADC single conversion + */ + void start_single_conversion(); + + /** + * @brief resets the ADC + */ + void reset(); + + /** + * @brief Performs ADC setup + */ + void setup(); + + /** + * @brief Initializes the CN0391 shield + */ + void init(); + + AD7124 ad7124; + + +}; +#endif