ds1820
- Войдите на сайт для отправки комментариев
Вс, 28/02/2016 - 14:39
Данный скетч дает вывод температуры с точностью до 0.5 градуса. как можно получить большую точность. скажем до 0.01?
Буду признателен за пинок в нужном направлении..
#include <OneWire.h> // OneWire DS18S20, DS18B20, DS1822 Temperature Example // // <a href="http://www.pjrc.com/teensy/td_libs_OneWire.html" title="http://www.pjrc.com/teensy/td_libs_OneWire.html" rel="nofollow">http://www.pjrc.com/teensy/td_libs_OneWire.html</a> // // The DallasTemperature library can do all this work for you! // <a href="http://milesburton.com/Dallas_Temperature_Control_Library" title="http://milesburton.com/Dallas_Temperature_Control_Library" rel="nofollow">http://milesburton.com/Dallas_Temperature_Control_Library</a> OneWire ds(2); // on pin 10 (a 4.7K resistor is necessary) byte i; byte present = 0; byte type_s; byte data[12]; byte addr[8]; float celsius, fahrenheit; void setup(void) { Serial.begin(9600); } void loop(void) { if ( !ds.search(addr)) { Serial.println("No more addresses."); Serial.println(); ds.reset_search(); delay(250); return; } Serial.print("ROM ="); for( i = 0; i < 8; i++) { Serial.write(' '); Serial.print(addr[i], HEX); } if (OneWire::crc8(addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return; } Serial.println(); // the first ROM byte indicates which chip switch (addr[0]) { case 0x10: Serial.println(" Chip = DS18S20"); // or old DS1820 type_s = 1; break; case 0x28: Serial.println(" Chip = DS18B20"); type_s = 0; break; case 0x22: Serial.println(" Chip = DS1822"); type_s = 0; break; default: Serial.println("Device is not a DS18x20 family device."); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // start conversion, with parasite power on at the end delay(1000); // maybe 750ms is enough, maybe not present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad Serial.print(" Data = "); Serial.print(present, HEX); Serial.print(" "); for ( i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); Serial.print(data[i], HEX); Serial.print(" "); } Serial.print(" CRC="); Serial.print(OneWire::crc8(data, 8), HEX); Serial.println(); // Convert the data to actual temperature // because the result is a 16 bit signed integer, it should // be stored to an "int16_t" type, which is always 16 bits // even when compiled on a 32 bit processor. int16_t raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; // 9 bit resolution default if (data[7] == 0x10) { // "count remain" gives full 12 bit resolution raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); // at lower res, the low bits are undefined, so let's zero them if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms //// default is 12 bit resolution, 750 ms conversion time } celsius = (float)raw / 16.0; Serial.print(" Temperature = "); Serial.print(celsius); Serial.print(" Celsius, "); Serial.print(fahrenheit); Serial.println(" Fahrenheit"); }
Данный скетч дает вывод температуры с точностью до 0.5 градуса. как можно получить большую точность. скажем до 0.01?
Буду признателен за пинок в нужном направлении..
Пинаю в сторону даташита ds1820. Его точность 0,50С. Нужна больше - берите другой датчик.
И, кстати, если бы Вам нужна была точность 0,1, то я бы сказал, что это обойдётся Вам в 3-5 тысяч рублей. А 0,01 - как Вы пишете!!! Даже не знаю, что и сказать, но уверен, что цена вопроса Вас не порадует. Вы уверены. что Вам такая точность нужна?
уже нет. :) спасибо!
ЕвгенийП, по моему ТС имел ввиду резолюшн :)
Данный скетч дает вывод температуры с точностью до 0.5 градуса. как можно получить большую точность. скажем до 0.01?
Буду признателен за пинок в нужном направлении..
Ваш пример выдает шаг в 0,5гр. только при условии, что неведомым нас способом вы перевели датчик в 9 разрядный режим. Верните ему 12разрядный и будете радоваться шагу в 0,0625гр. Мельче шагать не умеет.((((
это просто пример взятый с форума.. частно говоря я с ним вобще ничего не делал. если есть более простой и работоспособный код буду так же признателен!
Вам точность нужна или набор цифр после запятой подлиннее?
ну если бы получить точность хотя бы в четверть градуса было бы здорово.. набор цифр точно не нужен.
Какую минимальную - максимальную собираетесь измерять?
А погрешность вам нужно минимизировать для абсолютных измерений или для относительных?
ну если бы получить точность хотя бы в четверть градуса было бы здорово.. набор цифр точно не нужен.
Они Вам точно надо? Ну, тогда, как я писал - Ваша тема - платиновый датчик. Точность 0,1%. Цена вопроса измеряется в "тырах". Например, http://www.chipdip.ru/product/hel707-u-1-12-c1-00/
Не знаю что такое тыр, но год назад брал за пару уе pt100, и он был раза в два дешевле cu
Данный скетч дает вывод температуры с точностью до 0.5 градуса. как можно получить большую точность. скажем до 0.01?
Буду признателен за пинок в нужном направлении..
Пинаю в сторону даташита ds1820. Его точность 0,50С. Нужна больше - берите другой датчик.
И, кстати, если бы Вам нужна была точность 0,1, то я бы сказал, что это обойдётся Вам в 3-5 тысяч рублей. А 0,01 - как Вы пишете!!! Даже не знаю, что и сказать, но уверен, что цена вопроса Вас не порадует. Вы уверены. что Вам такая точность нужна?
Можно взять спиртовой лабараторный термометр и считывать показания при помощи камеры :D
ну если бы получить точность хотя бы в четверть градуса было бы здорово.. набор цифр точно не нужен.
exez, наберите здесь в поиске "dimax ds18b20", он там подчистил пример + добавил возможность менять разрешение датчика. Поставите 12 бит и будет шаг 0,0625. Хотя с завода он и так должен стоять на таком разрешении. Вспоминайте, что делали с ним.
Определитесь с терминами и задачами. Точность не есть разрешение и наоборот. В подавляющем большинстве случаев при работе с комнатными температурами (морозилка - кипящий чайник) достаточно полупроводниковых датчиков. Проволочные обычно берутся для более высоких температур + практически не подвержены временному дрейфу.
Взяв датчик с погрешностью 0,01%, но не имея эталонных приборов для балансировки и установки, боюсь вы и 0,5% декларируемых не сумеете получить.