Manuel Caballero / DS1624
Committer:
mcm
Date:
Wed Jan 31 16:39:34 2018 +0000
Revision:
0:53a09ccc5f8e
Child:
1:fc952e73a23e
Driver for DS1624 was just started, both header file and function file were created. Header file is ready to be tested, function file needs to be developed.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 0:53a09ccc5f8e 1 /**
mcm 0:53a09ccc5f8e 2 * @brief DS1624.h
mcm 0:53a09ccc5f8e 3 * @details Digital Thermometer and Memory.
mcm 0:53a09ccc5f8e 4 * Header file.
mcm 0:53a09ccc5f8e 5 *
mcm 0:53a09ccc5f8e 6 *
mcm 0:53a09ccc5f8e 7 * @return NA
mcm 0:53a09ccc5f8e 8 *
mcm 0:53a09ccc5f8e 9 * @author Manuel Caballero
mcm 0:53a09ccc5f8e 10 * @date 31/January/2018
mcm 0:53a09ccc5f8e 11 * @version 31/January/2018 The ORIGIN
mcm 0:53a09ccc5f8e 12 * @pre NaN.
mcm 0:53a09ccc5f8e 13 * @warning NaN
mcm 0:53a09ccc5f8e 14 * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ).
mcm 0:53a09ccc5f8e 15 */
mcm 0:53a09ccc5f8e 16 #ifndef DS1624_H
mcm 0:53a09ccc5f8e 17 #define DS1624_H
mcm 0:53a09ccc5f8e 18
mcm 0:53a09ccc5f8e 19 #include "mbed.h"
mcm 0:53a09ccc5f8e 20
mcm 0:53a09ccc5f8e 21
mcm 0:53a09ccc5f8e 22 /**
mcm 0:53a09ccc5f8e 23 Example:
mcm 0:53a09ccc5f8e 24
mcm 0:53a09ccc5f8e 25 [todo]
mcm 0:53a09ccc5f8e 26 */
mcm 0:53a09ccc5f8e 27
mcm 0:53a09ccc5f8e 28
mcm 0:53a09ccc5f8e 29 /*!
mcm 0:53a09ccc5f8e 30 Library for the DS1624 Digital Thermometer and Memory.
mcm 0:53a09ccc5f8e 31 */
mcm 0:53a09ccc5f8e 32 class DS1624
mcm 0:53a09ccc5f8e 33 {
mcm 0:53a09ccc5f8e 34 public:
mcm 0:53a09ccc5f8e 35 /**
mcm 0:53a09ccc5f8e 36 * @brief DEFAULT ADDRESSES. [ 0 : GND | 1 : VDD ]
mcm 0:53a09ccc5f8e 37 */
mcm 0:53a09ccc5f8e 38 typedef enum {
mcm 0:53a09ccc5f8e 39 DS1624_ADDRESS_0 = ( ( ( 0b1001 << 3 ) | 0b000 ) << 1 ), /*!< Address A2 A1 A0: 000 */
mcm 0:53a09ccc5f8e 40 DS1624_ADDRESS_1 = ( ( ( 0b1001 << 3 ) | 0b001 ) << 1 ), /*!< Address A2 A1 A0: 001 */
mcm 0:53a09ccc5f8e 41 DS1624_ADDRESS_2 = ( ( ( 0b1001 << 3 ) | 0b010 ) << 1 ), /*!< Address A2 A1 A0: 010 */
mcm 0:53a09ccc5f8e 42 DS1624_ADDRESS_3 = ( ( ( 0b1001 << 3 ) | 0b011 ) << 1 ), /*!< Address A2 A1 A0: 011 */
mcm 0:53a09ccc5f8e 43 DS1624_ADDRESS_4 = ( ( ( 0b1001 << 3 ) | 0b100 ) << 1 ), /*!< Address A2 A1 A0: 100 */
mcm 0:53a09ccc5f8e 44 DS1624_ADDRESS_5 = ( ( ( 0b1001 << 3 ) | 0b101 ) << 1 ), /*!< Address A2 A1 A0: 101 */
mcm 0:53a09ccc5f8e 45 DS1624_ADDRESS_6 = ( ( ( 0b1001 << 3 ) | 0b110 ) << 1 ), /*!< Address A2 A1 A0: 110 */
mcm 0:53a09ccc5f8e 46 DS1624_ADDRESS_7 = ( ( ( 0b1001 << 3 ) | 0b111 ) << 1 ) /*!< Address A2 A1 A0: 111 */
mcm 0:53a09ccc5f8e 47 } DS1624_address_t;
mcm 0:53a09ccc5f8e 48
mcm 0:53a09ccc5f8e 49
mcm 0:53a09ccc5f8e 50 // DS1624 Command Set
mcm 0:53a09ccc5f8e 51 /**
mcm 0:53a09ccc5f8e 52 * @brief TEMPERATURE CONVERSION COMMANDS
mcm 0:53a09ccc5f8e 53 */
mcm 0:53a09ccc5f8e 54 typedef enum {
mcm 0:53a09ccc5f8e 55 DS1624_READ_TEMPERATURE = 0xAA, /*!< Reads last converted temperature value from temperature register */
mcm 0:53a09ccc5f8e 56 DS1624_START_CONVERT_T = 0xEE, /*!< Initiates temperature conversion */
mcm 0:53a09ccc5f8e 57 DS1624_STOP_CONVERT_T = 0x22 /*!< Halts temperature conversion */
mcm 0:53a09ccc5f8e 58 } DS1624_temperature_conversion_commands_t;
mcm 0:53a09ccc5f8e 59
mcm 0:53a09ccc5f8e 60
mcm 0:53a09ccc5f8e 61 /**
mcm 0:53a09ccc5f8e 62 * @brief THERMOSTAT COMMANDS. NOTE: Writing to the EEPROM typically requires 10ms at room temperature. After issuing a write
mcm 0:53a09ccc5f8e 63 * command, no further reads or writes should be requested for at least 10ms.
mcm 0:53a09ccc5f8e 64 */
mcm 0:53a09ccc5f8e 65 typedef enum {
mcm 0:53a09ccc5f8e 66 DS1624_ACCESS_MEMORY = 0x17, /*!< Reads or writes to 256-byte EEPROM memory */
mcm 0:53a09ccc5f8e 67 DS1624_ACCESS_CONFIG = 0xAC /*!< Reads or writes configuration data to configuration register */
mcm 0:53a09ccc5f8e 68 } DS1624_thermostat_commands_t;
mcm 0:53a09ccc5f8e 69
mcm 0:53a09ccc5f8e 70
mcm 0:53a09ccc5f8e 71
mcm 0:53a09ccc5f8e 72 // ACCESS CONFIG ( CONFIGURATION/STATUS REGISTER )
mcm 0:53a09ccc5f8e 73 /**
mcm 0:53a09ccc5f8e 74 * @brief BIT7: DONE
mcm 0:53a09ccc5f8e 75 */
mcm 0:53a09ccc5f8e 76 typedef enum {
mcm 0:53a09ccc5f8e 77 ACCESS_CONFIG_DONE_MASK = ( 1 << 7 ), /*!< DONE Mask */
mcm 0:53a09ccc5f8e 78 ACCESS_CONFIG_DONE_CONVERSION_COMPLETE = ( 1 << 7 ), /*!< Conversion complete */
mcm 0:53a09ccc5f8e 79 ACCESS_CONFIG_DONE_CONVERSION_IN_PROGRESS = ( 0 << 7 ) /*!< Conversion in progress */
mcm 0:53a09ccc5f8e 80 } DS1624_access_config_done_t;
mcm 0:53a09ccc5f8e 81
mcm 0:53a09ccc5f8e 82
mcm 0:53a09ccc5f8e 83 /**
mcm 0:53a09ccc5f8e 84 * @brief BIT0: 1SHOT
mcm 0:53a09ccc5f8e 85 */
mcm 0:53a09ccc5f8e 86 typedef enum {
mcm 0:53a09ccc5f8e 87 ACCESS_CONFIG_1SHOT_MASK = ( 1 << 0 ), /*!< 1SHOT Mask */
mcm 0:53a09ccc5f8e 88 ACCESS_CONFIG_1SHOT_ONE_TEMPERATURE_CONVERSION = ( 1 << 0 ), /*!< Perform one temperature conversion upon receipt of the Start Convert T protocol */
mcm 0:53a09ccc5f8e 89 ACCESS_CONFIG_1SHOT_CONTINUOUSLY_TEMPERATURE_CONVERSION = ( 0 << 0 ) /*!< Perform continuously temperature conversions */
mcm 0:53a09ccc5f8e 90 } DS1624_access_config_1shot_t;
mcm 0:53a09ccc5f8e 91
mcm 0:53a09ccc5f8e 92
mcm 0:53a09ccc5f8e 93
mcm 0:53a09ccc5f8e 94 // TEMPERATURE REGISTER
mcm 0:53a09ccc5f8e 95 /**
mcm 0:53a09ccc5f8e 96 * @brief MSB BIT15: SIGN
mcm 0:53a09ccc5f8e 97 */
mcm 0:53a09ccc5f8e 98 typedef enum {
mcm 0:53a09ccc5f8e 99 MSB_TEMPERATURE_SIGN_BIT_MASK = ( 1 << 7 ), /*!< Temperature sign Mask */
mcm 0:53a09ccc5f8e 100 MSB_TEMPERATURE_SIGN_BIT_POSITIVE = ( 0 << 7 ), /*!< Temperature is POSITIVE */
mcm 0:53a09ccc5f8e 101 MSB_TEMPERATURE_SIGN_BIT_NEGATIVE = ( 1 << 7 ) /*!< Temperature is NEGATIVE */
mcm 0:53a09ccc5f8e 102 } DS1624_msb_temperature_sign_bit_t;
mcm 0:53a09ccc5f8e 103
mcm 0:53a09ccc5f8e 104
mcm 0:53a09ccc5f8e 105
mcm 0:53a09ccc5f8e 106
mcm 0:53a09ccc5f8e 107 #ifndef DS1624_VECTOR_STRUCT_H
mcm 0:53a09ccc5f8e 108 #define DS1624_VECTOR_STRUCT_H
mcm 0:53a09ccc5f8e 109 typedef struct {
mcm 0:53a09ccc5f8e 110 uint8_t MSBTemperature;
mcm 0:53a09ccc5f8e 111 uint8_t LSBTemperature;
mcm 0:53a09ccc5f8e 112 uint8_t Control_Status_Register;
mcm 0:53a09ccc5f8e 113
mcm 0:53a09ccc5f8e 114 float Temperature;
mcm 0:53a09ccc5f8e 115 } DS1624_vector_data_t;
mcm 0:53a09ccc5f8e 116 #endif
mcm 0:53a09ccc5f8e 117
mcm 0:53a09ccc5f8e 118
mcm 0:53a09ccc5f8e 119
mcm 0:53a09ccc5f8e 120 /**
mcm 0:53a09ccc5f8e 121 * @brief INTERNAL CONSTANTS
mcm 0:53a09ccc5f8e 122 */
mcm 0:53a09ccc5f8e 123 #define DS1624_TEMPERATURE_RESOLUTION 0.0625
mcm 0:53a09ccc5f8e 124
mcm 0:53a09ccc5f8e 125 typedef enum {
mcm 0:53a09ccc5f8e 126 DS1624_SUCCESS = 0,
mcm 0:53a09ccc5f8e 127 DS1624_FAILURE = 1,
mcm 0:53a09ccc5f8e 128
mcm 0:53a09ccc5f8e 129 I2C_SUCCESS = 0, /*!< I2C communication was fine */
mcm 0:53a09ccc5f8e 130 I2C_FAILURE = 1
mcm 0:53a09ccc5f8e 131 } DS1624_status_t;
mcm 0:53a09ccc5f8e 132
mcm 0:53a09ccc5f8e 133
mcm 0:53a09ccc5f8e 134
mcm 0:53a09ccc5f8e 135
mcm 0:53a09ccc5f8e 136 /** Create an DS1624 object connected to the specified I2C pins.
mcm 0:53a09ccc5f8e 137 *
mcm 0:53a09ccc5f8e 138 * @param sda I2C data pin
mcm 0:53a09ccc5f8e 139 * @param scl I2C clock pin
mcm 0:53a09ccc5f8e 140 * @param addr I2C slave address
mcm 0:53a09ccc5f8e 141 * @param freq I2C frequency in Hz.
mcm 0:53a09ccc5f8e 142 */
mcm 0:53a09ccc5f8e 143 DS1624 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq );
mcm 0:53a09ccc5f8e 144
mcm 0:53a09ccc5f8e 145 /** Delete DS1624 object.
mcm 0:53a09ccc5f8e 146 */
mcm 0:53a09ccc5f8e 147 ~DS1624();
mcm 0:53a09ccc5f8e 148
mcm 0:53a09ccc5f8e 149 /** It triggers a new temperature measurement.
mcm 0:53a09ccc5f8e 150 */
mcm 0:53a09ccc5f8e 151 DS1624_status_t DS1624_StartConvertTemperature ( void );
mcm 0:53a09ccc5f8e 152
mcm 0:53a09ccc5f8e 153 /** It stops the current temperature conversion.
mcm 0:53a09ccc5f8e 154 */
mcm 0:53a09ccc5f8e 155 DS1624_status_t DS1624_StopConvertTemperature ( void );
mcm 0:53a09ccc5f8e 156
mcm 0:53a09ccc5f8e 157 /** It reads the last raw temperature conversion result.
mcm 0:53a09ccc5f8e 158 */
mcm 0:53a09ccc5f8e 159 DS1624_status_t DS1624_ReadRawTemperature ( DS1624_vector_data_t* myRawTemperature );
mcm 0:53a09ccc5f8e 160
mcm 0:53a09ccc5f8e 161 /** It reads the last temperature conversion result.
mcm 0:53a09ccc5f8e 162 */
mcm 0:53a09ccc5f8e 163 DS1624_status_t DS1624_ReadTemperature ( DS1624_vector_data_t* myTemperature );
mcm 0:53a09ccc5f8e 164
mcm 0:53a09ccc5f8e 165 /** It reads the CONFIGURATION/STATUS register.
mcm 0:53a09ccc5f8e 166 */
mcm 0:53a09ccc5f8e 167 DS1624_status_t DS1624_GetStatusRegister ( DS1624_vector_data_t* myStatusRegister );
mcm 0:53a09ccc5f8e 168
mcm 0:53a09ccc5f8e 169 /** It sets 1SHOT/Continuous temperature conversion mode.
mcm 0:53a09ccc5f8e 170 */
mcm 0:53a09ccc5f8e 171 DS1624_status_t DS1624_SetConversionMode ( DS1624_access_config_1shot_t myConversionMode );
mcm 0:53a09ccc5f8e 172
mcm 0:53a09ccc5f8e 173 /** It checks if a temperature conversion is done.
mcm 0:53a09ccc5f8e 174 */
mcm 0:53a09ccc5f8e 175 DS1624_status_t DS1624_IsTemperatureConversionDone ( DS1624_access_config_done_t* myTemperatureConversionStatus );
mcm 0:53a09ccc5f8e 176
mcm 0:53a09ccc5f8e 177 /** It reads a certain number of bytes from EEPROM memory.
mcm 0:53a09ccc5f8e 178 */
mcm 0:53a09ccc5f8e 179 DS1624_status_t DS1624_ReadBytesEEPROM ( uint8_t myStartingAddress, uint8_t* myReadBytesEEPROM, uint8_t myLength );
mcm 0:53a09ccc5f8e 180
mcm 0:53a09ccc5f8e 181 /** It writes a certain number of bytes to EEPROM memory.
mcm 0:53a09ccc5f8e 182 */
mcm 0:53a09ccc5f8e 183 DS1624_status_t DS1624_WriteBytesEEPROM ( uint8_t myStartingAddress, uint8_t myWriteBytesEEPROM[], uint8_t myLength );
mcm 0:53a09ccc5f8e 184
mcm 0:53a09ccc5f8e 185
mcm 0:53a09ccc5f8e 186
mcm 0:53a09ccc5f8e 187
mcm 0:53a09ccc5f8e 188 private:
mcm 0:53a09ccc5f8e 189 I2C _i2c;
mcm 0:53a09ccc5f8e 190 uint32_t _DS1624_Addr;
mcm 0:53a09ccc5f8e 191 };
mcm 0:53a09ccc5f8e 192
mcm 0:53a09ccc5f8e 193 #endif