Да можно и паяльником или феном чуть погреть, что б далеко не ходить. Пока подозрение на самый старший залипший бит MSB:BSSSSS1xx Если он действительно "залип", то выше 64 градусов датчик начнёт правильно показывать температуру :)
Ну в общим не стал возиться с двумя датчиками местного приобретения, пришли датчики с китая, тут же завелись и правильно работают. Короче китай рулит, всем за участие спасибо!
Недавно обнаружил следующую неисправность на одном из датчиков. Из-за неудачной прокладки кабеля, перетерлись и закоротили все три жилки. Как там чего коротило не особо вникал, там есть вибрация. После изолирования и восстановления целостности проводки датчик получил дефект. Отключаешь питание, ждешь стабилизации температуры, включаешь – датчик начинает плавно набирать температуру. По прикидкам у меня висит примерно +5 С. Пока не мучил датчик, только наблюдаю. Есть предположения, что подгорел дата порт и теперь подогревает корпус датчика.
Резюме: самый первый способ определить неисправность DS18B20 термостатировать датчик и снять лог первых 30 сек после подачи питания на него. Ну и всяческие комбинации при подачи питания «с ноги» МК.
Этот датчик точность измерения имеет 0,5 градуса. И то не во всем диапазоне. У меня работает. Но врет и он, и bmp 280. И на несколько градусов...
почитайте этот топик, желатеьно полностью. Более подробных по данному вопросу на этом форуме не встречал. Первые 90 постов настоятельно рекомендую прочитать.
А сталкивался кто с "уходом" показаний DS18B20 в приличный "плюс" в течение примерно полугода? Сразу несколько штук.
Заменил на новые - и опять всё хорошо (т.е. проблема именно в датчиках).
Подключение - по даташиту, исполнение - заливка в глухой трубке, в жидкости не погружались, грелись незначительно. Подозреваю брак партии.
А сталкивался кто с "уходом" показаний DS18B20 в приличный "плюс" в течение примерно полугода? Сразу несколько штук.
Заменил на новые - и опять всё хорошо (т.е. проблема именно в датчиках).
Подключение - по даташиту, исполнение - заливка в глухой трубке, в жидкости не погружались, грелись незначительно. Подозреваю брак партии.
угу, недавно поменял, но он не совсем в + ушел, после выключения остывал и очень быстро нагревался после включения (пост 56)
Нармальные "пацаны" сначала "узнают" сигнатуру датчика, потом настраивают точность его измерения АДРЕСНО обращаясь именно к нужному датчику! Потом дают команду на старт измерения либо АДРЕСНО, либо всем датчикам СРАЗУ. Команду delay стрёмно использовать, это признак недопрограммиста. Нормальные пацаны делают флаговЫе поля для чётко вымеренных временных интервалов, например в 1 секунду и уже по "поднятию" временного флага дают команды датчикам. Есть так-же проверка на присутствие датчика на шине и проверка контрольной суммы в ответной пачке байт с датчика. Только после всего этого принятая от датчика "пачка" байт считается валидной! Отт как нужно программировать...)))))
Нармальные "пацаны" сначала "узнают" сигнатуру датчика, потом настраивают точность его измерения АДРЕСНО обращаясь именно к нужному датчику! Потом дают команду на старт измерения либо АДРЕСНО, либо всем датчикам СРАЗУ. Команду delay стрёмно использовать, это признак недопрограммиста. Нормальные пацаны делают флаговЫе поля для чётко вымеренных временных интервалов, например в 1 секунду и уже по "поднятию" временного флага дают команды датчикам. Есть так-же проверка на присутствие датчика на шине и проверка контрольной суммы в ответной пачке байт с датчика. Только после всего этого принятая от датчика "пачка" байт считается валидной! Отт как нужно программировать...)))))
1. Нахрена ее узнавать для одного датчика?
2. Зачем настраивать разрядность каждый раз?
3. 0xCC, что делает, по вашему?
4. С делеем соглашусь, хотя для теста и он пойдет.
5. У меня года три без КС работает и ничего, все валидно.
А вы какой датчик читаете после конвертации ? Все сразу , что ли.
Вот из даташита:
SKIP ROM [CCh] Пропуск ROM [CCh]
Главное устройство может использовать эту команду, чтобы обратиться ко всем устройствам на шине одновременно. Например, главное устройство может заставить, чтобы все DS18B20 (датчики температуры) на шине, начали одновременно температурные преобразования. Для этого необходимо выдать на шину команду Пропуска ROM [CCh] сопровождаемую командой Температурного преобразования [44h].
Обратите внимание, что команда ЧТЕНИЕ ПАМЯТИ [BEh] может следовать за командой Пропуска ROM, только если на шине присутствует одно подчиненное устройство. Команда Пропуска ROM, сопровождаемая командой ЧТЕНИЕ ПАМЯТИ вызовет конфликт на уровне данных на шине, если на шине более одного подчиненного устройства, так как все устройства будут пытаться одновременно передавать данные.
Стикался ли кто то с проблемой когда нужно менрять температуру больше 90 а датчик только до 80 доходит и пишет -127 в чем проблема так как датчик работать должен в пределах -55 до +125 ?
Стикался ли кто то с проблемой когда нужно менрять температуру больше 90 а датчик только до 80 доходит и пишет -127 в чем проблема так как датчик работать должен в пределах -55 до +125 ?
номинал сопротивления шины данных и какой режим используете 2х проводный или 3х проводный?
Режим роботи 3х проводной сопротивление между + и сигнальним 4.8к(хотя где то читал но не пробовал можно от 4-10к ?)
А каким образом 2х проводной режим использовать?
Режим роботи 3х проводной сопротивление между + и сигнальним 4.8к(хотя где то читал но не пробовал можно от 4-10к ?) А каким образом 2х проводной режим использовать?
сопротивление слишком большое и не годится для высокой температуры, я не парюсь и использую 2,2к или 2,7к просто опрашиваю немного реже. 2х проводный режим не годится для температур выше (вот тут много разных вариантов встречал в разных ДШ) 60 С.
сталкивался с трудностями даже при рекомендуемом 4к7 сопротивлении...
сталкивался с трудностями даже при рекомендуемом 4к7 сопротивлении...
Есть "девайс" , там 9-ть датчиков 18b20 на одной шине. Резистор подтяжки 4к7 стоит у МК. Никаких конденсаторов на питании нет. Измеряем температуру 30-110. Долго. Бывает и сутками. В софте есть логгер ошибок по датчикам. Редкий раз вижу значение, отличающееся от нуля.
МК управляет твердотельным реле 1,2 или 4 кВт 220 Вольт.
Есть дисплей i2c, RTC и клавиатура. Есть логгер и по i2c. Всё собрано "на коленке".
Работает так больше года.
...Почему нет проблем??? (шлейф с датчиками = МГТФ... метра 3 точно)
//2х проводный режим не годится для температур выше (вот тут много разных вариантов встречал в разных ДШ) 60 С
И еще, интересно.
// датчик начинает плавно набирать температуру. По прикидкам у меня висит примерно +5 С. Пока не мучил датчик, только наблюдаю. Есть предположения, что подгорел дата порт и теперь подогревает корпус датчика.
Нельзя ли померить ток потребления? По земле и по питанию.
For parasite-powered DS18B20s, the master must enable a strong pullup on the 1-Wirebus during temperature conversions and copies from the scratchpad to EEPROM. No other bus activity may take place during this time
В старом ДШ от даласа видел цифирю +85 ... но его сорян искать не буду... возможно это было связано с применением простого сопротивления, без подтяжки транзистором (там схема есть)
//2х проводный режим не годится для температур выше (вот тут много разных вариантов встречал в разных ДШ) 60 С
И еще, интересно.
// датчик начинает плавно набирать температуру. По прикидкам у меня висит примерно +5 С. Пока не мучил датчик, только наблюдаю. Есть предположения, что подгорел дата порт и теперь подогревает корпус датчика.
Нельзя ли померить ток потребления? По земле и по питанию.
я его потерял в своем хламе :(((( он стоял на приборе далеко от дома (градусник в деревне) просто заменил и все на этом.
Нармальные "пацаны" сначала "узнают" сигнатуру датчика, потом настраивают точность его измерения АДРЕСНО обращаясь именно к нужному датчику! Потом дают команду на старт измерения либо АДРЕСНО, либо всем датчикам СРАЗУ. Команду delay стрёмно использовать, это признак недопрограммиста. Нормальные пацаны делают флаговЫе поля для чётко вымеренных временных интервалов, например в 1 секунду и уже по "поднятию" временного флага дают команды датчикам. Есть так-же проверка на присутствие датчика на шине и проверка контрольной суммы в ответной пачке байт с датчика. Только после всего этого принятая от датчика "пачка" байт считается валидной! Отт как нужно программировать...)))))
Можно ссылкочку на пример скетча пож.?
p.s. Долбусь некоторе время с парой датчиков. Упрямо шлют "0" в консоль. Интересует момент отладки.
Нармальные "пацаны" сначала "узнают" сигнатуру датчика, потом настраивают точность его измерения АДРЕСНО обращаясь именно к нужному датчику! Потом дают команду на старт измерения либо АДРЕСНО, либо всем датчикам СРАЗУ. Команду delay стрёмно использовать, это признак недопрограммиста. Нормальные пацаны делают флаговЫе поля для чётко вымеренных временных интервалов, например в 1 секунду и уже по "поднятию" временного флага дают команды датчикам. Есть так-же проверка на присутствие датчика на шине и проверка контрольной суммы в ответной пачке байт с датчика. Только после всего этого принятая от датчика "пачка" байт считается валидной! Отт как нужно программировать...)))))
Можно ссылкочку на пример скетча пож.?
p.s. Долбусь некоторе время с парой датчиков. Упрямо шлют "0" в консоль. Интересует момент отладки.
на вемосе, но разницы нет
#include <ESP8266WiFi.h>
#include <ESP8266Ping.h>
/* DS18B20 Temperature Sensor */
#include <OneWire.h>
#include<DallasTemperature.h> // <a data-cke-saved-href="https://github.com/milesburton/Arduino-Temperature-Control-Library" href="https://github.com/milesburton/Arduino-Temperature-Control-Library" rel="nofollow">https://github.com/milesburton/Arduino-Temperature-Control-Library</a>
#define ONE_WIRE_BUS D2 // DS18B20 подключаем на D4 на плате (a 4.7K resistor is necessary)
// D0 - GPIO6
// D1 - GPIO5
// D2 - GPIO4
// D3 - GPIO0
// D4 - GPIO2
// Если надо задать GPIO указываем его номер ( ONE_WIRE_BUS 2) - GPIO2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
float tempC0;
float tempC1;
float tempC2;
#include <Ticker.h>
Ticker flipper;
const char* ssid = "Oss"; //"Rostelecom";
const char* password = "1234";
const char* host = "mydomen.pro";
const int httpPort = 80;
const int interval = 1*60; // 1 минута
bool ret;
int tm = interval;
void flip(){
tm--;
// Serial.println(tm);
}
void getData()
{
DS18B20.requestTemperatures();
tempC0 = DS18B20.getTempCByIndex(0); // Sensor 0 показания для датчика 1 в цельсиях
tempC1 = DS18B20.getTempCByIndex(1); // Sensor 0 показания для датчика 2 в цельсиях
tempC2 = DS18B20.getTempCByIndex(2); // Sensor 0 показания для датчика 3 в цельсиях
Serial.print(" tempC0: ");
Serial.print(tempC0);
Serial.println(" oC . ");
Serial.print(" tempC1: ");
Serial.print(tempC1);
Serial.println(" oC . ");
Serial.print(" tempC2: ");
Serial.print(tempC2);
Serial.println(" oC . ");
}
void setup() {
Serial.begin(115200);
delay(10);
DS18B20.begin();
delay(10);
DS18B20.setResolution(12); // устанавливаем разрешение градусника 9, 10, 11, или 12 bit
getData(); // забираем температуру с градусников
Send(); // при включении отправляем данные
flipper.attach(1, flip); // запускаем таймер
}
// функция отправляет данные в базу на сайте
void Send() {
// Подключаемся к wifi
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print("."); } //
Serial.println(); // отправляем в Serial данные о подключении
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("MAC address: ");
Serial.println(WiFi.macAddress());
Serial.println();
// подключаемся к серверу
Serial.print("ping connecting http://");
Serial.println(host);
for(int i = 0; i <3; i++){
ret = Ping.ping(host);
Serial.print(ret);
}
Serial.println();
// Use WiFiClient class to create TCP connections
WiFiClient client;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
// отправляем данные
Serial.println("Sending...");
// заголовок
String url = "/temp/ds18b20.php?";
url += "&tempC0=";
url += tempC0;
url += "&tempC1=";
url += tempC1;
url += "&tempC2=";
url += tempC2;
url += "&macIP=";
url += WiFi.macAddress();
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
client.stop();
delay(10);
// читаем ответ и отправляем его в сериал
// вообще на ответ нужно как-то реагировать
Serial.print("Requesting: ");
while(client.available()){
String line = client.readStringUntil('\r');
Serial.print(line); } //
client.stop();
Serial.println();
Serial.println();
Serial.println("Closing connection");
WiFi.disconnect(); // отключаемся от сети
Serial.println("Disconnect WiFi.");
}
void loop() {
if (tm == 0){ // если таймер отработал
flipper.detach(); // выключаем
tm = interval; // сбрасываем переменную таймера
getData(); // забираем температуру с градусников
Send(); // отправляем
flipper.attach(1, flip); // включаем прерывание по таймеру
}
} // END LOOP
Да можно и паяльником или феном чуть погреть, что б далеко не ходить. Пока подозрение на самый старший залипший бит MSB:BSSSSS1xx Если он действительно "залип", то выше 64 градусов датчик начнёт правильно показывать температуру :)
Ну в общим не стал возиться с двумя датчиками местного приобретения, пришли датчики с китая, тут же завелись и правильно работают. Короче китай рулит, всем за участие спасибо!
то же показывал 80 градусов.. Подключен был к esp8266 +5в.. Все разрешилось после переключения питания на 3.3в
Этот датчик точность измерения имеет 0,5 градуса. И то не во всем диапазоне. У меня работает. Но врет и он, и bmp 280. И на несколько градусов...
Та ладно, с чего такой вывод?
Недавно обнаружил следующую неисправность на одном из датчиков. Из-за неудачной прокладки кабеля, перетерлись и закоротили все три жилки. Как там чего коротило не особо вникал, там есть вибрация. После изолирования и восстановления целостности проводки датчик получил дефект. Отключаешь питание, ждешь стабилизации температуры, включаешь – датчик начинает плавно набирать температуру. По прикидкам у меня висит примерно +5 С. Пока не мучил датчик, только наблюдаю. Есть предположения, что подгорел дата порт и теперь подогревает корпус датчика.
Резюме: самый первый способ определить неисправность DS18B20 термостатировать датчик и снять лог первых 30 сек после подачи питания на него. Ну и всяческие комбинации при подачи питания «с ноги» МК.
почитайте этот топик, желатеьно полностью. Более подробных по данному вопросу на этом форуме не встречал. Первые 90 постов настоятельно рекомендую прочитать.
в коде ошибка пересчёта показаний.
А сталкивался кто с "уходом" показаний DS18B20 в приличный "плюс" в течение примерно полугода? Сразу несколько штук.
Заменил на новые - и опять всё хорошо (т.е. проблема именно в датчиках).
Подключение - по даташиту, исполнение - заливка в глухой трубке, в жидкости не погружались, грелись незначительно. Подозреваю брак партии.
А сталкивался кто с "уходом" показаний DS18B20 в приличный "плюс" в течение примерно полугода? Сразу несколько штук.
Заменил на новые - и опять всё хорошо (т.е. проблема именно в датчиках).
Подключение - по даташиту, исполнение - заливка в глухой трубке, в жидкости не погружались, грелись незначительно. Подозреваю брак партии.
угу, недавно поменял, но он не совсем в + ушел, после выключения остывал и очень быстро нагревался после включения (пост 56)
Кстати, тоже не исключено, что они там внутри трубок быстренько перегревались. Теперь поздно экспериментировать...
Это "кто" нацарапал? ШкольнеГ?
Нармальные "пацаны" сначала "узнают" сигнатуру датчика, потом настраивают точность его измерения АДРЕСНО обращаясь именно к нужному датчику! Потом дают команду на старт измерения либо АДРЕСНО, либо всем датчикам СРАЗУ. Команду delay стрёмно использовать, это признак недопрограммиста. Нормальные пацаны делают флаговЫе поля для чётко вымеренных временных интервалов, например в 1 секунду и уже по "поднятию" временного флага дают команды датчикам. Есть так-же проверка на присутствие датчика на шине и проверка контрольной суммы в ответной пачке байт с датчика. Только после всего этого принятая от датчика "пачка" байт считается валидной! Отт как нужно программировать...)))))
Это "кто" нацарапал? ШкольнеГ?
Нармальные "пацаны" сначала "узнают" сигнатуру датчика, потом настраивают точность его измерения АДРЕСНО обращаясь именно к нужному датчику! Потом дают команду на старт измерения либо АДРЕСНО, либо всем датчикам СРАЗУ. Команду delay стрёмно использовать, это признак недопрограммиста. Нормальные пацаны делают флаговЫе поля для чётко вымеренных временных интервалов, например в 1 секунду и уже по "поднятию" временного флага дают команды датчикам. Есть так-же проверка на присутствие датчика на шине и проверка контрольной суммы в ответной пачке байт с датчика. Только после всего этого принятая от датчика "пачка" байт считается валидной! Отт как нужно программировать...)))))
1. Нахрена ее узнавать для одного датчика?
2. Зачем настраивать разрядность каждый раз?
3. 0xCC, что делает, по вашему?
4. С делеем соглашусь, хотя для теста и он пойдет.
5. У меня года три без КС работает и ничего, все валидно.
[byte data[2];
Стикался ли кто то с проблемой когда нужно менрять температуру больше 90 а датчик только до 80 доходит и пишет -127 в чем проблема так как датчик работать должен в пределах -55 до +125 ?
номинал сопротивления шины данных и какой режим используете 2х проводный или 3х проводный?
Режим роботи 3х проводной сопротивление между + и сигнальним 4.8к(хотя где то читал но не пробовал можно от 4-10к ?)
А каким образом 2х проводной режим использовать?
сопротивление слишком большое и не годится для высокой температуры, я не парюсь и использую 2,2к или 2,7к просто опрашиваю немного реже. 2х проводный режим не годится для температур выше (вот тут много разных вариантов встречал в разных ДШ) 60 С.
сталкивался с трудностями даже при рекомендуемом 4к7 сопротивлении...
Благодарю буду пробовать :)
То мне нужно для системы автоматики в автоелектрике контроль охлаждающей жидкости и запуск вентиляторов :)
сталкивался с трудностями даже при рекомендуемом 4к7 сопротивлении...
Есть "девайс" , там 9-ть датчиков 18b20 на одной шине. Резистор подтяжки 4к7 стоит у МК. Никаких конденсаторов на питании нет. Измеряем температуру 30-110. Долго. Бывает и сутками. В софте есть логгер ошибок по датчикам. Редкий раз вижу значение, отличающееся от нуля.
МК управляет твердотельным реле 1,2 или 4 кВт 220 Вольт.
Есть дисплей i2c, RTC и клавиатура. Есть логгер и по i2c. Всё собрано "на коленке".
Работает так больше года.
...Почему нет проблем??? (шлейф с датчиками = МГТФ... метра 3 точно)
Есть "девайс" , там 9-ть датчиков 18b20 на одной шине. Резистор подтяжки 4к7 стоит у МК.
Работает так больше года.
...Почему нет проблем??? (шлейф с датчиками = МГТФ... метра 3 точно)
могу только предположить - разные партии и производители. других идей нет, я не разбирался, просто понизил сопротивление и не парюсь.
Гриша, а у меня вот есть некоторые идеи.
Но хотелось бы от Вас получить ссылку на
//2х проводный режим не годится для температур выше (вот тут много разных вариантов встречал в разных ДШ) 60 С
И еще, интересно.
// датчик начинает плавно набирать температуру. По прикидкам у меня висит примерно +5 С. Пока не мучил датчик, только наблюдаю. Есть предположения, что подгорел дата порт и теперь подогревает корпус датчика.
Нельзя ли померить ток потребления? По земле и по питанию.
For parasite-powered DS18B20s, the master must enable a strong pullup on the 1-Wirebus during temperature conversions and copies from the scratchpad to EEPROM. No other bus activity may take place during this time
...
The use of parasite power is not recommended for temperatures above +100°C since the DS18B20 may not be able to sustain communications due to the higher leakage currents that can exist at these temperatures. For applications in which such temperatures are likely, it is strongly recommended that the DS18B20 be powered by an external power supply.
В старом ДШ от даласа видел цифирю +85 ... но его сорян искать не буду... возможно это было связано с применением простого сопротивления, без подтяжки транзистором (там схема есть)
DS18B20 Datasheet (PDF) - Maxim Integrated Products
Гриша, а у меня вот есть некоторые идеи.
Но хотелось бы от Вас получить ссылку на
//2х проводный режим не годится для температур выше (вот тут много разных вариантов встречал в разных ДШ) 60 С
И еще, интересно.
// датчик начинает плавно набирать температуру. По прикидкам у меня висит примерно +5 С. Пока не мучил датчик, только наблюдаю. Есть предположения, что подгорел дата порт и теперь подогревает корпус датчика.
Нельзя ли померить ток потребления? По земле и по питанию.
я его потерял в своем хламе :(((( он стоял на приборе далеко от дома (градусник в деревне) просто заменил и все на этом.
Поставил резистор на 3к и все работает показывала до 120 норм. То от 2к до 3.5к можно спокойно ставить и будет ок
Нармальные "пацаны" сначала "узнают" сигнатуру датчика, потом настраивают точность его измерения АДРЕСНО обращаясь именно к нужному датчику! Потом дают команду на старт измерения либо АДРЕСНО, либо всем датчикам СРАЗУ. Команду delay стрёмно использовать, это признак недопрограммиста. Нормальные пацаны делают флаговЫе поля для чётко вымеренных временных интервалов, например в 1 секунду и уже по "поднятию" временного флага дают команды датчикам. Есть так-же проверка на присутствие датчика на шине и проверка контрольной суммы в ответной пачке байт с датчика. Только после всего этого принятая от датчика "пачка" байт считается валидной! Отт как нужно программировать...)))))
Можно ссылкочку на пример скетча пож.?
p.s. Долбусь некоторе время с парой датчиков. Упрямо шлют "0" в консоль. Интересует момент отладки.
Нармальные "пацаны" сначала "узнают" сигнатуру датчика, потом настраивают точность его измерения АДРЕСНО обращаясь именно к нужному датчику! Потом дают команду на старт измерения либо АДРЕСНО, либо всем датчикам СРАЗУ. Команду delay стрёмно использовать, это признак недопрограммиста. Нормальные пацаны делают флаговЫе поля для чётко вымеренных временных интервалов, например в 1 секунду и уже по "поднятию" временного флага дают команды датчикам. Есть так-же проверка на присутствие датчика на шине и проверка контрольной суммы в ответной пачке байт с датчика. Только после всего этого принятая от датчика "пачка" байт считается валидной! Отт как нужно программировать...)))))
Можно ссылкочку на пример скетча пож.?
p.s. Долбусь некоторе время с парой датчиков. Упрямо шлют "0" в консоль. Интересует момент отладки.
на вемосе, но разницы нет