-
Notifications
You must be signed in to change notification settings - Fork 0
/
ds18x20.h
140 lines (110 loc) · 4.29 KB
/
ds18x20.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#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 0
// decicelsius functions disabled(0) or enabled(1):
#define DS18X20_DECICELSIUS 1
// max. resolution functions disabled(0) or enabled(1):
#define DS18X20_MAX_RESOLUTION 0
// 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