

Общее описание.
DS18B20 это цифровой измеритель температуры, с разрешением преобразования 9 - 12 разрядов и функцией тревожного сигнала контроля за температурой. Параметры контроля могут быть заданы пользователем и сохранены в энергонезависимой памяти датчика.
DS18B20 обменивается данными с микроконтроллером по однопроводной линии связи, используя протокол интерфейса 1-Wire.
Питание датчик может получать непосредственно от линии данных, без использования внешнего источника. В этом режиме питание датчика происходит от энергии, запасенной на паразитной емкости.
Диапазон измерения температуры составляет от -55 до +125 °C. Для диапазона от -10 до +85 °C погрешность не превышает 0,5 °C.
У каждой микросхемы DS18B20 есть уникальный серийный код длиной 64 разряда, который позволяет нескольким датчикам подключаться на одну общую линию связи. Т.е. через один порт микроконтроллера можно обмениваться данными с несколькими датчиками, распределенными на значительном расстоянии. Режим крайне удобен для использования в системах экологического контроля, мониторинга температуры в зданиях, узлах оборудования.
Коротко об особенностях DS18B20.
Для однопроводного интерфейса 1-Wire достаточно одного порта связи с контроллером.
Каждое устройство имеет уникальный серийный код длиной 64 разряда.
Возможность подключения нескольких датчиков через одну линию связи.
Нет необходимости во внешних компонентах.
Возможность получать питание непосредственно от линии связи. Напряжение питания в пределах 3,0 В … 5,5 В.
Диапазон измерения температуры -55 ... +125 °C.
Погрешность не превышает 0,5 °C в диапазоне -10 ... +85 °C.
Разрешение преобразования 9 … 12 бит. Задается пользователем.
Время измерения, не превышает 750 мс, при максимально возможном разрешении 12 бит.
Возможность программирования параметров тревожного сигнала.
Тревожный сигнал передает данные об адресе датчика, у которого температуры вышла за заданные пределы.
Совместимость программного обеспечения с DS1822.
Крайне широкие области применения.
[img]Обзор%20датчика%20DS18B20.[/img]
На рисунке 1 блок-схема датчика DS18B20. 64-битное ПЗУ (ROM) хранит уникальный серийный код устройства. Оперативная память содержит:
значение измеренной температуры (2 байта);
верхний и нижний пороговые значения срабатывания тревожного сигнала (Th, Tl);
регистр конфигурации (1 байт).
Через регистр конфигурации можно установить разрешение преобразования термодатчика. Разрешение может быть задано 9, 10, 11 или 12 бит. Регистр конфигурации и пороги тревожного сигнала содержатся в энергонезависимой памяти (EEPROM).
В микросхеме DS18B20 для обмена данными использует специализированный протокол 1-Wire корпорации Dallas. Для линии связи требуется слабый подтягивающий резистор т.к. все устройства физически подключены к одной общей шине и используют выход с тремя состояниями или выход типа открытый сток. В этой системе с одной шиной, микроконтроллер (мастер) определяет наличие устройств на шине и обменивается с ними, используя уникальный адрес для каждого устройства - 64-разрядный код. Т.к. каждый термодатчик имеет уникальный код, то число устройств, подключенных к шине, практически ни чем не ограничено. Протокол интерфейса 1-Wire подробно описан в разделе ИНТЕРФЕЙС 1-Wire.
Другая особенность DS18B20 – работать без внешнего источника питания. Питание происходит через подтягивающий резистор шины и вывод DQ, во время высокого уровня шины. Сигнал высокого уровня заряжает через вывод DQ внутренний конденсатор (Cpp), энергией которого и питается микросхема при низком уровне линии связи. Этот метод в спецификации протокола 1-Wire называется ”паразитное питание”. Ничего не мешает использовать и внешнее питание для DS18B20. Подается оно на вывод Vdd.

Режим – измерение температуры.
Основная функция DS18B20 – преобразование температуры датчика в цифровой код. Разрешение преобразования задается 9, 10, 11 или 12 бит. Это соответствует разрешающей способность - 0,5 (1/2) °C, 0,25 (1/4) °C, 0,125 (1/8) °C и 0,0625 (1/16) °C. При включении питания, состояние регистра конфигурации устанавливается на разрешение 12 бит.
После включения питания DS18B20 находится в низко-потребляющем состоянии покоя. Чтобы инициировать измерение температуры мастер (микроконтроллер) должен выполнить команду ПРЕОБРАЗОВАНИЯ ТЕМПЕРАТУРЫ [44h]. После завершения преобразования, результат измерения температуры будет находиться в 2 байтах регистра температуры, и датчик опять перейдет в состояние покоя.
Если DS18B20 включен по схеме с внешним питанием, то мастер может контролировать состояние команды конвертации. Для этого он должен читать состояние линии (выполнять временной слот чтения), по завершению команды, линия перейдет в высокое состояние. Во время выполнения команды конвертации линия удерживается в низком состоянии.
При питании от заряда паразитной емкости, такой способ не допустим, т.к. во время операции преобразования на шине необходимо удерживать высокий уровень сигнала для питания датчика. Технология “паразитного питания” подробно описывается в разделе ПИТАНИЕ DS18B20.
DS18B20 измеряет температуру в градусах по шкале Цельсия. Результат измерения представляется как 16-разрядное, знаковое число в дополнительном коде (рис. 2.) . Бит знака (S) равен 0 для положительных чисел и равен 1 для отрицательных. При разрешении 12 бит, у регистра температуры все биты значащие, т.е. имеют достоверные значения. Для разрешения 11 бит, не определен бит 0. Для 10-битного разрешения не определены биты 0, 1. При разрешении 9 бит, не достоверное значение имеют биты 0, 1 и 2. В таблице 2 показаны примеры соответствия цифровых кодов значению температуры.


Для людей не искушенных в двоичной математике, напишу, что для вычисления температуры надо:
При положительном значении ( S=0 ) код перевести в десятичный и умножить на 0,0625 °C.
При отрицательном значении ( S=1 ) сначала необходимо перевести дополнительный код в прямой. Для этого надо инвертировать каждый разряд двоичного кода и прибавить 1. А затем перевести в десятичный и умножить на 0,0625 °C.
Режим – передача тревожного сигнала.
После выполнения команды преобразования температуры, измеренное значение сравнивается с верхним и нижним порогами из регистров Th, Tl (формат на рисунке 3). Это байтовые значения, знаковые, в дополнительном коде, S =0 означает, что число положительное, а S=1 – отрицательное. Хранятся пороговые значения в энергонезависимой памяти (EEPROM). Th и Tl доступны для чтения и записи через байты 2, 3 оперативной памяти. Подробно об этом в разделе ПАМЯТЬ.

Из-за разной длины регистров TH, TL и температуры, они сравниваются только с битами 11 по 4 регистра температуры. Если значение измеренной температуры превышает TH или ниже, чем TL, то формируется признак аварии в DS18B20. Признак перезаписывается с каждым измерением температуры, и если температура возвращается в заданные пределы, то он сбрасывается.
Ведущее устройство может проверить состояние признака аварии с помощью команды ПОИСК ТРЕВОЖНОГО СИГНАЛА [ECh]. Любой датчик с активным признаком ответит на команду поиска. Таким образом, мастер точно определит, какой DS18B20 вырабатывает сигнал тревоги. После изменения значений регистров TH и TL, только следующее преобразование температуры сформирует достоверный признак тревоги.
Питание термодатчика DS18B20.
DS18B20 может быть подключен к внешнему источнику питания через вывод Vdd или работать по схеме ”паразитного питания”, без дополнительного источника. Режим ”паразитного питания” крайне удобен для приложений с удаленными датчиками температуры. На рисунке 4 приведена схема, использующая ”паразитное питание”. При высоком уровне напряжения шины, энергия накапливается на ”паразитном” конденсаторе Cpp через вывод DQ. При низком уровне шины, энергия конденсатора обеспечивает питание датчика. В режиме ”паразитного питания” вывод Vdd обязательно должен быть соединен с общим проводом схемы (землей).

В режиме паразитного питания, сигнал шины и заряд Cpp способны обеспечить необходимый ток для работы DS18B20, при условии, что временные параметры и требования к уровням сигналов будут соответствовать разделу ЭЛЕКТРИЧЕСКИЕ ХАРАКТЕРИСТИКИ.
Однако когда DS18B20 выполняет операцию преобразования температуры или копирования данных памяти в EEPROM, потребляемый ток может достигать величины 1,5 мА. Такой ток может вызвать снижение напряжения питания устройства до недопустимого значения. Тока подтягивающего резистора и энергии, запасенной на Cpp, не достаточно для питания в этих двух режимах. Для того чтобы гарантировать достаточное питание устройства, необходимо обеспечить мощную подтяжку шины к высокому уровню в то время, когда происходит преобразование температуры или копирование данных памяти в EEPROM. Это можно сделать с помощью MOSFET транзистора, как показано на схеме (рисунок 4). Шина данных должна быть подключена к мощному питанию:
в течение 10 мкс после команд КОНВЕРТИРОВАНИЯ [44h] и КОПИРОВАНИЯ ПАМЯТИ [48h];
в течение времени преобразования (tconv) и передачи данных (не менее tWR=10мс).
Никаких других операций в это время на шине допускать нельзя.
Как правило, у современных микроконтроллеров выходного тока высокого уровня вполне достаточно для питания DS18B20. Тогда в MOSFET транзисторе необходимости нет.
Для питания DS18B20 может быть использован обычный метод – подключение внешнего питания через вывод VDD (рисунок 5). Очевидные преимущества этого метода в отсутствии необходимости в MOSFET транзисторе и в том, что во время преобразования шина остается свободной и может использоваться в других целях.

Использование ”паразитного питания” настоятельно не рекомендуется при температуре более 100 °C, из-за большого тока утечки. Энергии запасенной на Cpp может не хватить для нормальной работы. При измерении такой температуры следует использовать внешнее питание.
Я, в таких случаях, использую следующую схему подключения DS18B20.

В этой схеме термодатчик работает в режиме с внешним питанием, которое запасается на дополнительном конденсаторе через диод. В моих устройствах схема работает отлично.
В некоторых случаях мастер не может знать, какой режим питания используется. Эта информация может понадобиться, чтобы правильно управлять транзистором мощной подтяжки уровня. Для определения режима питания, ведущее устройство может выполнить команду ПРОПУСТИТЬ ROM (CCh] , затем команду ЧТЕНИЕ ЭЛЕКТРОПИТАНИЯ [B4h], а затем выполнить слот чтения. Во время чтения термодатчик с ”паразитным питанием” ответит состоянием 0. А датчик с внешним питанием сообщит об этом высоким уровнем.
64-разрядный серийный код устройства.
Каждый датчик DS18B20 содержит в ROM уникальный код, 64 бита длиной (рис. 6). Младшие восемь бит содержат код семейства микросхем DS18B20 28h. Средний блок из 48 бит это уникальный серийный номер устройства. Старшие восемь бит это циклический код (CRC) для всех предыдущих 56 битов. Подробно про циклический код в разделе ЦИКЛИЧЕСКИЙ КОД.

Память датчика.
Организация памяти DS18B20 показана на рисунке 7. Вся память включает в себя оперативную (SRAM) и энергонезависимую (EEPROM) память. В EEPROM хранятся регистры TH, TL и регистр конфигурации. Если функция тревожного сигнала не используется, то регистры TH и TL могут использоваться как регистры общего назначения. Все команды управления памятью подробно описаны в разделе ФУНКЦИИ КОМАНД.

В байтах с адресами 0 и 1 хранятся младший и старший байты регистра измеренной температуры. Эти байты доступны только для чтения. 2й и 3й байты – TH и TL регистры. Байт 4 – регистр конфигурации. Подробно об этом регистре в разделе РЕГИСТР КОНФИГУРАЦИИ. Байты 5, 6, 7 зарезервированы, не могут быть записаны и, при чтении, всегда возвращают 1.
Байт 8 доступен только для чтения. Он содержит циклический код (CRC) для первых восьми байтов. DS18B20 формирует этот код по способу, описанному в части ГЕНЕРАЦИЯ ЦИКЛИЧЕСКОГО КОДА.
Запись данных в байты 2, 3 и 4 происходит командой ЗАПИСЬ ПАМЯТИ [4Eh]. Данные должны передаваться, начиная с младшего бита байта 2. Для проверки записи данных можно прочитать память командой ЧТЕНИЕ ПАМЯТИ [код BEh]. При чтении данные передаются по шине, в последовательности начиная с младшего бита байта 0. Запись данных TH, TL и регистра конфигурации в EEPROM происходит по команде КОПИРОВАНИЕ ПАМЯТИ [48h].
При включении питания, данные из энергонезависимой памяти EEPROM перегружаются в оперативную память (SRAM). Перезагрузку данных из EEPROM можно также сделать командой ПЕРЕЗАГРУЗКА E2 [B8h]. Мастер должен контролировать состояние шины, чтобы определить завершение перезагрузки. Слот чтения низкого уровня означает, что перезагрузка еще не закончилась. По завершению перезагрузки DS18B20 передает слот чтения 1.
http://mypractic.ru/ds18b20-datchik-temperatury-s-interfejsom-1-wire-opisanie-na-russkom-yazyke.html