Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
DS1624.h@0:53a09ccc5f8e, 2018-01-31 (annotated)
- 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?
| User | Revision | Line number | New 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 |