#ifndef DS1624_H #define DS1624_H #include "../global.h" #include "../configs/ds1624/ds1624.h" #define DS1624_BASE_ADDR B01001000 #define DS1624_ADDR DS1624_BASE_ADDR | (DS1624_A0 * B00000001) | (DS1624_A1 * B00000010) | (DS1624_A2 * B00000100) /** * Sampling configurations **/ #define DS1624_CONFIG_1SHOT B00000001 #define DS1624_CONFIG_CONT B00000000 // Select either 1shot or continous themometer mode #define DS1624_CONFIGS DS1624_CONFIG_CONT // DS1624 Commands #define DS1624_CONFIG_ADDR 0xAC #define DS1624_READ_TEMP 0xAA #define DS1624_SMPL_START 0xEE #define DS1624_SMPL_STOP 0x22 #define DS1624_ACCESS_MEM 0x17 // Bit masks #define DS1624_CONFIG_DONE B10000000 // Size of the EEPROM memory in bytes #define DS1624_EEPROM_SIZE 255 /* There are actually 256 bytes, but the twi functions only support reading 255 at a time!*/ #define DS1624_EEPROM_PAGE 8 class DS1624 { public: DS1624(); /** * Init: runs the initializationr outine **/ void Init(void); /** * readTemp: reads the temperature and returns * a 16 byte integer in which the 2 highest bytes * are used as (int8_t)degrees and the 2 lowest * are used (uint8_t)decimals **/ uint16_t readTemp(void); /** * Start conversion, used at startup in * continous mode, or before a read * in 1shot mode **/ void startConversion(void); /** * stopConversion: stops the temperature acquisition **/ void stopConversion(void); /** * EEPROM Support functions **/ #ifdef DS1624_USE_EEPROM /** * writeData: writes data to the eeprom * pass it an array of uint8_t containing the values to write, * the start position (must be %8 == 0) and the length. * The two last can be omnited. **/ void writeData(uint8_t *, uint8_t, uint8_t); void writeData(uint8_t *, uint8_t); void writeData(uint8_t *); /** * writeData: writes data to the eeprom * pass it an array of uint8_t to store the result, * the start position and the length. The two last can be omnited **/ void readData(uint8_t *, uint8_t, uint8_t); void readData(uint8_t *, uint8_t); void readData(uint8_t *); #endif private: #ifdef DS1624_USE_EEPROM /** * writePage: writes a single page (or less) to the eeprom * pass it an array of uint8_t to store the result, * the start position and the length. **/ void writePage(uint8_t *, uint8_t, uint8_t); #endif }; extern DS1624 TEMP; #endif