Complete DS1621 library (all functions implemented)
ds1621.h@0:096dbb58d60e, 2012-07-14 (annotated)
- Committer:
- bborredon
- Date:
- Sat Jul 14 08:20:05 2012 +0000
- Revision:
- 0:096dbb58d60e
[mbed] converted /I2c/DS1621
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bborredon | 0:096dbb58d60e | 1 | #ifndef DS1621__H_ |
bborredon | 0:096dbb58d60e | 2 | #define DS1621__H_ |
bborredon | 0:096dbb58d60e | 3 | |
bborredon | 0:096dbb58d60e | 4 | // Includes |
bborredon | 0:096dbb58d60e | 5 | #include <string> |
bborredon | 0:096dbb58d60e | 6 | |
bborredon | 0:096dbb58d60e | 7 | #include "mbed.h" |
bborredon | 0:096dbb58d60e | 8 | |
bborredon | 0:096dbb58d60e | 9 | // Example |
bborredon | 0:096dbb58d60e | 10 | /* |
bborredon | 0:096dbb58d60e | 11 | #include <string> |
bborredon | 0:096dbb58d60e | 12 | |
bborredon | 0:096dbb58d60e | 13 | #include "mbed.h" |
bborredon | 0:096dbb58d60e | 14 | #include "ds1621.h" |
bborredon | 0:096dbb58d60e | 15 | #define DS1621_ADDR 0 // I2c DS1621 address is 0x00 |
bborredon | 0:096dbb58d60e | 16 | |
bborredon | 0:096dbb58d60e | 17 | static void myerror(std::string msg) |
bborredon | 0:096dbb58d60e | 18 | { |
bborredon | 0:096dbb58d60e | 19 | printf("Error %s\n",msg.c_str()); |
bborredon | 0:096dbb58d60e | 20 | exit(1); |
bborredon | 0:096dbb58d60e | 21 | } |
bborredon | 0:096dbb58d60e | 22 | |
bborredon | 0:096dbb58d60e | 23 | int main() |
bborredon | 0:096dbb58d60e | 24 | { |
bborredon | 0:096dbb58d60e | 25 | DS1621 ds(p9,p10,DS1621_ADDR); // Declare DS1621 i2c with sda = p9 and scl = p10 |
bborredon | 0:096dbb58d60e | 26 | bool tlf,thf; |
bborredon | 0:096dbb58d60e | 27 | uint8_t i; |
bborredon | 0:096dbb58d60e | 28 | uint8_t config; |
bborredon | 0:096dbb58d60e | 29 | uint16_t count = 0; |
bborredon | 0:096dbb58d60e | 30 | float temp = 0.0; |
bborredon | 0:096dbb58d60e | 31 | |
bborredon | 0:096dbb58d60e | 32 | printf("Test DS1621 I2C\n\n"); |
bborredon | 0:096dbb58d60e | 33 | |
bborredon | 0:096dbb58d60e | 34 | // Check error |
bborredon | 0:096dbb58d60e | 35 | if(ds.getError() != 0) |
bborredon | 0:096dbb58d60e | 36 | myerror(ds.getErrorMessage()); |
bborredon | 0:096dbb58d60e | 37 | |
bborredon | 0:096dbb58d60e | 38 | // Config with OneShot and Pol high and test error |
bborredon | 0:096dbb58d60e | 39 | ds.setConfig(DS1621_1Shot | DS1621_PolHigh); |
bborredon | 0:096dbb58d60e | 40 | if(ds.getError() != 0) |
bborredon | 0:096dbb58d60e | 41 | myerror(ds.getErrorMessage()); |
bborredon | 0:096dbb58d60e | 42 | |
bborredon | 0:096dbb58d60e | 43 | // Read Config register |
bborredon | 0:096dbb58d60e | 44 | config = ds.getConfig(); |
bborredon | 0:096dbb58d60e | 45 | if(ds.getError() != 0) |
bborredon | 0:096dbb58d60e | 46 | myerror(ds.getErrorMessage()); |
bborredon | 0:096dbb58d60e | 47 | printf("DS1621 Config : %02X\n",config); |
bborredon | 0:096dbb58d60e | 48 | |
bborredon | 0:096dbb58d60e | 49 | printf("Test HR Temperature\n"); |
bborredon | 0:096dbb58d60e | 50 | |
bborredon | 0:096dbb58d60e | 51 | // Test HR temperature |
bborredon | 0:096dbb58d60e | 52 | for(i = 0;i < 24;i++) { |
bborredon | 0:096dbb58d60e | 53 | temp = ds.getHrTemp(); |
bborredon | 0:096dbb58d60e | 54 | if(ds.getError() != 0) |
bborredon | 0:096dbb58d60e | 55 | myerror(ds.getErrorMessage()); |
bborredon | 0:096dbb58d60e | 56 | printf("Measurment at start + %d seconds, Temperature HR = %.2f\n",(count*5),temp); |
bborredon | 0:096dbb58d60e | 57 | wait(5.0); |
bborredon | 0:096dbb58d60e | 58 | count++; |
bborredon | 0:096dbb58d60e | 59 | } |
bborredon | 0:096dbb58d60e | 60 | |
bborredon | 0:096dbb58d60e | 61 | printf("Test Temperature\n"); |
bborredon | 0:096dbb58d60e | 62 | |
bborredon | 0:096dbb58d60e | 63 | // Test temperature |
bborredon | 0:096dbb58d60e | 64 | count = 0; |
bborredon | 0:096dbb58d60e | 65 | for(i = 0;i < 12;i++) { |
bborredon | 0:096dbb58d60e | 66 | temp = ds.getTemp(); |
bborredon | 0:096dbb58d60e | 67 | if(ds.getError() != 0) |
bborredon | 0:096dbb58d60e | 68 | myerror(ds.getErrorMessage()); |
bborredon | 0:096dbb58d60e | 69 | printf("Measurment at start + %d seconds, Temperature = %.2f\n",(count*5),temp); |
bborredon | 0:096dbb58d60e | 70 | wait(5.0); |
bborredon | 0:096dbb58d60e | 71 | count++; |
bborredon | 0:096dbb58d60e | 72 | } |
bborredon | 0:096dbb58d60e | 73 | |
bborredon | 0:096dbb58d60e | 74 | // Config with Continuous and Pol high |
bborredon | 0:096dbb58d60e | 75 | ds.setConfig(DS1621_PolHigh); |
bborredon | 0:096dbb58d60e | 76 | if(ds.getError() != 0) |
bborredon | 0:096dbb58d60e | 77 | myerror(ds.getErrorMessage()); |
bborredon | 0:096dbb58d60e | 78 | |
bborredon | 0:096dbb58d60e | 79 | // Read Config register |
bborredon | 0:096dbb58d60e | 80 | config = ds.getConfig(); |
bborredon | 0:096dbb58d60e | 81 | if(ds.getError() != 0) |
bborredon | 0:096dbb58d60e | 82 | myerror(ds.getErrorMessage()); |
bborredon | 0:096dbb58d60e | 83 | printf("DS1621 Config : %02X\n",config); |
bborredon | 0:096dbb58d60e | 84 | |
bborredon | 0:096dbb58d60e | 85 | // Write trigger temperatures |
bborredon | 0:096dbb58d60e | 86 | ds.setTemperature(18.0,DS1621_Access_TL); |
bborredon | 0:096dbb58d60e | 87 | if(ds.getError() != 0) |
bborredon | 0:096dbb58d60e | 88 | myerror(ds.getErrorMessage()); |
bborredon | 0:096dbb58d60e | 89 | ds.setTemperature(25.5,DS1621_Access_TH); |
bborredon | 0:096dbb58d60e | 90 | if(ds.getError() != 0) |
bborredon | 0:096dbb58d60e | 91 | myerror(ds.getErrorMessage()); |
bborredon | 0:096dbb58d60e | 92 | |
bborredon | 0:096dbb58d60e | 93 | printf("Test temperature and triggers\n"); |
bborredon | 0:096dbb58d60e | 94 | while(1) { |
bborredon | 0:096dbb58d60e | 95 | temp = ds.getTemp(); |
bborredon | 0:096dbb58d60e | 96 | if(ds.getError() != 0) |
bborredon | 0:096dbb58d60e | 97 | myerror(ds.getErrorMessage()); |
bborredon | 0:096dbb58d60e | 98 | ds.getTF(tlf,thf); |
bborredon | 0:096dbb58d60e | 99 | if(ds.getError() != 0) |
bborredon | 0:096dbb58d60e | 100 | myerror(ds.getErrorMessage()); |
bborredon | 0:096dbb58d60e | 101 | printf("Temperature=%.2f TLF %d THF %d\n",temp,tlf,thf); |
bborredon | 0:096dbb58d60e | 102 | wait(5.0); |
bborredon | 0:096dbb58d60e | 103 | } |
bborredon | 0:096dbb58d60e | 104 | } |
bborredon | 0:096dbb58d60e | 105 | */ |
bborredon | 0:096dbb58d60e | 106 | |
bborredon | 0:096dbb58d60e | 107 | // Defines |
bborredon | 0:096dbb58d60e | 108 | #define DS1621_address 0x90 |
bborredon | 0:096dbb58d60e | 109 | |
bborredon | 0:096dbb58d60e | 110 | #define DS1621_PolHigh 0x02 |
bborredon | 0:096dbb58d60e | 111 | #define DS1621_1Shot 0x01 |
bborredon | 0:096dbb58d60e | 112 | #define DS1621_DONE 0x80 |
bborredon | 0:096dbb58d60e | 113 | |
bborredon | 0:096dbb58d60e | 114 | #define DS1621_CFG_1SHOT 0 |
bborredon | 0:096dbb58d60e | 115 | #define DS1621_CFG_POL 1 |
bborredon | 0:096dbb58d60e | 116 | #define DS1621_CFG_TLF 5 |
bborredon | 0:096dbb58d60e | 117 | #define DS1621_CFG_THF 6 |
bborredon | 0:096dbb58d60e | 118 | #define DS1621_CFG_DONE 7 |
bborredon | 0:096dbb58d60e | 119 | |
bborredon | 0:096dbb58d60e | 120 | #define DS1621_Access_TH 0 |
bborredon | 0:096dbb58d60e | 121 | #define DS1621_Access_TL 1 |
bborredon | 0:096dbb58d60e | 122 | |
bborredon | 0:096dbb58d60e | 123 | #define DS1621_NoError 0x00 |
bborredon | 0:096dbb58d60e | 124 | #define DS1621_BadAddress 0x01 |
bborredon | 0:096dbb58d60e | 125 | #define DS1621_I2cError 0x02 |
bborredon | 0:096dbb58d60e | 126 | #define DS1621_ParamError 0x03 |
bborredon | 0:096dbb58d60e | 127 | |
bborredon | 0:096dbb58d60e | 128 | #define DS1621_MaxError 4 |
bborredon | 0:096dbb58d60e | 129 | |
bborredon | 0:096dbb58d60e | 130 | static std::string _ErrorMessageDS1621[DS1621_MaxError] = { |
bborredon | 0:096dbb58d60e | 131 | "", |
bborredon | 0:096dbb58d60e | 132 | "Bad chip address", |
bborredon | 0:096dbb58d60e | 133 | "I2C error (nack)", |
bborredon | 0:096dbb58d60e | 134 | "Invalid parameter", |
bborredon | 0:096dbb58d60e | 135 | }; |
bborredon | 0:096dbb58d60e | 136 | |
bborredon | 0:096dbb58d60e | 137 | // Class |
bborredon | 0:096dbb58d60e | 138 | class DS1621 { |
bborredon | 0:096dbb58d60e | 139 | public: |
bborredon | 0:096dbb58d60e | 140 | /* |
bborredon | 0:096dbb58d60e | 141 | * Constructor, initialize the ds1621 on i2c interface. |
bborredon | 0:096dbb58d60e | 142 | * @param sda : sda i2c pin (PinName) |
bborredon | 0:096dbb58d60e | 143 | * @param scl : scl i2c pin (PinName) |
bborredon | 0:096dbb58d60e | 144 | * @param address : ds1621 address between 0 and 7 (uint8_t) |
bborredon | 0:096dbb58d60e | 145 | * @return none |
bborredon | 0:096dbb58d60e | 146 | */ |
bborredon | 0:096dbb58d60e | 147 | DS1621(PinName sda, PinName scl, uint8_t address); |
bborredon | 0:096dbb58d60e | 148 | |
bborredon | 0:096dbb58d60e | 149 | /* |
bborredon | 0:096dbb58d60e | 150 | * Get temperature from the ds1621 with 0.5 degrees resolution |
bborredon | 0:096dbb58d60e | 151 | * @param : none |
bborredon | 0:096dbb58d60e | 152 | * @return current temperature in degrees Celsius between -55 and +125 (float) |
bborredon | 0:096dbb58d60e | 153 | */ |
bborredon | 0:096dbb58d60e | 154 | float getTemp(void); |
bborredon | 0:096dbb58d60e | 155 | |
bborredon | 0:096dbb58d60e | 156 | /* |
bborredon | 0:096dbb58d60e | 157 | * Get temperature from the ds1621 with 0.01 degrees resolution |
bborredon | 0:096dbb58d60e | 158 | * @param : none |
bborredon | 0:096dbb58d60e | 159 | * @return current temperature in degrees Celsius between -55 and +125 (float) |
bborredon | 0:096dbb58d60e | 160 | */ |
bborredon | 0:096dbb58d60e | 161 | float getHrTemp(void); |
bborredon | 0:096dbb58d60e | 162 | |
bborredon | 0:096dbb58d60e | 163 | /* |
bborredon | 0:096dbb58d60e | 164 | * Read config register |
bborredon | 0:096dbb58d60e | 165 | * @param : none |
bborredon | 0:096dbb58d60e | 166 | * @return current config register value (uin8_t) |
bborredon | 0:096dbb58d60e | 167 | */ |
bborredon | 0:096dbb58d60e | 168 | uint8_t getConfig(void); |
bborredon | 0:096dbb58d60e | 169 | |
bborredon | 0:096dbb58d60e | 170 | /* |
bborredon | 0:096dbb58d60e | 171 | * Write config register |
bborredon | 0:096dbb58d60e | 172 | * @param config : config value (uint8_t) |
bborredon | 0:096dbb58d60e | 173 | * @return none |
bborredon | 0:096dbb58d60e | 174 | */ |
bborredon | 0:096dbb58d60e | 175 | void setConfig(uint8_t config); |
bborredon | 0:096dbb58d60e | 176 | |
bborredon | 0:096dbb58d60e | 177 | /* |
bborredon | 0:096dbb58d60e | 178 | * Start / stop convert |
bborredon | 0:096dbb58d60e | 179 | * @param flag : start convert if true else stop |
bborredon | 0:096dbb58d60e | 180 | * @return none |
bborredon | 0:096dbb58d60e | 181 | */ |
bborredon | 0:096dbb58d60e | 182 | void startConvert(bool flag); |
bborredon | 0:096dbb58d60e | 183 | |
bborredon | 0:096dbb58d60e | 184 | /* |
bborredon | 0:096dbb58d60e | 185 | * Wait end of conversion (Config register bit 7 at 1) |
bborredon | 0:096dbb58d60e | 186 | * @param : none |
bborredon | 0:096dbb58d60e | 187 | * @return none |
bborredon | 0:096dbb58d60e | 188 | */ |
bborredon | 0:096dbb58d60e | 189 | void waitEndConvert(void); |
bborredon | 0:096dbb58d60e | 190 | |
bborredon | 0:096dbb58d60e | 191 | /* |
bborredon | 0:096dbb58d60e | 192 | * Get Temperature High Flag |
bborredon | 0:096dbb58d60e | 193 | * @param : none |
bborredon | 0:096dbb58d60e | 194 | * @return thf flag (bool) |
bborredon | 0:096dbb58d60e | 195 | */ |
bborredon | 0:096dbb58d60e | 196 | bool getTHF(void); |
bborredon | 0:096dbb58d60e | 197 | |
bborredon | 0:096dbb58d60e | 198 | /* |
bborredon | 0:096dbb58d60e | 199 | * Get Temperature Low Flag |
bborredon | 0:096dbb58d60e | 200 | * @param : none |
bborredon | 0:096dbb58d60e | 201 | * @return tlf flag (bool) |
bborredon | 0:096dbb58d60e | 202 | */ |
bborredon | 0:096dbb58d60e | 203 | bool getTLF(void); |
bborredon | 0:096dbb58d60e | 204 | |
bborredon | 0:096dbb58d60e | 205 | /* |
bborredon | 0:096dbb58d60e | 206 | * Get Temperature Low and High Flags |
bborredon | 0:096dbb58d60e | 207 | * @param tlf : temperature low flag (uint8_t&) |
bborredon | 0:096dbb58d60e | 208 | * @param thf : temperature high flag (uint8_t&) |
bborredon | 0:096dbb58d60e | 209 | * @return none |
bborredon | 0:096dbb58d60e | 210 | */ |
bborredon | 0:096dbb58d60e | 211 | void getTF(bool& tlf,bool& thf); |
bborredon | 0:096dbb58d60e | 212 | |
bborredon | 0:096dbb58d60e | 213 | /* |
bborredon | 0:096dbb58d60e | 214 | *Get 1Shot bit |
bborredon | 0:096dbb58d60e | 215 | *@param : none |
bborredon | 0:096dbb58d60e | 216 | *@return true if 1Shot (bool) |
bborredon | 0:096dbb58d60e | 217 | */ |
bborredon | 0:096dbb58d60e | 218 | bool get1Shot(void); |
bborredon | 0:096dbb58d60e | 219 | |
bborredon | 0:096dbb58d60e | 220 | /* |
bborredon | 0:096dbb58d60e | 221 | *Set Temperature (High or Low) |
bborredon | 0:096dbb58d60e | 222 | *@param temp : temperature, the fractionnal part is rounded to 0.5 (float) |
bborredon | 0:096dbb58d60e | 223 | *@param trig : mode,low or high (uint8_t) [DS1621_Access_TL DS1621_Access_TH] |
bborredon | 0:096dbb58d60e | 224 | *@return none |
bborredon | 0:096dbb58d60e | 225 | */ |
bborredon | 0:096dbb58d60e | 226 | void setTemperature(float temp,uint8_t trig); |
bborredon | 0:096dbb58d60e | 227 | |
bborredon | 0:096dbb58d60e | 228 | /* |
bborredon | 0:096dbb58d60e | 229 | *Get Temperature (High or Low) |
bborredon | 0:096dbb58d60e | 230 | *@param trig : mode,low or high (uint8_t) [DS1621_Access_TL DS1621_Access_TH] |
bborredon | 0:096dbb58d60e | 231 | *@return temperature, with 0.5 degrees Celsius resolution (float) |
bborredon | 0:096dbb58d60e | 232 | */ |
bborredon | 0:096dbb58d60e | 233 | float getTemperature(uint8_t trig); |
bborredon | 0:096dbb58d60e | 234 | |
bborredon | 0:096dbb58d60e | 235 | /* |
bborredon | 0:096dbb58d60e | 236 | *Get current error message |
bborredon | 0:096dbb58d60e | 237 | *@param : none |
bborredon | 0:096dbb58d60e | 238 | *@return current error message(std::string) |
bborredon | 0:096dbb58d60e | 239 | */ |
bborredon | 0:096dbb58d60e | 240 | std::string getErrorMessage(void) |
bborredon | 0:096dbb58d60e | 241 | { |
bborredon | 0:096dbb58d60e | 242 | if(_errnum < DS1621_MaxError) |
bborredon | 0:096dbb58d60e | 243 | return(_ErrorMessageDS1621[_errnum]); |
bborredon | 0:096dbb58d60e | 244 | else |
bborredon | 0:096dbb58d60e | 245 | return("errnum out of range"); |
bborredon | 0:096dbb58d60e | 246 | } |
bborredon | 0:096dbb58d60e | 247 | |
bborredon | 0:096dbb58d60e | 248 | /* |
bborredon | 0:096dbb58d60e | 249 | * Get the current error number (DS1621_NoError if no error) |
bborredon | 0:096dbb58d60e | 250 | * @param : none |
bborredon | 0:096dbb58d60e | 251 | * @return current error number (uint8_t) |
bborredon | 0:096dbb58d60e | 252 | */ |
bborredon | 0:096dbb58d60e | 253 | uint8_t getError(void); |
bborredon | 0:096dbb58d60e | 254 | |
bborredon | 0:096dbb58d60e | 255 | //---------- local variables ---------- |
bborredon | 0:096dbb58d60e | 256 | private: |
bborredon | 0:096dbb58d60e | 257 | I2C _i2c; // Local i2c communication interface instance |
bborredon | 0:096dbb58d60e | 258 | int _address; // Local ds1621 i2c address |
bborredon | 0:096dbb58d60e | 259 | uint8_t _errnum; // Error number |
bborredon | 0:096dbb58d60e | 260 | uint8_t _config; // Config register value |
bborredon | 0:096dbb58d60e | 261 | //------------------------------------- |
bborredon | 0:096dbb58d60e | 262 | }; |
bborredon | 0:096dbb58d60e | 263 | |
bborredon | 0:096dbb58d60e | 264 | #endif |