From e04bb5ecffd1a114438eb611c67054d3ae6ecbff Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Tue, 10 Mar 2020 11:23:45 +0100 Subject: [PATCH] Fix DS18x20 driver (#7879) Fix DS18x20 driver (#7879) --- tasmota/xsns_05_ds18x20.ino | 43 +++++++------------------------------ 1 file changed, 8 insertions(+), 35 deletions(-) diff --git a/tasmota/xsns_05_ds18x20.ino b/tasmota/xsns_05_ds18x20.ino index 5b46d5519..5ecf39122 100644 --- a/tasmota/xsns_05_ds18x20.ino +++ b/tasmota/xsns_05_ds18x20.ino @@ -126,8 +126,6 @@ void OneWireWriteBit(uint8_t v) delayMicroseconds(delay_high[v]); } -/* -// Fails for reasons unknown to me uint8_t OneWireReadBit(void) { if (!ds18x20_dual_mode) { @@ -135,44 +133,19 @@ uint8_t OneWireReadBit(void) digitalWrite(ds18x20_pin, LOW); delayMicroseconds(3); pinMode(ds18x20_pin, Settings.flag3.ds18x20_internal_pullup ? INPUT_PULLUP : INPUT); // SetOption74 - Enable internal pullup for single DS18x20 sensor + delayMicroseconds(10); + uint8_t r = digitalRead(ds18x20_pin); + delayMicroseconds(53); + return r; } else { digitalWrite(ds18x20_pin_out, LOW); delayMicroseconds(3); digitalWrite(ds18x20_pin_out, HIGH); + delayMicroseconds(10); + uint8_t r = digitalRead(ds18x20_pin); + delayMicroseconds(53); + return r; } - delayMicroseconds(10); - uint8_t r = digitalRead(ds18x20_pin); - delayMicroseconds(53); - return r; -} -*/ -// Works fine in contrast to above. Why? -void OneWireReadBit1(void) -{ - pinMode(ds18x20_pin, OUTPUT); - digitalWrite(ds18x20_pin, LOW); - delayMicroseconds(3); - pinMode(ds18x20_pin, Settings.flag3.ds18x20_internal_pullup ? INPUT_PULLUP : INPUT); // SetOption74 - Enable internal pullup for single DS18x20 sensor -} - -void OneWireReadBit2(void) -{ - digitalWrite(ds18x20_pin_out, LOW); - delayMicroseconds(3); - digitalWrite(ds18x20_pin_out, HIGH); -} - -uint8_t OneWireReadBit(void) -{ - if (!ds18x20_dual_mode) { - OneWireReadBit1(); - } else { - OneWireReadBit2(); - } - delayMicroseconds(10); - uint8_t r = digitalRead(ds18x20_pin); - delayMicroseconds(53); - return r; } /*------------------------------------------------------------------------------------------*/