|
Программа и платы взяты отсюда http://vpv.irk.ru/tempkeeper/ Уважаемый jusupoff: в начале темы шла о датчике ds18B20, а не об устаревших ds18S20 Во-первых: 5 балов Вам за внимательность, предоставленой мной картинки. Вот только с программой вы походу дело не знакомы, она часто любит другой тип датчика писать, как не как бесплатная. Под рукой нет фотика, завтра выложу фото платы и подключенного к ней датчика DS18B20! (а показывать она будет 18S20) Во-вторых: в предыдушем сообщении я писал А поповоду кипения, если кто непонял, я имел виду, что значение 99,974 ближе к 99,9 (что получилось у эксперементатора), чем Ваши 100 по определению Вы потрудились - это прочитать? Если непонимаете прочитаное, объясняю, 100°C это 0640h (HEX), а 99,9375°C это 063Fh (HEX), какую температуру должен показать датчик DS18B20 в кипящей воде (при условии что при калибровке на заводе ему "повезло")? В-третих: Мой первый коментарий здесь не про температуру закипания воды. В-последних: если Вы умеете читать только обзоры и хорошо их запоминаете, я рад за Вас . А как дела с практикой? Ни хотите поделится с гражданами своим практичеким опытом?
|
|
|
DIKLER, исключительно для вас: "А как дела с практикой?" - хотите измерить... как там его? Начинайте с себя. "Ни хотите поделится...? - нихачу, кому надо сами находят. Ваш первый комментарий в теме про преждевременный опрос датчика и температру 85 градусов - "не в тему", у автора врет на 3-4 градуса. Это так, к слову. И не утруждайте себя фотографиями, лучше приведите алгоритм опроса датчика DS18S20 и 18B20 в приведенной вами программе. Сколько бит считывалось при вашем тестировании? В каком режиме работал подключенный DS18B20? В 9-ти битном, также как и 18S20? тогда не факт, что разогрев можно заметить, так как преобразование идет быстрее и разрешающая способность низкая. Все-таки потреблямые 1,5 мА в процессе преобразования - это достаточный ток, чтобы получить нагрев датчика, и в случае плохого теплообмена с измеряемой средой (воздухом) можно получить ошибку.
|
|
|
Уважаемый jusupoff - это тоже исключительно для Вас! Почитал я, что народ пишет (два чела, как максимум). "Собрал, работает, но почему-то температура плывет на 2 (ДВА!!!) градуса. И не знают почему." Вы рехнулись? Их бы с производства сняли (на два градуса плывет температура), при заявленной точности 0,5 градуса. В фирменном датошите я это не нашел. А по поводу “уплывания”, вероятно нужно битики в программе лучше чистить, чтобы они лишку не копили. Почему вы не написали конкретную цифру “уплывания”, постеснялись? уж больно она большая и бредовая! Вы знаете кто такой Ридико Леонид Иванович? Если нет, потрудитесь почитать его труды в это области! (Мой респект и уважуха Леониду Ивановичу за его труды, не только в теории!!! но и в практике!) Далее режим в котором у меня работает датчик: Это из документации DS18B20 страница 4, параграф OPERATION — MEASURING TEMPERATURE: The resolution of the temperature sensor is user-configurable to 9, 10, 11, or 12 bits, corresponding to increments of 0.5°C,0.25°C, 0.125°C, and 0.0625°C, respectively. The default resolution at power-up is 12-bit. Тоже самое, но на русском: Разрешающая способность температурного преобразователя может быть изменена пользователем и составляет 9, 10, 11, или 12 битов, соответствуя приращениям (дискретности измерения температуры) 0.5 °C, 0.25°C, 0.125°C, и 0.0625°C, соответственно. Разрешающая способность по умолчанию установлена 12-бит. Разрешающую способность датчика на меньшую, я не менял! А теперь факты. Был произведен новый эксперимент. На макетную плату PIC16F876, алфавитно-цифровой ЖКИ, датчик DS18B20, переключатель на два положения. Первое положения замер производится раз в 15 секунд, о чем свидетельствует моргание зеленого светодиода раз в 15 секунд. Второе положение, замер производится раз в 1 секунду, о чем сигнализирует красный светодиод, моргая 1 раз в секунду. На видео это видно, на фото мне так и не удалось подловить включенный красный светодиод. К сожалению термоса дома нет, прикрыл колпачком от маркера, чтобы устранить влияние потока воздух. В итоге более или менее установившаяся разница между этими двумя режимами составила 0,0625 градуса!(в HEX это 01h младшего разряда). Но это не показатель, если долго наблюдать, то температура скачет до 0,1875 градуса (03h) в обе стороны, независимо от режима измерения. Найду термос, померяю более точно. А то пишут всякии, "да у меня на 2 градуса уплыла температура ...." А пока изучайте это: Схема, прошивка, проект в протеусе, фото и видео (извините с мобилы) прилагаются. проекто - http://www.x2b.ru/get/8408 прошивка - http://www.x2b.ru/get/8409 фото http://www.x2b.ru/get/8406 режим с 1 секундой http://www.x2b.ru/get/8407 режим с интервалом 15 секунд Видео с интервалом измерения 15 сек - http://www.x2b.ru/get/8404 (0,45 Мб) Видео с интервалом измерения 1 сек - http://www.x2b.ru/get/8405 (0,45 Мб) Видео 3GP,воспроизвести можно, к примеру, этим – http://zavoevanie.3dn.ru/load/0-0-0-72-20 |
|
|
choroh: Для получения десятичных значений умножил результат на 10... Недавно искал простой алгоритм преобразования 12-битного кода для датчиков TMP275, а нашёл в инете для DS18B20. Где - уже не помню, вот цитата: -------------------------- Датчик DS18B20 возвращает температуру с фиксированной запятой, 4 знака после запятой. Таким образом для получения температуры с точностью 0.1 градуса нам нужно возвращаемое значение умножить на 0.625 Код: value = (value>>1) + (value>>3); Как всё просто! И никаких дробей и т.д. Как работает ... Сдвиг вправо на один бит -- это деление на два. Сдвиг вправо на три бита -- это деление на восемь Перепишем... Код: value = value*(1/2) + value* (1/8) = value*(4/8) + value * (1/8) = value * (5/8) = value* 0.625 Напоследок весь код функции: (Полное его объяснение не входит в мою задачу, смотрите даташит на датчик) Преобразования в формат с фиксированной запятой (1 знак после запятой): Код: int16_t ds1w_12bit_to_celsius(uint16_t value) {uint8_t uc1; uc1 = (value>>8) & 0x80; //запомнить знак числа if (uc1) value = 0-value; //если нужно, проинвертировать value = (value>>1) + (value>>3); //скорректировать if (uc1) value = 0-value; //восстановить знак return(value); } -------------------------- На асме тоже всё просто пишется... Кстати, при 3-х проводном подключении DS18B20 не надо отсчитывать 750mS... Проще опрашивать шину - датчик сам скажет (отпустив шину в "1"), когда он измерил температуру. Всё описано в даташите. |
|