Датчик DS18B20 вычисление отрицательной температуры.

При вычисление отрицательных значений температуры, не опытному, в этом плане любителю (как мне),
легко сделать не очевидную и не вычисляемую при эксплуатации ошибку.
Формат предоставления данных в датчике DS18B20 представлен в даташите табличкой:

И очень соблазнительно для точности 1градус, включить преобразование с точностью 9бит, и строчкой
temp=(StratchPad[0]>>4)|(StratchPad[1]<<4); получить знаковые 8 битные данные.
но при таком подходе, у меня вычисленные значения расходятся с табличкой из даташита.
В таблице 0xFF5E это -10,125С, а у меня получается 0xF5 это -11С
В таблице 0xFE6F это -25,0625C, а у меня получается 0xE6 это -26С
В таблице 0xFC90 это -55С, вот тут совпадение С9 это -55С
Пробуем перехитрить и просто инвертировать без добавления 1
~0xF5=0xA, ура 10С совпало!!!
~0xE6=0x19 ура 25С опять совпало!!!
~0xC9=0x36 блин 54С не совпало.
Решение оказалось простым надо сначала перевести из дополнительного кода в прямой, а потом отбрасывать лишние биты
((~0xFF5E)+1)>>4=0xA =10C(минус учитывается в программе)
((~0xFE6F)+1)>>4=0x19 =25C
((~0xFC90)+1)>>4=0x37=55C
ЗАРАБОТАЛО )))

Цифровой датчик температуры LMT01

Решил написать заметку про убийцу вариант замены всеми полюбившегося датчика ds18b20.
Все мы знаем ds18b20 — это цифровой датчик температуры, который позволяет делать замеры с достаточно высокой точностью и обмениваться данными с окружающим миром по протоколу 1 wire. И все хорошо в этом датчике, да вот только протокол 1 wire не всегда реализован в железе МК и как часто это бывает, приходится городить свой трехколесный или же пользоваться сторонними либами. При этом больше всего обидно, когда нам нужно сделать устройство, которое питается от батарейки и должно работать миллисекунды, а потом засыпать на часы, а для банального замера температуры приходится общаться с датчиком, тратить на это клоки МК, ждать и «засорять» флеш и RAM кодом, который можно было бы использовать более оптимально.
Читатель может возразить — так можно поставить термопару или другой аналоговый прибор и замерять через АЦП — и будет прав, но при этом возрастает количество элементов на схеме и плате, а так же всегда есть шанс ошибиться при монтаже и т.д.
И вот на помощь нам пришла компания Texas instruments которая разработала цифровой датчик LMT01, который по своим характеристикам не уступает народному ds18b20, а в некоторых случаях его даже превосходит (даташит).
Но самое главное — у датчика всего две ноги, они же служат ему питанием и коммуникацией с внешним миром. А коммуникация у него проста как двери — подаем на него питание и через мгновение датчик начинает дрыгать ногой. Сколько раз дрыгнул — столько и насчитал единиц температуры! Один «дрыг» = 0.0625°С. т.е. нам нужно всего-то подключить одну ногу к МК, подать в нужный момент на него питание и посчитать сколько раз датчик дёрнет за нашу ногу. Как считать — думаю что тут уже каждый сам для себя придумает. Самый простой способ — прерывание на ноге. Способ посложнее — подсчет таймером. Согласитесь — просто до неприличия. Даже примеры коды приводить смысла нет.
Длинна проводников, которыми он может быть подключен к МК может достигать двух метров, тут конечно не сравнить с шиной 1 wire но это не сильно критический минус.

Единственный критический минус, который может оттолкнуть — это пока его цена. Колеблется она начиная от 1,5 вечнозеленых президентов и на китайских барахолках он пока не доступен. Но, видимо китайцы скоро наделают его клонов.
Как оказалось на терраэлектронике этот датчик дешевле далласа.

Ну и для тех кому лень лезть в даташит немного характеристик:
Основные характеристики:
Корпус: TO-92/LPG(2)
Тип датчика: Цифровой
Диапазон измеряемых температур: -50...150 С
Точность измерения ±: 0,5 С
Разрешение: 0,0625 С

UPD:
Для сравнения с ds18b20:
Только включил и через 54мс получаем температуру, ничего не нужно отправлять, инициализировать и конфигурировать.
Время получения данных о температуре максимум 50мс. при 150 C, минимум 0мс при -50С.
Итого суммарное время получения макс. 104мс.
В далласе при двуногом подключении нужно выдерживать интервалы из даташита, для 12 бит это уже 750мс. + время на отправку команд для измерения и чтение данных.
Ну и разница в потреблении питания миллиамперы у далласа против микроампер у LMT01.
Так же, для некоторых специфических задач можно получать непрерывное измерение температуры со интервалом 104мс если не отключать датчик…

Минусы:
одна нога — один датчик.
не везде цена адекватная, но как писал выше — есть дешевле далласа.
короткий провод до датчика — не более 2 м. по даташиту.
протокол не совсем протокол, скорее тупое получение данных.

Простая схемка подключения. В ДШ есть и другие.

Термометр на DS18B20 + 1-Wire на AVR

Запилил себе термометр на базе DS18B20.



Под катом еще картинки и описание кода…


Читать дальше

Термометр с тревогой и логированием в баню

Arduino Pro Mini
Для контроля температуры, влажности и датчиков дыма решил собрать схемку с использованием платки Arduino Pro Mini.
Плата, в принципе, подойдет любая, главное чтобы на ней стоял микроконтроллер ATMEGA328P и были доступны все выводы.
Датчики температуры цифровые (1-Wire), датчик влажности аналоговый.
Запись лога в формате CSV ведется на SD карту (используется библиотека FatFs (C) ChaN).
Дисплей используется символьный — 20x4.


Читать дальше
  • +4
  • 29 декабря 2014, 11:47
  • vad7
  • 2

Термометр с питанием от солнечных элементов

На базе популярного датчика температуры DS1820, микроконтроллера AtTiny24A, ЖК-индикатора и деталей, добытых из садовых фонариков я собрал несложный термометр, предназначенный для измерения уличной температуры:



Читать дальше

Отключение защиты от замерзания электро-котла Protherm Скат

Protherm Ray
В достаточно неплохой электро-котел встроена защита от замерзания, срабатывающая при достаточно высокой температуре, и которую невозможно отключить.
И если в систему залит антифриз, и планируется периодическое удаленное включение отопления (заранее перед приездом раз в неделю, по праздникам и т.п.), то эта защита может вылиться в копеечку.
Отключаем защиту с помощью навесной схемки на микроконтроллере AVR с цифровым датчиком температуры DS18B20.


Читать дальше
  • +1
  • 11 ноября 2014, 19:07
  • vad7
  • 1

Самодельный термозонд на базе DS18B20

Готовый зондКупил я как-то от жадности пару цифровых 1-wire термометров DS18B20 (даташит)в корпусе TO-92. Купил как-то без всякой цели — увидел, что такие существуют и купил. Благо на ебее они идут по 43 руб штука.

И руки до них особо не доходили, пока не захотел хотя бы попробовать, рабочие они или нет.
Оказались вполне рабочие. Причем, что особенно порадовало — показания у двух датчиков, установленных в одну макетку совпадали друг с другом с расхождением менее, чем в градус, что, для тех же DHT11 и DHT22 мягко говоря не очень характерно.

Тут же появились мысли, что неплохо бы этот градусник приспособить под бытовые нужды — померять температуру на выходе из обычного или автомобильного кондиционера (а не использовать для этого BMP180, как я делал недавно), температуру воды после термостата, температуру теплых полов, температуру внутри холодильника…
Благо, диапазон измерений — от -55 до 125 градус Цельсия — позволяет.

Проблема в одном — голый корпус TO-92 в воду не сунешь. Да и во всякие грязные и пыльные места тоже нежелательно.
Причем понятно, что загнать датчик в термоусадку — скорее всего не выход. Потому что защита датчика должна обеспечивать хороший подвод тепла к нему.

Готовых вариантов на том же ебее — вагон и маленькая тележка. Но стало интересно, а как вообще такие зонды устроены и можно ли сделать их самостоятельно.

Читать дальше

Термометр на ATTINY2313+DS18B20 доработанный

AVR
Недавно занимался сборкой компьютера с полностью пассивным охлаждением. Чтобы было удобно контролировать температуру процессора, нужно было по быстрому собрать термометр. Всяческие программы типа «Everest», «Aida», и прочие мне не подходили по одной простой причине: хотелось контролировать температуру даже при выключенном мониторе. Или даже при полностью отключенном мониторе. Было решено собрать термометр на основе цифрового датчика DS18B20, дешёвого микроконтроллера AVR, и семисегментного индикатора. Сначала я хотел повторить схему термометра по одному из вариантов, предложенных в интернете. Но после анализа схем, размещённых в интернете, я пришёл к выводу, что придётся изобретать свой «велосипед».


Читать дальше
  • +8
  • 15 сентября 2014, 20:45
  • Zlodey
  • 4

Даллас. Быстрое преобразование температуры.


Картинка для привлечения внимания, есличто.
А что касается темы — пришла мысль, и её требуется записать, что я сейчас и делаю.
Итак, есть термометр ds18b20, и я как-то уже рассказывал, как брать с него температуру, и показывать на экране. Делалось это умножением на 625 с последующим делением на сто, преобразованием в BCD, и выводом, вставляя запятую перед второй справа цифрой.

Читать дальше

Платка расширения "Tiny RTC I2C modules"

Приобрел для эспериментов Ардуиновский шилд «Tiny RTC I2C modules», для облегчения работы срисовал схему. Потом нашел ее в забугорном интернете, но мне моя кажется удобней. Решил выложить обе здесь. Надеюсь пригодятся.


Читать дальше