#ifndef DS18X20_H_ #define DS18X20_H_ #ifdef __cplusplus extern "C" { #endif #include <stdlib.h> #include <stdint.h> // DS18x20 EERPROM support disabled(0) or enabled(1) : #define DS18X20_EEPROMSUPPORT 1 // decicelsius functions disabled(0) or enabled(1): #define DS18X20_DECICELSIUS 1 // max. resolution functions disabled(0) or enabled(1): #define DS18X20_MAX_RESOLUTION 1 // extended output via UART disabled(0) or enabled(1) : #define DS18X20_VERBOSE 0 /* return values */ #define DS18X20_OK 0x00 #define DS18X20_ERROR 0x01 #define DS18X20_START_FAIL 0x02 #define DS18X20_ERROR_CRC 0x03 #define DS18X20_INVALID_DECICELSIUS 2000 #define DS18X20_POWER_PARASITE 0x00 #define DS18X20_POWER_EXTERN 0x01 #define DS18X20_CONVERSION_DONE 0x00 #define DS18X20_CONVERTING 0x01 /* DS18X20 specific values (see datasheet) */ #define DS18S20_FAMILY_CODE 0x10 #define DS18B20_FAMILY_CODE 0x28 #define DS1822_FAMILY_CODE 0x22 #define DS18X20_CONVERT_T 0x44 #define DS18X20_READ 0xBE #define DS18X20_WRITE 0x4E #define DS18X20_EE_WRITE 0x48 #define DS18X20_EE_RECALL 0xB8 #define DS18X20_READ_POWER_SUPPLY 0xB4 #define DS18B20_CONF_REG 4 #define DS18B20_9_BIT 0 #define DS18B20_10_BIT (1<<5) #define DS18B20_11_BIT (1<<6) #define DS18B20_12_BIT ((1<<6)|(1<<5)) #define DS18B20_RES_MASK ((1<<6)|(1<<5)) // undefined bits in LSB if 18B20 != 12bit #define DS18B20_9_BIT_UNDF ((1<<0)|(1<<1)|(1<<2)) #define DS18B20_10_BIT_UNDF ((1<<0)|(1<<1)) #define DS18B20_11_BIT_UNDF ((1<<0)) #define DS18B20_12_BIT_UNDF 0 // conversion times in milliseconds #define DS18B20_TCONV_12BIT 750 #define DS18B20_TCONV_11BIT DS18B20_TCONV_12_BIT/2 #define DS18B20_TCONV_10BIT DS18B20_TCONV_12_BIT/4 #define DS18B20_TCONV_9BIT DS18B20_TCONV_12_BIT/8 #define DS18S20_TCONV DS18B20_TCONV_12_BIT // constant to convert the fraction bits to cel*(10^-4) #define DS18X20_FRACCONV 625 // scratchpad size in bytes #define DS18X20_SP_SIZE 9 // DS18X20 EEPROM-Support #define DS18X20_WRITE_SCRATCHPAD 0x4E #define DS18X20_COPY_SCRATCHPAD 0x48 #define DS18X20_RECALL_E2 0xB8 #define DS18X20_COPYSP_DELAY 10 /* ms */ #define DS18X20_TH_REG 2 #define DS18X20_TL_REG 3 #define DS18X20_DECIMAL_CHAR '.' extern uint8_t DS18X20_find_sensor(uint8_t *diff, uint8_t id[]); extern uint8_t DS18X20_get_power_status(uint8_t id[]); extern uint8_t DS18X20_start_meas( uint8_t with_external, uint8_t id[]); // returns 1 if conversion is in progress, 0 if finished // not available when parasite powered extern uint8_t DS18X20_conversion_in_progress(void); #if DS18X20_DECICELSIUS extern uint8_t DS18X20_read_decicelsius( uint8_t id[], int16_t *decicelsius ); extern uint8_t DS18X20_read_decicelsius_single( uint8_t familycode, int16_t *decicelsius ); extern uint8_t DS18X20_format_from_decicelsius( int16_t decicelsius, char s[], uint8_t n); #endif /* DS18X20_DECICELSIUS */ #if DS18X20_MAX_RESOLUTION // temperature unit for max. resolution is °C * 10e-4 // examples: -250625 -> -25.0625°C, 1250000 -> 125.0000 °C extern uint8_t DS18X20_read_maxres( uint8_t id[], int32_t *temperaturevalue ); extern uint8_t DS18X20_read_maxres_single( uint8_t familycode, int32_t *temperaturevalue ); extern uint8_t DS18X20_format_from_maxres( int32_t temperaturevalue, char s[], uint8_t n); #endif /* DS18X20_MAX_RESOLUTION */ #if DS18X20_EEPROMSUPPORT // write th, tl and config-register to scratchpad (config ignored on DS18S20) uint8_t DS18X20_write_scratchpad( uint8_t id[], uint8_t th, uint8_t tl, uint8_t conf); // read scratchpad into array SP uint8_t DS18X20_read_scratchpad( uint8_t id[], uint8_t sp[], uint8_t n); // copy values int scratchpad into DS18x20 eeprom uint8_t DS18X20_scratchpad_to_eeprom( uint8_t with_power_extern, uint8_t id[] ); // copy values from DS18x20 eeprom into scratchpad uint8_t DS18X20_eeprom_to_scratchpad( uint8_t id[] ); #endif /* DS18X20_EEPROMSUPPORT */ #if DS18X20_VERBOSE extern void DS18X20_show_id_uart( uint8_t *id, size_t n ); extern uint8_t DS18X20_read_meas_all_verbose( void ); #endif /* DS18X20_VERBOSE */ #ifdef __cplusplus } #endif #endif