-
-
Notifications
You must be signed in to change notification settings - Fork 26
Home
This is detailed description of avr-ds18b20
library. If you have any questions feel free to email me.
1-Wire library consists of three functions:
-
onewireInit( ... )
- initiates 1-Wire bus (sends reset inpulse) -
onewireRead( ... )
- reads single byte from 1-Wire bus -
onewireWrite( ... )
- writes single byte to 1-Wire bus
Each of those functions takes arguments such as:
- port output register address (e.g.
&PORTA
or&PORTC
) - port direction register address (e.g.
&DDRC
or&DDRD
) - port input register address (e.g.
&PINC
or&PINB
) - a bit mask (e.g.
( 1 << 5 )
when sensors is connected to the pin 5)
and in case of onewireWrite
an uint8_t
value to be sent.
Additionally, onewireInit
function returns an error code, which can be one of those values:
Value | Macro | Description |
---|---|---|
0 | ONEWIRE_ERROR_OK |
No error occurred |
1 | ONEWIRE_ERROR_COMM |
Communication error occurred |
Functions described above disable global interrupts when they are called, but SREG
value is restored before they exit.
avr-ds18b20
library contains following functions:
-
ds18b20convert( ... )
- requests temperature conversion on selected sensor -
ds18b20read( ... )
- reads temperature from sensors (obtained during last conversion) -
ds18b20rom( ... )
- reads ROM address of the sensor -
ds18b20rsp( ... )
- reads sensor's scratchpad contents -
ds18b20wsp( ... )
- writes configuration bytes in sensor's scratchpad -
ds18b20csp( ... )
- copies sensor's configuration into its EEPROM
Description: requests temperature conversion on selected sensor. Conversion duration may vary, depending on sensor's precision. Please take look at datasheet.
|Argument|Description|
|----|----|-----------|
|volatile uint8_t *port
|Port output register address|
|volatile uint8_t *direction
|Port direction register address|
|volatile uint8_t *portin
|Port input register address|
|uint8_t mask
|Bit mask (describes on which pin sensor is connected)|
|uint8_t *rom
|ROM address (NULL
if you want to skip matching)|
Description: reads temperature data from sensor into an int16_t
variable. Returned value is actual temperature multiplied by 16 (DS18B20_MUL
value)
|Argument|Description|
|----|----|-----------|
|volatile uint8_t *port
|Port output register address|
|volatile uint8_t *direction
|Port direction register address|
|volatile uint8_t *portin
|Port input register address|
|uint8_t mask
|Bit mask (describes on which pin sensor is connected)|
|uint8_t *rom
|ROM address (NULL
if you want to skip matching)|
|int16_t *temperature
|Temperature data is going to be stored in the variable under this address|
Description: reads rom address into array.
|Argument|Description|
|----|----|-----------|
|volatile uint8_t *port
|Port output register address|
|volatile uint8_t *direction
|Port direction register address|
|volatile uint8_t *portin
|Port input register address|
|uint8_t mask
|Bit mask (describes on which pin sensor is connected)|
|uint8_t *rom
|ROM address is going to be stored here (8b)|
Description: reads sensor's scratchpad content into array.
|Argument|Description|
|----|----|-----------|
|volatile uint8_t *port
|Port output register address|
|volatile uint8_t *direction
|Port direction register address|
|volatile uint8_t *portin
|Port input register address|
|uint8_t mask
|Bit mask (describes on which pin sensor is connected)|
|uint8_t *rom
|ROM address (NULL
if you want to skip matching)|
|uint8_t *sp
|Scratchpad content is going to be stored here (9b)|
Description: writes configuration bytes in sensor's scratchpad. Sensor's precision can be set this way.
|Argument|Description|
|----|----|-----------|
|volatile uint8_t *port
|Port output register address|
|volatile uint8_t *direction
|Port direction register address|
|volatile uint8_t *portin
|Port input register address|
|uint8_t mask
|Bit mask (describes on which pin sensor is connected)|
|uint8_t *rom
|ROM address (NULL
if you want to skip matching)|
|uint8_t tl
|Thermostat low temperature|
|uint8_t th
|Thermostat hight temperature|
|uint8_t conf
|Configuration data|
To set precision, pass those macros as the last argument:
-
DS18B20_RES09
- 9 bits -
DS18B20_RES10
- 10 bits -
DS18B20_RES11
- 11 bits -
DS18B20_RES12
- 12 bits
Description: copies sensor's configuration into its EEPROM in order to make it persistent between power-up cycles. This is rather long process that takes around 10ms.
|Argument|Description|
|----|----|-----------|
|volatile uint8_t *port
|Port output register address|
|volatile uint8_t *direction
|Port direction register address|
|volatile uint8_t *portin
|Port input register address|
|uint8_t mask
|Bit mask (describes on which pin sensor is connected)|
|uint8_t *rom
|ROM address (NULL
if you want to skip matching)|
Every function described above also returns an error code. Those are possible values:
Value | Macro | Description |
---|---|---|
0 | DS18B20_ERROR_OK |
No error occurred |
1 | DS18B20_ERROR_CRC |
Received data is invalid |
2 | DS18B20_ERROR_COMM |
Communication error occurred |
3 | DS18B20_ERROR_PULL |
Only zero's were received. This is most likely an issue with pull-up resistor on 1-Wire bus |
4 | DS18B20_ERROR_OTHER |
Some other error occurred. For example, user tried to read ROM with ds18b20rom into NULL pointer |