Complete DS1621 library (all functions implemented)

Committer:
bborredon
Date:
Sat Jul 14 08:20:05 2012 +0000
Revision:
0:096dbb58d60e
[mbed] converted /I2c/DS1621

Who changed what in which revision?

UserRevisionLine numberNew 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