ds18b20 fix for temperature below zero
This commit is contained in:
parent
5c885c7722
commit
3ea18e74da
1 changed files with 12 additions and 12 deletions
|
@ -33,7 +33,7 @@ uint8_t ds18b20_read_all(uint8_t pin, ds_sensor_t *result) {
|
||||||
uint8_t sensor_id = 0;
|
uint8_t sensor_id = 0;
|
||||||
|
|
||||||
onewire_search_start(&search);
|
onewire_search_start(&search);
|
||||||
|
|
||||||
while ((addr = onewire_search_next(&search, pin)) != ONEWIRE_NONE) {
|
while ((addr = onewire_search_next(&search, pin)) != ONEWIRE_NONE) {
|
||||||
uint8_t crc = onewire_crc8((uint8_t *)&addr, 7);
|
uint8_t crc = onewire_crc8((uint8_t *)&addr, 7);
|
||||||
if (crc != (addr >> 56)){
|
if (crc != (addr >> 56)){
|
||||||
|
@ -44,10 +44,10 @@ uint8_t ds18b20_read_all(uint8_t pin, ds_sensor_t *result) {
|
||||||
onewire_reset(pin);
|
onewire_reset(pin);
|
||||||
onewire_select(pin, addr);
|
onewire_select(pin, addr);
|
||||||
onewire_write(pin, DS18B20_CONVERT_T);
|
onewire_write(pin, DS18B20_CONVERT_T);
|
||||||
|
|
||||||
onewire_power(pin);
|
onewire_power(pin);
|
||||||
vTaskDelay(750 / portTICK_PERIOD_MS);
|
vTaskDelay(750 / portTICK_PERIOD_MS);
|
||||||
|
|
||||||
onewire_reset(pin);
|
onewire_reset(pin);
|
||||||
onewire_select(pin, addr);
|
onewire_select(pin, addr);
|
||||||
onewire_write(pin, DS18B20_READ_SCRATCHPAD);
|
onewire_write(pin, DS18B20_READ_SCRATCHPAD);
|
||||||
|
@ -57,7 +57,7 @@ uint8_t ds18b20_read_all(uint8_t pin, ds_sensor_t *result) {
|
||||||
for (int k=0;k<9;k++){
|
for (int k=0;k<9;k++){
|
||||||
get[k]=onewire_read(pin);
|
get[k]=onewire_read(pin);
|
||||||
}
|
}
|
||||||
|
|
||||||
//debug("\n ScratchPAD DATA = %X %X %X %X %X %X %X %X %X\n",get[8],get[7],get[6],get[5],get[4],get[3],get[2],get[1],get[0]);
|
//debug("\n ScratchPAD DATA = %X %X %X %X %X %X %X %X %X\n",get[8],get[7],get[6],get[5],get[4],get[3],get[2],get[1],get[0]);
|
||||||
crc = onewire_crc8(get, 8);
|
crc = onewire_crc8(get, 8);
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ uint8_t ds18b20_read_all(uint8_t pin, ds_sensor_t *result) {
|
||||||
uint8_t temp_msb = get[1]; // Sign byte + lsbit
|
uint8_t temp_msb = get[1]; // Sign byte + lsbit
|
||||||
uint8_t temp_lsb = get[0]; // Temp data plus lsb
|
uint8_t temp_lsb = get[0]; // Temp data plus lsb
|
||||||
uint16_t temp = temp_msb << 8 | temp_lsb;
|
uint16_t temp = temp_msb << 8 | temp_lsb;
|
||||||
|
|
||||||
float temperature;
|
float temperature;
|
||||||
|
|
||||||
temperature = (temp * 625.0)/10000;
|
temperature = (temp * 625.0)/10000;
|
||||||
|
@ -82,7 +82,7 @@ uint8_t ds18b20_read_all(uint8_t pin, ds_sensor_t *result) {
|
||||||
}
|
}
|
||||||
|
|
||||||
float ds18b20_read_single(uint8_t pin) {
|
float ds18b20_read_single(uint8_t pin) {
|
||||||
|
|
||||||
onewire_reset(pin);
|
onewire_reset(pin);
|
||||||
onewire_skip_rom(pin);
|
onewire_skip_rom(pin);
|
||||||
onewire_write(pin, DS18B20_CONVERT_T);
|
onewire_write(pin, DS18B20_CONVERT_T);
|
||||||
|
@ -93,13 +93,13 @@ float ds18b20_read_single(uint8_t pin) {
|
||||||
onewire_reset(pin);
|
onewire_reset(pin);
|
||||||
onewire_skip_rom(pin);
|
onewire_skip_rom(pin);
|
||||||
onewire_write(pin, DS18B20_READ_SCRATCHPAD);
|
onewire_write(pin, DS18B20_READ_SCRATCHPAD);
|
||||||
|
|
||||||
uint8_t get[10];
|
uint8_t get[10];
|
||||||
|
|
||||||
for (int k=0;k<9;k++){
|
for (int k=0;k<9;k++){
|
||||||
get[k]=onewire_read(pin);
|
get[k]=onewire_read(pin);
|
||||||
}
|
}
|
||||||
|
|
||||||
//debug("\n ScratchPAD DATA = %X %X %X %X %X %X %X %X %X\n",get[8],get[7],get[6],get[5],get[4],get[3],get[2],get[1],get[0]);
|
//debug("\n ScratchPAD DATA = %X %X %X %X %X %X %X %X %X\n",get[8],get[7],get[6],get[5],get[4],get[3],get[2],get[1],get[0]);
|
||||||
uint8_t crc = onewire_crc8(get, 8);
|
uint8_t crc = onewire_crc8(get, 8);
|
||||||
|
|
||||||
|
@ -110,9 +110,9 @@ float ds18b20_read_single(uint8_t pin) {
|
||||||
|
|
||||||
uint8_t temp_msb = get[1]; // Sign byte + lsbit
|
uint8_t temp_msb = get[1]; // Sign byte + lsbit
|
||||||
uint8_t temp_lsb = get[0]; // Temp data plus lsb
|
uint8_t temp_lsb = get[0]; // Temp data plus lsb
|
||||||
|
|
||||||
uint16_t temp = temp_msb << 8 | temp_lsb;
|
uint16_t temp = temp_msb << 8 | temp_lsb;
|
||||||
|
|
||||||
float temperature;
|
float temperature;
|
||||||
|
|
||||||
temperature = (temp * 625.0)/10000;
|
temperature = (temp * 625.0)/10000;
|
||||||
|
@ -157,7 +157,7 @@ bool ds18b20_read_scratchpad(int pin, ds18b20_addr_t addr, uint8_t *buffer) {
|
||||||
onewire_select(pin, addr);
|
onewire_select(pin, addr);
|
||||||
}
|
}
|
||||||
onewire_write(pin, DS18B20_READ_SCRATCHPAD);
|
onewire_write(pin, DS18B20_READ_SCRATCHPAD);
|
||||||
|
|
||||||
for (int i = 0; i < 8; i++) {
|
for (int i = 0; i < 8; i++) {
|
||||||
buffer[i] = onewire_read(pin);
|
buffer[i] = onewire_read(pin);
|
||||||
}
|
}
|
||||||
|
@ -174,7 +174,7 @@ bool ds18b20_read_scratchpad(int pin, ds18b20_addr_t addr, uint8_t *buffer) {
|
||||||
|
|
||||||
float ds18b20_read_temperature(int pin, ds18b20_addr_t addr) {
|
float ds18b20_read_temperature(int pin, ds18b20_addr_t addr) {
|
||||||
uint8_t scratchpad[8];
|
uint8_t scratchpad[8];
|
||||||
int temp;
|
int16_t temp;
|
||||||
|
|
||||||
if (!ds18b20_read_scratchpad(pin, addr, scratchpad)) {
|
if (!ds18b20_read_scratchpad(pin, addr, scratchpad)) {
|
||||||
return NAN;
|
return NAN;
|
||||||
|
|
Loading…
Reference in a new issue