Manuel Caballero / DS1624
Committer:
mcm
Date:
Wed Jan 31 16:57:05 2018 +0000
Revision:
1:fc952e73a23e
Parent:
0:53a09ccc5f8e
Child:
2:a035362e82c0
Function file is ready to be tested.

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 1:fc952e73a23e 112 char 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 1:fc952e73a23e 179 DS1624_status_t DS1624_ReadBytesEEPROM ( char myStartingAddress, char* 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 1:fc952e73a23e 183 DS1624_status_t DS1624_WriteBytesEEPROM ( char myStartingAddress, char 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