comparison ds18x20.h @ 9:7da9a3f23592

Import ds18x20 code
author Matt Johnston <matt@ucc.asn.au>
date Fri, 18 May 2012 23:57:08 +0800
parents
children
comparison
equal deleted inserted replaced
8:c55321727d02 9:7da9a3f23592
1 #ifndef DS18X20_H_
2 #define DS18X20_H_
3
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7
8 #include <stdlib.h>
9 #include <stdint.h>
10
11 // DS18x20 EERPROM support disabled(0) or enabled(1) :
12 #define DS18X20_EEPROMSUPPORT 1
13 // decicelsius functions disabled(0) or enabled(1):
14 #define DS18X20_DECICELSIUS 1
15 // max. resolution functions disabled(0) or enabled(1):
16 #define DS18X20_MAX_RESOLUTION 1
17 // extended output via UART disabled(0) or enabled(1) :
18 #define DS18X20_VERBOSE 1
19
20
21 /* return values */
22 #define DS18X20_OK 0x00
23 #define DS18X20_ERROR 0x01
24 #define DS18X20_START_FAIL 0x02
25 #define DS18X20_ERROR_CRC 0x03
26
27 #define DS18X20_INVALID_DECICELSIUS 2000
28
29 #define DS18X20_POWER_PARASITE 0x00
30 #define DS18X20_POWER_EXTERN 0x01
31
32 #define DS18X20_CONVERSION_DONE 0x00
33 #define DS18X20_CONVERTING 0x01
34
35 /* DS18X20 specific values (see datasheet) */
36 #define DS18S20_FAMILY_CODE 0x10
37 #define DS18B20_FAMILY_CODE 0x28
38 #define DS1822_FAMILY_CODE 0x22
39
40 #define DS18X20_CONVERT_T 0x44
41 #define DS18X20_READ 0xBE
42 #define DS18X20_WRITE 0x4E
43 #define DS18X20_EE_WRITE 0x48
44 #define DS18X20_EE_RECALL 0xB8
45 #define DS18X20_READ_POWER_SUPPLY 0xB4
46
47 #define DS18B20_CONF_REG 4
48 #define DS18B20_9_BIT 0
49 #define DS18B20_10_BIT (1<<5)
50 #define DS18B20_11_BIT (1<<6)
51 #define DS18B20_12_BIT ((1<<6)|(1<<5))
52 #define DS18B20_RES_MASK ((1<<6)|(1<<5))
53
54 // undefined bits in LSB if 18B20 != 12bit
55 #define DS18B20_9_BIT_UNDF ((1<<0)|(1<<1)|(1<<2))
56 #define DS18B20_10_BIT_UNDF ((1<<0)|(1<<1))
57 #define DS18B20_11_BIT_UNDF ((1<<0))
58 #define DS18B20_12_BIT_UNDF 0
59
60 // conversion times in milliseconds
61 #define DS18B20_TCONV_12BIT 750
62 #define DS18B20_TCONV_11BIT DS18B20_TCONV_12_BIT/2
63 #define DS18B20_TCONV_10BIT DS18B20_TCONV_12_BIT/4
64 #define DS18B20_TCONV_9BIT DS18B20_TCONV_12_BIT/8
65 #define DS18S20_TCONV DS18B20_TCONV_12_BIT
66
67 // constant to convert the fraction bits to cel*(10^-4)
68 #define DS18X20_FRACCONV 625
69
70 // scratchpad size in bytes
71 #define DS18X20_SP_SIZE 9
72
73 // DS18X20 EEPROM-Support
74 #define DS18X20_WRITE_SCRATCHPAD 0x4E
75 #define DS18X20_COPY_SCRATCHPAD 0x48
76 #define DS18X20_RECALL_E2 0xB8
77 #define DS18X20_COPYSP_DELAY 10 /* ms */
78 #define DS18X20_TH_REG 2
79 #define DS18X20_TL_REG 3
80
81 #define DS18X20_DECIMAL_CHAR '.'
82
83
84 extern uint8_t DS18X20_find_sensor(uint8_t *diff,
85 uint8_t id[]);
86 extern uint8_t DS18X20_get_power_status(uint8_t id[]);
87 extern uint8_t DS18X20_start_meas( uint8_t with_external,
88 uint8_t id[]);
89 // returns 1 if conversion is in progress, 0 if finished
90 // not available when parasite powered
91 extern uint8_t DS18X20_conversion_in_progress(void);
92
93
94 #if DS18X20_DECICELSIUS
95 extern uint8_t DS18X20_read_decicelsius( uint8_t id[],
96 int16_t *decicelsius );
97 extern uint8_t DS18X20_read_decicelsius_single( uint8_t familycode,
98 int16_t *decicelsius );
99 extern uint8_t DS18X20_format_from_decicelsius( int16_t decicelsius,
100 char s[], uint8_t n);
101 #endif /* DS18X20_DECICELSIUS */
102
103
104 #if DS18X20_MAX_RESOLUTION
105 // temperature unit for max. resolution is �C * 10e-4
106 // examples: -250625 -> -25.0625�C, 1250000 -> 125.0000 �C
107 extern uint8_t DS18X20_read_maxres( uint8_t id[],
108 int32_t *temperaturevalue );
109 extern uint8_t DS18X20_read_maxres_single( uint8_t familycode,
110 int32_t *temperaturevalue );
111 extern uint8_t DS18X20_format_from_maxres( int32_t temperaturevalue,
112 char s[], uint8_t n);
113 #endif /* DS18X20_MAX_RESOLUTION */
114
115
116 #if DS18X20_EEPROMSUPPORT
117 // write th, tl and config-register to scratchpad (config ignored on DS18S20)
118 uint8_t DS18X20_write_scratchpad( uint8_t id[],
119 uint8_t th, uint8_t tl, uint8_t conf);
120 // read scratchpad into array SP
121 uint8_t DS18X20_read_scratchpad( uint8_t id[], uint8_t sp[], uint8_t n);
122 // copy values int scratchpad into DS18x20 eeprom
123 uint8_t DS18X20_scratchpad_to_eeprom( uint8_t with_power_extern,
124 uint8_t id[] );
125 // copy values from DS18x20 eeprom into scratchpad
126 uint8_t DS18X20_eeprom_to_scratchpad( uint8_t id[] );
127 #endif /* DS18X20_EEPROMSUPPORT */
128
129
130 #if DS18X20_VERBOSE
131 extern void DS18X20_show_id_uart( uint8_t *id, size_t n );
132 extern uint8_t DS18X20_read_meas_all_verbose( void );
133 #endif /* DS18X20_VERBOSE */
134
135
136 #ifdef __cplusplus
137 }
138 #endif
139
140 #endif