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

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

27.05.2019

В этой статье мы расскажем нашим читателям, как подключать датчики температуры DS18B20, LM35 и TMP36 на печатной плате Arduino UNO , которая построена на микроконтроллере ATmega328 . Основным предназначением датчиков температуры DS18B20, LM35 и TMP36 является снятие температурных показателей. В нашем случае температурные показатели с этих датчиков будет считывать печатная плата Arduino UNO, и выводить результат на экране компьютера. По сути, с помощью этих датчиков любой желающий может создать свой собственный термометр. Кроме детального описания использования Arduino UNO и датчиков DS18B20, LM35 и TMP36, мы расскажем нашим читателям, где можно приобрести эти компоненты.

Подготавливаем программную часть на ПК с помощью Arduino IDE

Если у вас есть уже плата Arduino UNO и рассматриваемые датчики, то настало время настроить компьютер для того, чтобы он смог работать с микроконтроллером. Для этой задачи нам потребуется программный пакет Arduino IDE. Загрузить этот пакет можно на официальном сайте www.arduino.cc. На момент написания статьи последней версией пакета является ARDUINO 1.6.10. Сам же IDE мы будем использовать на ПК с операционной системой Windows 10. После загрузки IDE запустим установочный файл.

В стартовом окне установщика принимаем условия лицензионного соглашения и переходим к следующему окну.


В этом окне оставляем все как есть и продолжаем установку нажатием кнопки «Next > ».


В этом окне можно выбрать путь установки для Arduino IDE, в нашем случае это папка по умолчанию. Выбрав путь, нажимаем кнопку «Install », которая запустит процесс установки.


После завершения установки на рабочем столе появится ярлык с именем Arduino.

Как видно из примера, установка Arduino IDE не многим отличается от установки других программ, единственное, что может смутить пользователя, это англоязычный интерфейс.

Подключаем датчик DS18B20 к плате Arduino UNO

Первым делом нам нужно подключить сам датчик к плате . Для этого нам понадобится макетная плата и резистор с сопротивлением, равным 4,7 кОм . Ниже изображена схема подключения рассматриваемого датчика DS18B20 к Arduino UNO.

Подключим плату к компьютеру посредством USB-кабеля. После подключения на плате должен загореться светодиод под названием «ON ». Теперь нам нужно открыть установленную ранее Arduino IDE через ярлык на рабочем столе.


В окне открытой программы перейдем в меню «Инструменты » в пункт «Плата :» и выберем нашу плату.


Чтобы заставить работать наш датчик, нам нужно загрузить библиотеку «DallasTemperature », которую можно скачать по этой ссылке arduino-project.net/DallasTemperature.rar. После загрузки библиотеки ее нужно подключить к IDE. Для этого разархивируем загруженную библиотеку в директорию с библиотеками, которая находится по адресу «C:\Program Files\Arduino\libraries». Посмотреть подключенную библиотеку можно в меню «Скетч ».

Теперь выполним пример из подключенной библиотеки . Для этого перейдем по ссылкам «Файл » - «Примеры » - «DallasTemperature » - «Multiple ». После этого действия в окно программы загрузится выбранный нами пример.

Теперь загружаем этот пример в плату Arduino UNO с помощью кнопки «». После этого откроем пункт «Монитор порта », который находится в меню «Инструменты ».


Из монитора видно, что наш датчик DS18B20 показывает температуру, как по Цельсию, так и по Фаренгейту.

Подключаем датчик LM35 к плате Arduino UNO

Датчик температуры LM35 является недорогой моделью, которую выпускает компания Texas Instruments . Этот датчик довольно просто подключается к Arduino UNO. Ниже представлена схема подключения рассматриваемого датчика к печатной плате.


Из схемы видно, что датчик LM35 подключается напрямую без использования резистора . Теперь наберем довольно простой код, изображенный в IDE ниже.


После загрузки этого кода на плату, откроем «Монитор порта » и увидим, как датчик снимает температурные показатели с места, где он находится.


Из примера видно, что датчик LM35 намного проще подключать к Ардуино UNO, чем рассмотренный ранее.

Подключаем датчик TMP36 к плате Arduino UNO

Датчик температуры TMP36 является бюджетной моделью компании Analog Devices . Поскольку для этого примера у нас отсутствовал сам датчик, то мы воспользовались интернет сервисом , который позволяет эмулировать платы Ардуино. Этот пример будет особенно интересен тем пользователям, которые хотят попробовать Arduino до его покупки. Чтобы попасть в сервис Autodesk Circuits, необходимо перейти на интернет страницу https://circuits.io. На этой странице необходимо пройти процедуру быстрой регистрации, после чего вы попадете на главную страницу сервиса.


Чтобы создать новый проект, необходимо нажать кнопку «New Electronics Lab » на этой странице. После этого действия мы попадем в окно проекта.


Из окна проекта видно, что у нас присутствует только макетная плата. Чтобы добавить необходимые нам компоненты откроем панель «Components ». Из этой панели мы добавим и соединим компоненты, как это показано на изображении ниже.


После сборки пакета перейдем в панель «Code Editor » и вставим текст , изображенный ниже.


Также обратите внимание на код. В нем имеются описания функций всех операций. Теперь попробуем запустить нашу плату . Для этого нажмем кнопку «Start Simulation », после чего мы увидим, как загорится зеленый светодиод. Чтобы проверить, что наш проект работает, мы откроем «Serial Monitor ».

Из окна монитора видно, что наш виртуальный датчик измеряет показатели температуры.

Из примера видно, что сделать проект с датчиком TMP36 в Autodesk Circuits совсем несложно. Настоятельно рекомендуем новичкам перед реальным использованием Ардуино UNO и компонентов воспользоваться эмулятором .

Если вы неправильно соберете какую-нибудь схему, то вы реально можете спалить, как плату Arduino UNO, так и ее компоненты. Кстати в Autodesk Circuits также можно спалить печатную плату, хоть и виртуальную.

Где достать компоненты Arduino, чтобы осуществить измерение температуры

Многие не раз задумывались о покупке Ардуино и дополнительных деталей к ней. Но сдерживающим фактором такой покупки всегда была довольно завышенная цена, которая представлена на отечественном рынке. Чтобы наши читатели смогли сэкономить, мы рекомендуем покупать все компоненты и платы Arduino в Китае. Одним из самых популярных китайских интернет магазинов является AliExpress.com. На этом сайте можно найти практически любой компонент и плату Ардуино. Ниже представлен список деталей, которые мы использовали в статье:

  • Датчик температуры DS18B20 стоит 0.7 доллара;
  • Датчик температуры LM35 стоит 0.8 доллара;
  • Датчик температуры TMP36 стоит 3 доллара;
  • Печатная плата Arduino UNO стоит примерно 3 доллара.

Из списка можно подвести итог, что связка Arduino UNO плюс DS18B20 является наиболее выгодным предложением.

Подводим итог

В этой статье мы рассмотрели два примера подключения физических датчиков измерения DS18B20, LM35 к печатной плате Arduino UNO. Кроме этого, мы рассмотрели вариант виртуальной сборки схемы с использованием датчика TMP36. Во всех примерах мы представили вывод температурных показателей только через «Монитор порта ». Это было сделано специально, чтобы максимально упростить схему сборки. На просторах сети можно найти сотни примеров, где можно использовать такие варианты подключения:

  • Превращение смартфона в термометр, благодаря снятию температурных показателей на его экране или ПК с различных датчиков, используя Wi-Fi модуль для Arduino;
  • Превращение смартфона в термометр, благодаря снятию температурных показателей на его экране или ПК с различных датчиков, используя Bluetooth модуль для Arduino;
  • Создание термостата со светодиодной индикацией;
  • Создание термометра на базе Arduino и TFT дисплея;
  • Получение температурных показателей с помощью Arduino через интернет.

Это лишь малая доля примеров, с помощью которых пользователь может получать температурные показатели через плату Arduino. Используя Ардуино, в наше время каждый может воплотить в реальность концепцию умного дома. Надеемся, наш материал будет полезным для вас, и благодаря ему, вы сможете подключить температурные датчики к своей плате Arduino.

Видео по теме

В статье приводится подробное описание интегрального датчика температуры DS18B20 на русском языке. Информация переведена на русский из официальной документации производителя датчика – компании Dallas Semiconductor.

Общее описание.

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.
  • Крайне широкие области применения.

Назначение выводов.

Обзор датчика DS18B20.

На рисунке 1 блок-схема датчика DS18B20. 64-битное ПЗУ (ROM) хранит уникальный серийный код устройства. Оперативная память содержит:

  • значение измеренной температуры (2 байта);
  • верхний и нижний пороговые значения срабатывания тревожного сигнала (Th, Tl);
  • регистр конфигурации (1 байт).

Через регистр конфигурации можно установить разрешение преобразования термодатчика. Разрешение может быть задано 9, 10, 11 или 12 бит. Регистр конфигурации и пороги тревожного сигнала содержатся в энергонезависимой памяти (EEPROM).


Режим – измерение температуры.

Основная функция 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 находится в низко-потребляющем состоянии покоя. Чтобы инициировать измерение температуры мастер (микроконтроллер) должен выполнить команду ПРЕОБРАЗОВАНИЯ ТЕМПЕРАТУРЫ . После завершения преобразования, результат измерения температуры будет находиться в 2 байтах регистра температуры, и датчик опять перейдет в состояние покоя.

Если 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. Признак перезаписывается с каждым измерением температуры, и если температура возвращается в заданные пределы, то он сбрасывается.

Ведущее устройство может проверить состояние признака аварии с помощью команды ПОИСК ТРЕВОЖНОГО СИГНАЛА . Любой датчик с активным признаком ответит на команду поиска. Таким образом, мастер точно определит, какой DS18B20 вырабатывает сигнал тревоги. После изменения значений регистров TH и TL, только следующее преобразование температуры сформирует достоверный признак тревоги.

Питание термодатчика DS18B20.


Однако когда DS18B20 выполняет операцию преобразования температуры или копирования данных памяти в EEPROM, потребляемый ток может достигать величины 1,5 мА. Такой ток может вызвать снижение напряжения питания устройства до недопустимого значения. Тока подтягивающего резистора и энергии, запасенной на Cpp, не достаточно для питания в этих двух режимах. Для того чтобы гарантировать достаточное питание устройства, необходимо обеспечить мощную подтяжку шины к высокому уровню в то время, когда происходит преобразование температуры или копирование данных памяти в EEPROM. Это можно сделать с помощью MOSFET транзистора, как показано на схеме (рисунок 4). Шина данных должна быть подключена к мощному питанию:

  • в течение 10 мкс после команд КОНВЕРТИРОВАНИЯ и КОПИРОВАНИЯ ПАМЯТИ ;
  • в течение времени преобразования (tconv) и передачи данных (не менее t WR =10мс).

Никаких других операций в это время на шине допускать нельзя.

Как правило, у современных микроконтроллеров выходного тока высокого уровня вполне достаточно для питания DS18B20. Тогда в MOSFET транзисторе необходимости нет.

Для питания DS18B20 может быть использован обычный метод – подключение внешнего питания через вывод V DD (рисунок 5). Очевидные преимущества этого метода в отсутствии необходимости в MOSFET транзисторе и в том, что во время преобразования шина остается свободной и может использоваться в других целях.


Я, в таких случаях, использую следующую схему подключения DS18B20.


В этой схеме термодатчик работает в режиме с внешним питанием, которое запасается на дополнительном конденсаторе через диод. В моих устройствах схема работает отлично.

64-разрядный серийный код устройства.

Память датчика.

Организация памяти 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 происходит командой ЗАПИСЬ ПАМЯТИ . Данные должны передаваться, начиная с младшего бита байта 2. Для проверки записи данных можно прочитать память командой ЧТЕНИЕ ПАМЯТИ [код BEh]. При чтении данные передаются по шине, в последовательности начиная с младшего бита байта 0. Запись данных TH, TL и регистра конфигурации в EEPROM происходит по команде КОПИРОВАНИЕ ПАМЯТИ .

При включении питания, данные из энергонезависимой памяти EEPROM перегружаются в оперативную память (SRAM). Перезагрузку данных из EEPROM можно также сделать командой ПЕРЕЗАГРУЗКА E 2 . Мастер должен контролировать состояние шины, чтобы определить завершение перезагрузки. Слот чтения низкого уровня означает, что перезагрузка еще не закончилась. По завершению перезагрузки DS18B20 передает слот чтения 1.

Регистр конфигурации термодатчика.

Байт 4 памяти это регистр конфигурации (формат на рисунке 8). Битами R0, R1 можно установить разрешение преобразования (коды в таблице 3). При включении питания состояние битов R0, R1 = 11, что соответствует разрешению 12 бит. Надо помнить, что существует прямая зависимость времени преобразования от разрешающей способности. Биты 7 и 0…4 зарезервированы, не могут использоваться, при чтении возвращают 1.



Генерация циклического кода (CRC)

Байты циклического кода (CRC) расположены в 64-битовом ROM коде и в девятом байте памяти SRAM. Циклический код из ROM вычисляется для 56ти битов кода ROM и располагается в старшем байте ROM. Циклический код из SRAM вычисляется из байтов 0…7 SRAM. Циклический код позволяет контролировать правильность чтения данных из DS18B20. Мастер вычисляет циклический код для полученных данных и сравнивает с принятым кодом. На основании этого принимается решение о корректности данных.

Образующий полином циклического кода выглядит так:

C R C = X 8 + X 5 + X 4 + 1

Мастер может вычислить циклический код используя генератор полинома, по схеме на рисунке 9. Он состоит из регистра сдвига и логических элементов типа “исключающее ИЛИ”. Регистр сдвига изначально находится в состоянии 0. Биты поступают в регистр сдвига, начиная с младшего бита, кода из ROM или из SRAM, один бит в один такт сдвига. После сдвига 56го бита ROM или старшего бита 7го байта SRAM, в регистре сдвига будет вычисленный циклический код. Если сдвинуть в генератор 8 бит ROM или SRAM, принятые из DS18B20, то в случае правильных данных, регистр сдвига будет содержать все 0.

Однопроводной интерфейс 1-Wire

Система с шиной 1-Wire состоит из одного ведущего устройства (МАСТЕР), которое управляет одним или несколькими ведомыми устройствами (СЛЕЙВ). DS18B20 может быть только ведомым. Система, в которой одно ведомое устройство, называется одноточечной. Система с несколькими ведомыми – многоточечной. Все команды и данные обмена передаются по шине младшим битом вперед. В дальнейшей информации об интерфейсе 1-Wire выделены три раздела: аппаратная конфигурация, последовательность операций и сигналы (типы и временные требования).

Аппаратная конфигурация.

Интерфейс 1-Wire имеет одну линию связи. Каждое устройство (ведущее или ведомое) подключено к шине данных портом с выходом типа открытый коллектор или с тремя состояниями. Такая конфигурация позволяет каждому устройству системы не занимать линию связи, когда оно не активно, и держать шину свободной для других устройств. В микросхеме DS18B20 выход (DQ) – открытый сток. Его эквивалентная схема приведена на рисунке 10. Шина 1-Wire требует применения внешнего подтягивающего резистора сопротивлением приблизительно 5 кОм, для обеспечения высокого уровня сигнала при неактивном состоянии устройств. Если операция должна быть приостановлена, шина должна быть установлена в неактивное состояние до следующей операции. Шина может находиться в состоянии высокого уровня сколь угодно долгое время. Перевод шины в состояние низкого уровня на время более чем 480 мкс приведет к тому, что все компоненты системы будут сброшены.


Последовательность операций.

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

  • Инициализация.
  • Команда ROM (необходима для любого обмена данными).
  • Функциональная команда (необходима для любого обмена данными).

Такая последовательность должна строго соблюдаться. В противном случае DS18B20 не будет реагировать на команды. Исключением являются команды ПОИСК ПЗУ [код F0h] и ПОИСК АВАРИИ [код ECh]. После формирования этих двух команд, ведущее устройство (мастер) должно вернуться к первому шагу (инициализация).

Инициализация.

Обмен по шине всегда начинается с операции ИНИЦИАЛИЗАЦИИ. Для инициализации ведущее устройство вырабатывает импульс сброса, за ним должен последовать импульс присутствия от ведомого устройства. Импульс присутствия сообщает ведущему устройству, что ведомое устройство присутствует в системе и готово к выполнению операции. Временные параметры импульсов сброса и присутствия описаны в разделе .

Команды ROM кодов.

После того как ведущее устройство получит импульс присутствия, оно может оперировать командами ROM. Это команды для операций с 64-битными индивидуальными кодами каждого ведомого устройства. Они позволяют ведущему устройству выбрать конкретное ведомое устройство среди многих других. Также, используя эти команды, можно узнать, сколько ведомых устройств подключено к шине, их типы, выделить устройства в состоянии тревоги. Существует 5 команд ROM, длиной 8 бит каждая. Ведущее устройство должно послать команду ROM перед выполнением функциональных команд DS18B20. Блок-схема выполнения ROM команд изображена на рисунке 11.

Поиск ROM

После включения питания, ведущее устройство должно считать ROM коды всех ведомых устройств, подключенных к шине. Это позволит определить число ведомых устройств и их типы. Ведущее устройство изучает ROM коды через процесс идентификации кодов каждого устройства на шине. Оно должно выполнить команду поиска ROM столько раз, сколько необходимо для идентификации всех ведомых устройств. При одном ведомом устройстве в системе проще использовать команду ЧТЕНИЕ ROM. После поиска ROM, операции на шине должны опять начаться с инициализации.

Чтение ROM

Команда применяется в одноточечных системах, с одним ведомым устройством. Она дает возможность ведущему устройству прочитать 64-битный ROM код, без использования команды ПОИСК ROM. Применение команды ЧТЕНИЕ ROM в многоточечной системе приведет к конфликтам данных между ведомыми устройствами.

Совпадение ROM

Команда СОВПАДЕНИЕ ROM, после которой должен следовать 64-битный код ROM, позволяет мастеру обращаться к конкретному ведомому устройству. Только одно ведомое устройство, код которого совпадает с переданным кодом, прореагирует на функциональные команды. Другие ведомые устройства будут неактивными до следующего импульса сброса.

Пропуск ROM

Команда позволяет ведущему устройству обращаться ко всем устройствам шины одновременно, без использования ROM кодов. Например, можно запустить на всех устройствах операцию преобразования температуры, выполнив команду ПРОПУСК ROM, а затем КОНВЕРТАЦИЯ ТЕМПЕРАТУРЫ. Команда ЧТЕНИЕ ПАМЯТИ может следовать за командой ПРОПУСК ROM только при одном ведомом устройстве, подключенным к линии связи. Такая последовательность команд значительно экономит время обмена с датчиками. Особенно она эффективна при использовании в системе одного ведомого устройства.

Поиск тревожного сигнала

Команда действует идентично команде ПОИСК ROM. Отличается тем, что на нее ответят только ведомые устройства в состоянии тревоги. Команда позволяет ведомому устройству определить, какие термодатчики находятся в состоянии тревоги после последнего преобразования температуры. После каждого ПОИСКА ТРЕВОГИ необходимо возвращаться на ИНИЦИАЛИЗАЦИЮ.

Группа функциональных команд

После выполнения ROM команды для выбора DS18B20 с нужным кодом, ведущее устройство может посылать функциональные команды датчика. Они позволяют записать и прочитать данные из оперативной памяти DS18B20, инициировать преобразование температуры и определить режим питания. Функциональные команды DS18B20 описываются ниже, собраны в таблице 4, алгоритм работы с ними приведен на рисунке 12.

Преобразование температуры

Запись памяти

Команда позволяет загрузить 3 байта в оперативную память датчика. Первый байт записывается в регистр Th (2 байт памяти), второй байт в Th (байт 3 памяти) и третий байт в регистр конфигурации (байт 4). Ведущее устройство передает данные, начиная с младшего бита. Все три байта необходимо записать до того как ведущее устройство сформирует сигнал сброс.

Чтение памяти

Команда используется для чтения памяти устройства. Передача данных происходит начиная с младшего бита байта 0 памяти, и продолжается до тех пор, пока все 9 байтов будут считаны. Если требуется только часть данных, ведущее устройство может прервать передачу, сформировав импульс сброса.

Копирование памяти

Команда перезагружает значения регистров Th, Tl и регистра конфигурации из EEPROM в оперативную память. После посылки команды ПЕРЕЗАГРУЗКА, ведущее устройство может выполнить слот чтения, и DS18B20 сообщит состояние перезагрузки. Передача 0 будет означать, что операция еще выполняется, 1 – операция завершена. Операция перезагрузки автоматически происходит при включении питания. Поэтому в оперативной памяти содержатся достоверные данные сразу после подачи питания.

Чтение режима питания

Таблица 4. Функциональные команды DS18B20.

КОМАНДА ОПИСАНИЕ КОД ОПЕРАЦИИ НА ШИНЕ ПРИМЕЧАН.
КОМАНДА КОНВЕРТИРОВАНИЯ ТЕМПЕРАТУРЫ
Измерение температуры Инициализирует измерение температуры 44h DS18B20 передает мастеру состояние операции преобразования температуры 1
КОМАНДЫ РАБОТЫ С ПАМЯТЬЮ
Чтение памяти Читает всю оперативную память, включая циклический код CRC BEh DS18B20 передает мастеру до 9 байт 2
Запись памяти Записывает в оперативную память байты 2, 3 и 4
(TH, TL и регистр конфигурации)
4Eh Мастер передает 3 байта на DS18B20. 3
Копирование памяти Копирует TH, TL, и регистр конфигурации из оперативной памяти в EEPROM 48h 1
Перегружает TH, TL, и регистр конфигурации из EEPROM в оперативную память. B8h DS18B20 передает состояние перезагрузки мастеру
Чтение режима питания Информирует мастера о режиме питания DS18B20. B4h DS18B20 передает мастеру режим питания

Примечания.


Интерфейс 1-Wire

Для обмена данными DS18B20 использует протокол интерфейса 1-Wire, обеспечивающий контроль целостности данных. Этот протокол определяет сигналы:

  • импульс сброса,
  • импульс присутствия,
  • запись бита со значением 0,
  • запись бита со значением 1,
  • чтения бита со значением 0,
  • чтения бита со значением 1.

Все эти сигналы, кроме импульса присутствия, формирует ведущее устройство.

Инициализация – импульсы сброса и присутствия

Любые коммуникационные операции DS18B20 начинаются с последовательности инициализации, которая состоит из импульса сброса от ведущего устройства ведомому, и ответного импульса присутствия из DS18B20. Этот процесс показан на рисунке 13. Термодатчик посылает импульс присутствия в ответ на импульс сброса, чтобы сообщить ведущему устройству, что он подключен к шине и готов к использованию.


Во время последовательности инициализации ведущее устройство передает импульс сброса (Tx), формируя на шине сигнал низкого уровня в течение времени не менее 480 мкс. Далее, ведущее устройство освобождает шину и переходит в режим приема (Rx). Когда шина освобождается, она подтягивается к высокому логическому уровню резистором 5 кОм. Датчик выделяет положительный фронт, ждет 15-60 мкс и передает импульс присутствия, удерживая низкий уровень линии на время 60-240 мкс.

Временные слоты чтения и записи.

Обмен данными по шине 1-Wire происходит временными слотами (тайм-слотами). Один временной слот передает один бит информации.

Временные слоты записи.

Протокол определяет два типа тайм-слотов записи данных в DS18B20: для записи значения 1 и записи значения 0. Длительность слота записи - не менее 60 мкс с паузой на восстановление между слотами 1,0 мкс, как минимум. Инициируется любой слот записи отрицательным фронтом сигнала шины (рис. 14).

Для формирования слота записи 1, после перевода шины в низкое состояние, ведущее устройство должно освободить шину на время 15 мкс. Подтягивающий резистор 5 кОм создаст на шине напряжение высокого уровня.

Для формирования слота записи 0, после перевода шины в низкое состояние, ведущее устройство должно продолжать удерживать шину в низком состоянии в продолжение всего времени слота (как минимум 60 мкс).

DS18B20 проверяет состояние сигнала в отрезке времени между 15 и 60 мкс, отсчитывая его от начала слота записи. Состояние шины на этом отрезке соответствует значению бита для записи в датчик.


Временные слоты чтения.

Длительность слота чтения, как и слота записи, должна быть не менее 60 мкс с паузой на восстановление между слотами 1 мкс, как минимум. Инициируется любой слот чтения отрицательным фронтом сигнала шины (рисунок 14).

После того как ведущее устройство инициализировало слот чтения, DS18B20 передает бит данных. Для передачи 1 датчик оставляет шину свободной (в высоком состоянии), а для передачи 0 – формирует на шине низкий уровень.

При передаче 0, DS18B20 должен освободить шину в конце слота. Подтягивающий резистор сформирует на ней высокий уровень. Выходные данные DS18B20 достоверны в течение 15 мкс, от начала слота чтения.

На рис. 15 показано, что общая сумма временных интервалов слота чтения Tinit , TRC и TSAMPLE должна быть не более 15 мкс.

Рис. 16 показано, что для максимальной надежности приема данных необходимо уменьшить Tinit и TRC и читать состояние шины в конце отрезка 15 мкс.


Пример 1 работы с DS18B20.

РЕЖИМ МАСТЕРА

ДАННЫЕ ШИНЫ

ПОЯСНЕНИЯ

TX Reset RX Presence TX 55h TX 64-бит ROM код TX 44h Мастер посылает команду конвертирования температуры. TX TX Reset Мастер формирует импульс сброса. RX Presence DS18B20 отвечают импульсом присутствия. TX 55h Мастер выполняет команду соответствия ROM кода. TX 64-бит ROM код Мастер посылает ROM код DS18B20. TX BEh RX 9 байтов данных

Пример 2 работы с DS18B20.

РЕЖИМ МАСТЕРА

ДАННЫЕ ШИНЫ

ПОЯСНЕНИЯ

TX Reset Мастер формирует импульс сброса.
RX Presence
TX CCh
TX 4Eh Мастер выполняет команду записи памяти.
TX 9 байта данных Мастер посылает три байта (TH, TL, и регистр конфигурации).
TX Reset Мастер формирует импульс сброса.
RX Presence DS18B20 отвечает импульсом присутствия.
TX CCh Мастер выполняет команду пропустить ROM.
TX BEh Мастер посылает команду чтения памяти.
RX 9 байтов данных Мастер читает всю оперативную память, включая циклический код CRC. Затем вычисляет CRC для первых восьми байтов и сравнивает с принятым кодом. Если коды не равны, мастер повторяет операцию чтения.
TX Reset Мастер формирует импульс сброса.
RX Presence DS18B20 отвечает импульсом присутствия.
TX CCh Мастер выполняет команду пропустить ROM.
TX 48h Мастер выполняет команду копирования памяти.
TX DQ линия подключена к шине питания Мастер подключает DQ к шине питания на время преобразования.

Предельно-допустимые параметры DS18B20

Указаны предельные величины параметров. Превышение этих параметров недопустимо. Эксплуатация длительное время с предельными значениями параметров может уменьшить надежность устройства.

Примечания:

Электрические характеристики EEPROM переменного тока (- 55 … + 125 °C, V DD = 3,0 ... 5,5 В).

ПАРАМЕТР ОБОЗНАЧЕНИЕ УСЛОВИЯ МИН. ТИП. МАКС. ЕД. ИЗМ.
Время цикла записи t wr 2 10 мс
Число записей N EEWR -55°C - +55°C 50000 цикл
Время хранения t EEDR -55°C - +55°C 10 лет

Электрические характеристики переменного тока (- 55 … + 125 °C, V DD = 3,0 ... 5,5 В).

ПАРАМЕТР ОБОЗНАЧЕНИЕ УСЛОВИЯ МИН. ТИП. МАКС. ЕД. ИЗМ. ПРИМЕ
ЧАНИЕ
Время преобразования температуры t CONV разрешение 9 бит 93.75 мс 1
разрешение
10 бит
187.5 мс 1
разрешение
11 бит
375 мс 1
разрешение
12 бит
750 мс 1
Время подключения к мощному питанию t SPON Посылка команды конвертации температуры 10 мкс
Время слота t SLOT 60 120 мкс 1
Время восстановления t REC 1 мкс 1
Время записи 0 r LOW0 60 120 мкс 1
Время записи 1 t LOW1 1 15 мкс 1
Время чтения данных t RDV 15 мкс 1
Время высокого уровня сброса t RSTH 480 мкс 1
Время низкого уровня сброса t RSTL 480 мкс 1,2
Время высокого уровня присутствия t PDHIGH 15 60 мкс 1
Время низкого уровня присутствия t PDLOW 60 240 мкс 1
Емкость C IN/OUT 25 пкФ

Примечания:


Рисунок 18. Временные диаграммы.


Описание получилось большим. С датчиками работать не просто. Они требуют достаточно сложных программных функций, но с аппаратной точки зрения DS18B20 просто подключаются, точно измеряют, не требуют АЦП и т.д.

Как пример использования термодатчиков DS18B20, могу привести мою разработку - . Используются два термодатчика. Один измеряет температуру воздуха в , второй - температуру радиатора .

Подробности Создано 09.10.2015 19:34

ВНЕШНИЙ ВИД И НАЗНАЧЕНИЕ ВЫВОДОВ



СТРУКТУРНАЯ СХЕМА



DS18B20 имеет:

  • постоянное запоминающее устройство с 64-битовый уникальным кодом прибора;
  • оперативную память, содержащую 2-байтовый температурный регистр, который хранит значение температуры по окончанию температурного преобразования, два однобайтовых регистра контроля температуры TH и TL и регистр конфигурации.

Регистр конфигурации позволяет пользователю устанавливать разрешающую способность цифрового преобразователя температуры в 9, 10, 11, или 12 бит. При увеличении разрешающей способности датчика - увеличивается и время преобразования температуры. Регистры TH, TL и регистр конфигурации - энергонезависимы (EEPROM), таким образом они сохранят данные, когда прибор - выключен.

DS18B20 использует 1-Wire шину, которая использует одну линию данных. Шина должна быть подключена к источнику питания через подтягивающий резистор. Используя эту шину микроконтроллер идентифицирует и обращается к датчикам температуры, используя 64-битовый код прибора. Поскольку каждый прибор имеет уникальный код, число приборов, к которым можно обратиться на одной шине, фактически неограниченно.

РЕЖИМ - КОНВЕРТАЦИИ ТЕМПЕРАТУРЫ

Разрешающая способность температурного преобразователя может быть изменена пользователем и составляет 9, 10, 11, или 12 битов, что позволяет производить преобразование температуры с дискретностью 0.5°C, 0.25°C, 0.125°C, и 0.0625°C соответственно. Разрешающая способность по умолчанию установлена в 12-бит.

Выходные температурные данные DS18B20 калиброваны в градусах Цельсия. Температурные данные запоминаются, как 16-битовое число со знаком. Биты S указывают, является ли температура положительная или отрицательная: для положительных значений - S = 0, а для отрицательных значений - S = 1. Если DS18B20 будет настроен для конвертирования с 12-битным разрешением, то все биты в температурном регистре будут содержать действительные данные. Для 11-битной разрешающей способности - бит 0 неопределен. Для 10-битной разрешающей способности - биты 1 и 0 неопределенны, и для 9 битной разрешающей способности биты - 2, 1 и 0 неопределенны.
Таблица 2 дает примеры данных цифрового выхода и соответствующей температуры, для 12- битной разрешающей способности.

ФОРМАТ РЕГИСТРА ТЕМПЕРАТУРЫ

Примеры соответствия данных цифрового преобразования и соответствующей температуры при 12- битном разрешении.



* при подачи питания в температурный регистр записано число +85 о С

После того, как DS18B20 выполнит температурное преобразование, температурное значение - сравнивается со значением, записанным в регистры TH и TL. Для сравнения используются только биты 4-11 из регистра температуры (целое значение температуры). Если измеренная температура ниже или равна TL или выше или равна TH, формируется условие Аварии, и устанавливается флаг Аварии в DS18B20. Этот флаг обновляется после каждого температурного преобразования; поэтому, если условие Аварии пропадет, то флаг будет сброшен после следующего температурного преобразования.

Формат регистров TH и TL

Главное устройство может проверить условие Аварии всех DS18B20 на шине, подавая команду Поиск Аварии . Любой DS18B20 с установленным флагом Аварии ответит на эту команду, таким образом главное устройство точно может определит, какие DS18B20 находятся в состоянии Аварии. Если изменены значение регистров TH или TL, то необходимо запустить новое температурное преобразование, чтобы выполнилась проверка условий контроля температуры, заданное в регистрах TH или TL.

Питание DS18B20

Когда DS18B20 выполняет температурные преобразования или копирует данные с ОЗУ в память EEPROM может потреблять ток до 1.5 mA. Этот ток может вызвать недопустимое снижение напряжения на шине питаемого через резистор. Чтобы гарантировать, что DS18B20 имеет достаточный ток питания, необходимо обеспечить высокоточное питание на шине каждый раз, когда идет температурные преобразование или выполняется операция записи данных в EEPROM. Это может быть достигнуто при использовании MOSFET транзистора, чтобы запитать шину непосредственно от Vpu, как это показано на рисунке.

Шина 1-Wire должна быть переключена в высокоточное питание в пределах 10 мкс (максимум) после команды конвертирования температуры Convert T или команды Copy Scratchpad (копирования данных в EEPROM). Шина должна быть переключена в высокоточное питание на время преобразования (tconv) или передачи данных (twr = 10ms). Никакие операции на шине не должны выполняться, когда включен высокоточный режим питания.



DS18B20 может быть запитан и обычным способом, т.е. соединением внешнего провода электропитания к выводу VDD., как показано в рисунке выше. Преимущество этого метода состоит в том, что нет необходимости в использовании MOSFET транзистора. А на шине могут передаваться данные в течение времени температурного преобразования.

64-BIT код датчика

Каждый DS18B20 содержит уникальный 64-битовый код, хранящийся в ROM. Младшие 8 битов кода содержат код семейства 1-Wire. Код семейства DS18B20 - 28h. Следующие 48 битов, содержат уникальный серийный номер. Старшие 8 битов содержат циклический контроль избыточности (CRC) байт, который вычислен от первых 56 битов кода ROM. 64-битовый код ROM и связанная функция ROM управляют логикой, позволяющей DS18B20 работать, как 1-Wire устройство, используя протокол, детализированный в разделе 1-WIRE BUS SYSTEM.

ПАМЯТЬ

Память DS18B20 организована, как показано на рисунке ниже. Память состоит из оперативной SRAM памяти и энергонезависимой памяти EEPROM. Первые два регистра это регистры результата преобразования температуры, далее идут регистры Аварии верхнего и нижнего предела температуры (TH и TL) и регистр конфигурации. Обратите внимания, что, если функция Аварии DS18B20 не используется, то регистры TH and TL могут ячейками универсальной памяти.

Байт 0 и байт 1 из ОЗУ содержит младший и старший бит температурного регистра, соответственно. Эти байты только для чтения. Байты 2 и 3 обеспечивают доступ к регистрам TH and TL. Байт 4 содержит данные регистра конфигурации, байты 5, 6, и 7 зарезервированы для внутреннего использования устройством и запись в эти регистры невозможна; при чтении эти байты возвратят «1» во всех разрядах. Байт 8 ОЗУ только для чтения и содержат код циклического контроля избыточности (CRC), вычисленный для байтов 0 - 7 ОЗУ. DS18B20 генерирует циклический контроль избыточности, используя метод, описанный в разделе генерация циклического контроля избыточности.

Для записи данных в байты 2, 3, и 4 ОЗУ используется команда Write Scratchpad ; данные должны быть переданы к DS18B20, начиная с байта 2. Чтобы проверить корректность записи данных, необходимо выполнить чтение (используя команду чтения Read Scratchpad ) после того, как данные будут записаны. Обратите внимание, что при чтении данных DS18B20 начинает передавать с 0 байта. Чтобы сохранить TH, TL и данные регистра конфигурации в EEPROM, устройство управления должно выдать команду Copy Scratchpad . Данные, сохраненные в регистрах EEPROM, при включении питания перезагружаются в ОЗУ.

Данные могут быть перезагружены из EEPROM в ОЗУ в любое время командой Recall E2 . Устройство управления может контролировать операцию Recall E2 (процесс вызова данных из EEPROM в ОЗУ) путем выдачи синхроимпульса после команды и контроля состояния шины, если 0 - операция перезагрузки продолжается, если 1 - процесс выполнен.

Карта памяти DS18B20



Регистр конфигурации

Байт 4 памяти содержит регистр конфигурации. Пользователь может настроить разрешающую способность DS18B20, используя биты R0 и R1 в этом регистре. Значение по умолчанию при включении питания: R0 = 1 и R1 = 1 (12-битовая разрешающая способность). Обратите внимание, что есть прямая зависимость между разрешающей способностью и временем преобразования. Бит 7 и биты от 0 до 4 в регистре конфигурации зарезервированы для внутреннего использования устройством и не могут быть изменены или использованы пользователем, при чтении эти биты возвращают «1».

Таблица 3. КОНФИГУРАЦИЯ РАЗРЕШАЮЩЕЙ СПОСОБНОСТИ ТЕРМОМЕТРА



Шина 1-Wire

Шина 1-Wire использует одно главное устройство управления, чтобы управлять одним или более подчиненными устройствами. DS18B20 всегда используется как подчиненное устройство.

Все данные и команды передаются младшим битом вперед.

Шина 1-Wire имеет по определению только единственную линию данных. Каждое устройство (управляющее или подчиненное) подключается к шине через порт с открытым коллектором или с тремя состояниями. Это позволяет каждому устройству "отпускать" линию данных, когда устройство не передает данные, таким образом шина доступна для использования другим устройством. Шина 1-Wire требует внешнего подтягивающего резистора приблизительно 5 кОм. Таким образом, неактивное состояние для 1-Wire шины - логическая единица. Если по какой-нибудь причине обмен данными должен быть приостановлен, шину НУЖНО оставить в неактивном состоянии. Восстановления питания происходит между передачей битов, когда шина находится в высоком состоянии. Если шина будет переведена в низкое состояние на время более чем 480 мкС, то все компоненты на шине будут сброшены (инициализированы).

Конфигурация шины.



Последовательность операций для обращения к DS18B20:

Шаг 1. Инициализация
Шаг 2. Команда ROM (сопровождаемая любым требуемым обменом данных)
Шаг 3. Функциональная Команда DS18B20 (сопровождаемая любым требуемым обменом данных).

Очень важно следовать за этой последовательностью каждый раз, когда обращаются к DS18B20, поскольку DS18B20 не будет «отвечать», если любые шаги в последовательности отсутствуют или не в порядке.

Исключения из этого правила составляют команды – Поиск ROM и Поиск Аварии .

После подачи любой из этих команд, контроллер управления (управляемая программа) должен возвратиться к Шагу 1 в последовательности операций обращения.

Инициализация

Все операции на шине 1-Wire начинаются с инициализации. Инициализации состоит из импульса сброса, переданного устройством управления шиной, сопровождаемым импульсом присутствия, переданным подчиненными устройствами. Импульс присутствия позволяет устройству управления шиной знать, что подчиненные устройства DS18B20 присутствуют на шине и готовы к работе.



КОМАНДЫ ROM

После того, как устройство управления шиной обнаружило импульс присутствия, оно может формировать команды ROM. Эти команды оперируют уникальными кодами ROM в 64 бита для каждого подчиненного устройства, и позволяют устройству управления выбирать определенное устройство, из многих устройств присутствующих на шине.

Эти команды также позволяют устройству управления определять, как много и какие типы устройств присутствуют на шине, а также определять любое устройство, находящееся в состоянии Тревога.

Есть пять команд ROM, и каждая команда с 8 битов длиной. Главное устройство должно передать соответствующую команду ROM перед передачей функциональной команды DS18B20.

SEARCH ROM - (ПОИСК ROM)

Когда система первоначально включена, главное устройство должно идентифицировать коды ROM всех подчиненных устройств на шине, эта команда позволяет устройству управления определять номера и типы подчиненных устройств. Устройство управления изучает коды ROM через процесс устранения, которое требует, чтобы Главное устройство исполнил цикл ROM Поиска (то есть, команда Поиска ROM). Эту процедуру необходимо выполнить столько раз, сколько необходимо, чтобы идентифицировать все подчиненные устройства. Если есть только одно подчиненное устройство на шине, может используется более простая команда Чтения ROM место процесса Поиска ROM.

После каждого цикла Поиска ROM, устройство управления шиной должно возвратиться к Шагу 1 (Инициализация) в последовательности операций.

READ ROM (Чтение ROM)

Эта команда может только использоваться, когда есть одно подчиненное устройство на шине. Эта команда позволяет устройству управления шиной читать ROM подчиненного устройства (код 64 бита), не используя процедуру Поиска ROM. Если эта команда используется там, где больше чем одно подчиненное устройство на шине, произойдет конфликт на уровне данных, так как все подчиненные устройства сделают попытку ответить в одно и то же время.

MATCH ROM (Соответствие ROM )

Команда соответствия ROM, сопровождаемая последовательностью кода ROM на 64 бита позволяет устройству управления шиной обращаться к определенному подчиненному устройству на шине. Только подчиненное устройство, у которого точно соответствует 64 битовая последовательность кода ROM, ответит на функциональную команду, формированную главным устройством. Все другие подчиненные устройства на шине будет ждать импульса сброса.
SKIP ROM (Пропуск ROM )

Главное устройство может использовать эту команду, чтобы обратиться ко всем устройствам на шине одновременно. Например, главное устройство может заставить, чтобы все DS18B20 (датчики температуры) на шине, начали одновременно температурные преобразования. Для этого необходимо выдать на шину команду Пропуска ROM , сопровождаемую командой Температурного преобразования .

Обратите внимание, что команда ЧТЕНИЕ ПАМЯТИ может следовать за командой Пропуска ROM, только если на шине присутствует одно подчиненное устройство. Команда Пропуска ROM, сопровождаемая командой ЧТЕНИЕ ПАМЯТИ вызовет конфликт на уровне данных на шине, если на шине более одного подчиненного устройства, так как все устройства будут пытаться одновременно передавать данные.
ALARM SEARCH (Поиск Аварии )

Операция этой команды идентична операции команды Поиска ROM за исключением того, что только DS18B20 (датчики температуры) с установленным флажком аварии ответят. Эта команда позволяет главному устройству определять, какие DS18B20-сы испытали сигнальное состояние в течение недавнего температурного преобразования. После каждого цикла Поиска Аварии (то есть, команда Alarm Search, сопровождаемая обменом данных), устройство управления шиной должно возвратитесь к Шагу 1 (Инициализация) в последовательности операций.

ФУНКЦИОНАЛЬНЫЕ КОМАНДЫ - DS18B20

После того, как устройство управления шиной обработало команду ROM, чтобы обратиться к DS18B20, с которым оно желает связаться, устройство управления может формировать одну из функциональных команд DS18B20. Эти команды позволяют выполнить функции записи или чтения оперативной памяти DS18B20, начать преобразование температуры или определить режим электропитания.
Команда старта преобразования температуры

Если DS18B20 питается от внешнего источника питания, главное устройство может считывать состояние шины после команды Конвертирования температуры . Если на шине логический «Ноль» - это значит, что DS18B20 выполняет температурное преобразование. Если на шине логическая «Единица» – это значит, что преобразование окончено и можно, считывать данные.

Обратите внимание, что методика контроля времени преобразования по состоянию шины состоит в том, что после команды конвертирования температуры устройство управления должно посылать на шину слот времени и контролировать бит состояния который выдает DS18B20. Если DS18B20 отвечает нулем, то конвертирование идет, если 1 – конвертирование выполнено и можно считывать температуру.

Запись в память

Эта команда позволяет устройству управления записывать 3 байта данных в память DS18B20.

Первый байт данных записывается в регистр (TH), второй байт записывается в регистр (TL), и третий байт записывается в регистр конфигурации.

Данные должны быть переданы наименьшим значащим битом вперед.

Чтение памяти

Эта команда позволяет Устройству управления читать содержание ПАМЯТИ. Передача данных начинается с наименьшего значащего бита байта 0 и продолжается до 9-ого байта (байт 8 - циклический контроль избыточности). Устройство управления может выполнить сброс, чтобы закончить чтение в любое время, если необходимо только часть данных.
Копирование ОЗУ В ПЗУ

Эта команда копирует содержание регистров (TH, TL) и регистра конфигурации (байты 2, 3 и 4) в ПЗУ.

Эта команда повторно загружает значения регистров (TH, TL) и данные в регистр конфигурации с ПЗУ и размещает данные в байты 2, 3, и 4, соответственно, в памяти. Главное устройство может контролировать процесс загрузки ОЗУ из ПЗУ считывая состояние шины после команды ПОВТОРНАЯ ЗАГРУЗКА. Если на шине логический «ноль» - это значит идет операция перезагрузки, если логическая «1» Операция выполнена.

Операция ПОВТОРНАЯ ЗАГРУЗКА выполняется автоматически при включении питания, данные доступны сразу после включения питания.

Вид электропитания датчика

Краткий обзор Команд

Устройства iButtons могут работать как автономно на шине, так и поддерживают следующие Сетевые Команды на основе ROM:

Чтение ROM (Read)
Пропуск ROM (Skip)
Соответствие ROM (Match)
Поиск ROM (Search)
Чтение ROM (Read)

Данная команда используется, чтобы прочитать ROM память устройства, если на шине оно только одно. После посылки этой команды Главное устройство должно генерировать 64 слота времени считывания. В ответ iButton пошлет содержимое своей ROM памяти младшим битом вперед, начиная с кода семейства, сопровождаемого серийным номером и байтом циклического контроля избыточности.

Если на шине несколько iButtons устройств, то для чтения ROM памяти необходимо воспользоваться командой Поиск ROM (Search), чтобы определить содержание ROM памяти устройств прежде, чем к ним можно будет обратиться.

Если содержание ROM памяти не представляет интерес, потому что на шине только одно iButton, поиск может быть пропущен, посылая команду Пропуск ROM (Skip).

Команды Соответствие ROM (Match) могут использоваться, чтобы обратиться к интересующему устройству, если на шине присутствует несколько iButtons устройств.

Код ROM выполняет функцию адреса устройства. Тот же самый Код ROM не может активировать более 1 устройства, так как соответствие кодов ROM только одному устройству определено при их производстве. Если два iButtons имеют то же самое серийный номер, их семейные коды будут отличны. Этим способом, исключается любой беспорядок или неопределенность.

После подачи команды Соответствие ROM (Match) Главное устройством будет послано в течение следующих 64 слотов времени содержание ROM памяти требуемого устройства. Последовательность битов должна быть тем же самым, как они были получены при чтении ROM, то есть, младшим битом вперед, начинаясь с семейного кода, сопровождаемого серийным номером и циклическим контролем избыточности. Все iButtons, ROM которого не соответствует требуемому коду, останутся в неактивном состоянии пока они получат другой Импульс Сброса.
Команда Поиск ROM (Search)

Если Главное устройство не знает серийный номер устройства подключенного к шине, то существует возможность идентифицировать коды ROM каждого устройства подключенного к шине. Для этого необходимо использовать команду Поиск ROM (Search). Эта команда действует, как команда Чтения ROM объединенная с командой Соответствия ROM.

Процесс выглядит следующим образом: После формирования главным устройством команды Поиск ROM (Search) все устройства iButtons последовательно будут формировать на шине состояние «0» и «1» соответствующие их значению фактического бита ROM в течение двух Времен (тактов) считывания после формирования команды ROM Поиска.

Если все устройства содержат в этой позиции двоичного разряда:
«0», чтение будет «01»;
«1», результат будет «10»;

Если устройства содержат в этой позиции двоичного разряда и «1» и «0», чтение приведет «00» битов, указывая на конфликт.

Главное устройство в следующем (третьем такте) слоте Времени формирует разрядное значение 1 или 0, чтобы отобрать устройства, которые останутся в процессе выбора.

Все устройства у которых бит не соответствует биту сформированному главным устройством перейдут в состояние ожидания и будут находиться в нем пока они не получают Импульс Сброса. После первой стадия выбора, будут следовать 63 читающих цикла выбора, пока, наконец, главное устройство не определит Код ROM одного подчиненного устройства и обратиться к нему.

Каждая стадия выбора состоит из двух слотов Времени считывания и один слот Времени записи. Полный процесс изучения и одновременная адресация - приблизительно три раза длина команды ROM Соответствия, но это позволяет выбрать из всех связанных устройств последовательно все коды ROM.

В приложении, где iButtons устройства подключены к одной шине, это является самым эффективным способом, чтобы определить коды все ROM подчиненных устройств. После чего главное устройство может использовать команду ROM Соответствия, чтобы обратиться к определенному устройству.

Если приложение требует постоянной идентификации и коммуникации с новыми устройствами, так как они могут подключаться и отключатся в ходе работы, то устройство управления должно будет использовать команду Поиск ROM, чтобы идентифицировать коды ROM для обращаться к каждому новому устройству.

Так как логика команды Поиска ROM - самый сложный процесс, следующий пример используется, чтобы иллюстрировать это шаг за шагом.

Четыре устройства установлены на шине. Их двоичное содержание ROM следующее:
устройство 1: xxxxxx10101100
устройство 2: xxxxxx01010101
устройство 3: xxxxxx10101111
устройство 4: xxxxxx10001000

для упрощения символом "х" заменены старшие биты и показаны только младшие восемь битов содержания ROM.

Поиск младшего бита происходить следующим образом:

1. Главное устройство начинает последовательность инициализации
формирует Импульс Сброса.
iButtons отвечают формированием импульсов Присутствия.

2. Главное устройство формирует команду Поиск ROM.

3. Главное устройство читает один бит с шины.

Каждое устройство ответит, помещая значение первого бита соответствующего его данным ROM. Устройства 1 и 4 поместят «0» на шину, то есть, они установят на шине низкий уровень. Устройства 2 и 3 сформируют «1» позволяя на линии оставаться в высоком уровне. Результат – «логическое И» всех устройств на линии; поэтому Главное устройство читает 0.
Главное устройство будет читать следующий бит. (С тех пор когда команда Search ROM выполняется, все устройства отвечают одновременно). Все устройства помещают на шину дополнение первого бита. Устройства 1 и 4 сформируют «1»; устройства 2 и 3 сформируют «0». Таким образом, на шине будет состояние логического «0». Главное устройство снова читает «0» при формировании дополнительного кода первого информационного разряда ROM (чтение дает «00» - состояние разрядных конфликтов). Это говорит Главному устройству, что есть устройства на шине содержащие в первом бите как «0», так и «1».
Если бы все устройства имели «0» в этой позиции двоичного разряда, чтение дало бы результат «01»; если бы позиция двоичного разряда содержала во всех устройства «1» результат был бы «10».

4. Главное устройство теперь решает писать «0» и формирует запись его на шину. Эта операция переводит Устройства 2 и 3 (содержащие в этом разряде «1») в пассивное состояние, оставляя только устройства 1 и 4 для участия в процессе поиска.

5. Главное устройство выполняет еще два чтения и получает «01». Это говорит, что все активные устройства имеют 0 в этой позиции двоичного разряда их ROM.

6. Главное устройство тогда пишет 0, чтобы сохранить устройства 1 и 4 активными.

7. Главное устройство выполняет два чтения и получает два «00» биты. Это снова указывает, что в этом разряде присутствуют устройства имеющие «1» и «0.

8. Главное устройство снова пишет 0. Это деактивирует устройство 1, оставляя устройство 4 как единственный активный элемент.

9. Следующие чтения до конца ROM не будет давать состояние разрядных конфликтов. Отсутствие разрядных конфликтов до конца цикла поиска говорит, что происходит чтение ROM только одного активного элемента. Прочитав следующий бит Главное устройство снова посылает этот бит, чтобы сохранить устройство активным. Как только все биты ROM устройства известны и последней бит снова послан Главным устройством, устройство готово к принять команду для обмена информацией.

10. Главное устройство должно изучить данные ROM других устройств. Поэтому оно запускает следующую последовательность Поиска ROM, повторяя шаги 1 - 7.

11. В самой старшей позиции двоичного разряда, где Главное устройство писало «0» в первом проходе (шаг 8), оно теперь пишет «1». Это снимает выделение устройства 4, оставляя устройство 1 активным.

12. Как в шаге 9, следующие чтения до конца ROM не будет давать состояние разрядным конфликтам. Этим заканчивается второй Поиск ROM, где Главное устройство считывает содержание ROM другого устройства.

13. Главное устройство должен изучить данные ROM других устройств. Поэтому, оно запускает следующую последовательность Поиска ROM, повторяя шаги 1 - 3.

14. Во втором проходе в наивысшей степени позиция двоичного разряда, где Главное устройство написал 0 в первом проходе (шаг 4), это теперь пишет 1. Это снимает выделение устройств 1 и 4, оставляя устройства 2 и 3 активными.

15. Главное устройство посылает два слота времени считывания и получает два 0 битов, указывая маленький конфликт.

16. Главное устройство снова решает писать 0. Это снимает выделение устройство 3, оставляя устройство 2 как единственное активное устройство.

17. Как в шаге 9, следующие чтения до конца ROM не будет показывать разрядным конфликтам. Этим заканчивается третий Поиск ROM проходит, где Главное устройство имеет изученный содержание другого ROM.

18. Главное устройство должен изучить данные ROM других устройств. Поэтому это запускает другую последовательность Поиска ROM повторяя шаги 13 - 15.

19. В самой высокой позиции двоичного разряда, где Главное устройство написал a0 в предыдущем проходе (ступают 16), это теперь пишет 1. Это снимает выделение устройства 2, оставляя устройство 3 активным.

20. Как в шаге 17, следующие чтения до конца ROM не будет показывать разрядным конфликтам. Это заканчивает четвертый Поиск ROM проходит, где Главное устройство имеет изученный содержание другого ROM.

Общий принцип этого процесса поиска должен снять выделение одно устройство за другим в каждой противоречивой позиции двоичного разряда. В конце каждого процесса Поиска ROM, Главное устройство узнает содержание другого ROM. Следующий проход является тем же самым как предыдущий проход до пункта последнее решение. В этом пункте Главное устройство входит в противоположность руководство и продолжается. Если другой конфликт найден, снова 0 написан, и так далее. После обоих путей в самом высоком противоречивая позиция двоичного разряда сопровождается до конца, Главное устройство идет тот же самый путь как прежде, но решающий противоположно в более низкой противоречивой позиции двоичного разряда, и так далее, до всех Данные ROM идентифицированы.

Оптимизированная блок-схема алгоритма ROM Поиска показанна в иллюстрации ниже.

Команды DS18B20.

Сопротивление резистора (указанного стрелкой) надо выбирать из компромисса между сопротивлением используемого кабеля и внешними помехами. Сопротивление резистора может быть от 5,1 до 1 кОм. Для кабелей с высоким сопротивлением жил надо использовать более высокое сопротивление. А там где присутствуют промышленные помехи – выбирать более низкое сопротивление и использовать кабель с более большим сечением провода. Для телефонной лапши (4 жилы) для 100 метров необходимо резистор 3,3 кОм. Если вы применяете «витую пару» даже 2 категории длина может быть увеличена да 300 метров!!! ГАРАНТИРОВАННО. А при использовании схемы с внешним драйвером до 600.

Блок схема выполнения ROM команд.

Блок схема выполнения функциональных команд

1-wire протокол.

DS18B20 использует строгий протокол общения на шине 1-Wire, чтобы застраховать целостность данных. Несколько типов сигналов определены в соответствии с этим протоколом: импульс сброса, импульс присутствия, запись 0, запись 1, чтение 0, и чтение 1. Устройство управления формирует все эти сигналы на шине, за исключением импульса присутствия.
Процедура инициализации: формирование импульсов сброса и присутствия

Весь процесс связи с DS18B20 начинается с последовательности инициализации, которая состоит из импульса сброса от устройства управления, сопровождаемого импульсом присутствия от DS18B20. Когда DS18B20 посылает импульс присутствия в ответ на сброс, это указывает устройству управления, что DS18B20 находится на шине и готов работать.

В течение последовательности инициализации устройство управления шиной передает импульс сброса, перемещая шину 1-Wire в состояние логического «0» минимум на 480 μs. Устройство управления шиной отпускает шину и переходит в режим приема. Когда шина отпущена, (5 кОм max) подтягивающий резистор подает на шину в уровень логической «1». Когда DS18B20 обнаруживает положительный перепад, он ждет от 15 μs до 60μs и затем передает импульс присутствия, перемещая шину в логический «0» на длительность от 60 μs до 240μs.

Слоты времени - чтения/записи

Устройство управления шиной записывает данные в DS18B20 в течение слотов времени записи и читает данные от DS18B20 в течение слотов времени считывания. Один бит данных передается за один слот времени.
Слоты времени записи

Есть два типа слотов времени записи:
Слот времени записи «1» - W1
Слот времени записи «0» - W0

Устройство управления шиной использует W1 чтобы записать бит логической «1» в DS18B20 и W0, чтобы записать бит логического «0» в DS18B20.

Все слоты времени записи должны быть продолжительностью минимумом 60μs разделенные импульсом восстановления минимумом 1μs. Оба типа слотов времени записи инициализируются устройством управления, устанавливающим на шине логический ноль.

Чтобы генерировать W1, после формирования импульса восстановления, устройство управления шиной должно отпустить шину в пределах 15μs. Когда шина отпущена, подтягивающий резистор переместит уровень на шине к логической «1».

Чтобы генерировать W0, после формирования импульса восстановления, устройство управления шиной должно продолжать удерживать шину продолжительностью всего слота времени (не менее 60μs).

DS18B20 после формирования импульса восстановления выполняет выборку сигнала через 15μs в течение окна, которое продолжается от 15μs до 60μs, и инициализирует слот времени записи. Если уровень на шине высокий в течение окна выборки, осуществляется запись 1 в DS18B20. Если уровень низкий, осуществляется запись 0 в DS18B20.

Слоты времени считывания

Слоты времени считывания предназначены для определения состояния устройства. DS18B20 может передать данные о своем состоянии устройству управления только, когда устройство управления формирует слоты времени считывания. Для команд Чтения Памяти или команды Чтения Вида Питания устройство управления должно генерировать слоты времени считывания немедленно после формирования этих команд, это необходимо, чтобы DS18B20 мог обеспечить требуемые данные. Кроме того, устройство управления может генерировать слоты времени считывания после команды Конвертирования или команды Recall E2 , чтобы узнать о состояние операции, как объяснено в разделе КОМАНДЫ ФУНКЦИИ DS18B20.

Все слоты времени считывания должны быть минимумом 60μs и разделяться импульсами восстановления минимумом 1μs между слотами. Слот времени считывания инициализирован главным устройством, устанавливает на шине уровень логического нуля минимум на 1μs и затем отпускает шину. После того, как Устройство управления инициализирует слот времени считывания, DS18B20 начнет передавать 1 или 0 на шине. DS18B20 передает 1, оставляя шину в высоком уровне и передает 0, устанавливая на шине 0. Выходные данные от DS18B20 достоверны через 15μs после отрицательного уровня, который инициализировал слот времени считывания. Поэтому, Устройство управления должен выпустить шину и затем начать считывание шины не ранее 15μs от начала слота.

Генерирование ЦИКЛИЧЕСКОГО КОНТРОЛЯ ИЗБЫТОЧНОСТИ

Байты циклического контроля избыточности обеспечиваются, как часть 64-битового кода ROM DS18B20 и в 9-ом байте сверхоперативной памяти. Циклический контроль избыточности кода ROM вычислен от первых 56 битов кода ROM и содержится в наиболее значительном байте ROM. Сверхоперативный циклический контроль избыточности вычислен от данных, сохраненных в сверхоперативном, и поэтому это изменяется когда данные в сверхоперативных изменениях. Контроль с помощью циклического избыточного кода предоставляет устройству управления шиной метод проверки правильности данных, когда данные читаются от DS18B20. Чтобы проверять, что данные читались правильно, устройство управления шиной должно повторно вычислить циклический контроль избыточности от полученных данных и затем сравнить это значение с любым циклический контроль избыточности кода ROM (для чтений ROM) или к сверхоперативному циклическому контролю избыточности (для сверхоперативных чтений). Если расчетный циклический контроль избыточности соответствует циклическому контролю избыточности чтения, полученные данные были свободные от ошибок. Сравнение значений циклического контроля избыточности и решения продолжаться с операцией определено полностью устройством управления шиной. Нет никакой схемы в DS18B20, который препятствует последовательности команды продолжаться, если циклический контроль избыточности DS18B20 (ROM или сверхоперативный) не соответствует значению, сгенерированному устройством управления шиной.

Эквивалентная полиномиальная функция циклического контроля избыточности (ROM или сверхоперативный):

CRC = X8 + X5 + X4 + 1

Устройство управления шиной может повторно вычислить циклический контроль избыточности и сравнить это со значениями циклического контроля избыточности от DS18B20, используя полиномиальный генератор, которому показывают в иллюстрации 9. Эта схема состоит из сдвигового регистра и Гейтса XOR, и биты сдвигового регистра инициализированы к 0. Старт с наименьшего значащего бита кода ROM или наименьшего значащего бита байта 0 в ОЗУ, один бит одновременно должен сдвинутый в сдвиговый регистр. После смещения в 56-ом бите от ROM или наиболее значительного бита байта 7 от ОЗУ, полиномиальный генератор будет содержать перерасчетный циклический контроль избыточности. Затем, 8-битовый код ROM или сверхоперативный циклический контроль избыточности от DS18B20 должны быть сдвинуты в схему. В этом пункте, если перерасчетный циклический контроль избыточности был правилен, сдвиговый регистр будет содержать весь 0s.

Пример работы 1 DS18B20

Пример работы 2 DS18B20

За основу статьи было взято описание DS18B2 0 Геннадия Чернова

Оценка 1 Оценка 2 Оценка 3 Оценка 4 Оценка 5

Датчики температуры с однопроводным интерфейсом 1-WIRE были разработаны фирмой DALLAS SEMICONDUKTOR для использования совместно с микроконтроллерами. Впоследствие эти датчики стали выпускаться фирмой MAXIM . Каждый датчик температуры имеет 56-разрядный индивидуальный идентификационный код, поэтому по одному проводу может быть опрошено практически неограниченное число датчиков. Перед установкой таких датчиков в одну линию необходимо считать 64 разрядный код ROM (в него входит 56-битный номер датчика и 8 бит регистра контроля четности) для каждого датчика и учитывать его при программировании микроконтроллера. Передача 64 разрядов занимает много времени, поэтому в устройствах, использующих небольшое число датчиков, можно обойтись выделением отдельного выхода микроконтроллера для каждого датчика.

Термодатчики DS1820 (DS18S20, DS1821, DS18B20)имеют следующие технические характеристики:
- индивидуальный 64-битный идентификационный номер;
- напряжение питания от +3 до +5,5 В;
- измеряемая температура от -55 до + 125°С;
- погрешность измерения температуры в диапазоне -10...+85°С не более 0,5°С;
- в остальном диапазоне температур погрешность измерения не превышает 2°С;
- информация о температуре выдается 9-битным кодом;
- установка пороговых значений температуры по максимуму и минимуму,
- максимальное время преобразования температуры в код 750 мс;
- возможность питания от высокого уровня шины данных;
- термодатчики не требуют индивидуальной настройки при замене.

Принцип измерения температуры основан на сравнении частоты двух генераторов. Частота одного генератора не зависит от температуры, а частота второго изменяется с изменением температуры. Разность частот двух генераторов определяет значение температуры. Восьмиразрядный код температуры побитно, начиная с младшего бита, выводится в линию связи. Девятый бит определяет знак измеренной температуры. Если девятый бит единичный, то температура имеет знак минус, и наоборот. Передача каждого бита данных длится 60 мкс. Если длительность низкого уровня в линии от 1 до 15 мкс, то импульс идентифицируется как лог. 1. Лог. 0 идентифицируется при длительности низкого уровня в линии от 15 до 60 мкс.

Для начала работы с термодатчиком управляющий микроконтроллер должен инициализировать его посылом необходимых команд. Рассмотрим назначение команд, управляющих работой термодатчика.

Поиск ROM (Search ROM)

Команда выдается управляющим микроконтроллером для определения числа и типа термодатчиков, подключенных к одной линии.

Чтение ROM (Read ROM)

Данная команда инициализирует термодатчик для генерации в линию идентификационного номера. Эту команду нельзя посылать, если к одной линии связи подключено несколько термодатчиков. Прежде чем подключить несколько датчиков на одну линию, необходимо для каждого датчика определить его личный номер с использованием данной команды.

Идентификация ROM (Match ROM)

Команда выдается перед 64-битным идентификационным номером и подтверждает обращение именно к этому термодатчику. Все последующие команды будут восприниматься только одним датчиком до команды обнуления линии.

Пропуск ROM (Skip ROM)

Команда может использоваться, когда необходимо обратиться ко всем датчикам, расположенным на одной линии, или когда к линии подключен только один датчик. Общей для многих датчиков может быть команда начала преобразования температуры. При обращении к одному термодатчику команда позволяет упростить программу (следовательно, и время цикла) за счет того, что пропускается громоздкая подпрограмма идентификации кода и вычисления кода четности.

Поиск аварии (Alarm Search)

Действие команды аналогично команде «Поиск ROM», но отвечает на нее термодатчик, если измеренная температура выходит за пределы предварительных установок по максимуму и минимуму.

Начало преобразования температуры (Convert Т)

Команда разрешает преобразование температуры и запись результата в блокнот.
От подачи этой команды до считывания необходимо выдержать паузу, необходимую для преобразования с установленной точностью.

Чтение блокнота (Read Scratchpad)

В блокноте содержится 8 байт информации (рис. 1). Если нужна информация только о температуре, то считывается 9 бит. Термодатчик будет выдавать информацию до тех пор, пока управляющий микроконтроллер не выдаст в линию нулевой импульс.

Рисунок 1. Карта памяти датчика DS1820

Запись в блокнот (Write Scratchpad)

После этой команды управляющий микроконтроллер должен послать два байта для записи в блокнот максимальной ТН и минимальной TL температуры ограничения по максимуму и минимуму. Все 16 бит необходимо передавать непрерывно без обнуления линии.

Копирование блокнота (Copy Scratchpad)

После этой команды минимальная (TL) и максимальная (ТН) установленные значения температур переписываются в энергонезависимую память (EEPROM). После отключения напряжения питания записанные значения сохранятся в памяти.

Восстановление (Recall Е2)

Эта команда необходима для копирования значений температуры из EEPROM в рабочую зону блокнота. При выполнении восстановления термодатчик выдает в линию низкий уровень, а после окончания записи - высокий.

Питание от линии (Read Power Supply)

После этой команды термодатчик переходит к питанию от линии. В составе термодатчика имеется конденсатор, который заряжается от высокого уровня линии. Перед опросом термодатчика управляющим микроконтроллером необходимо выдержать время, необходимое для заряда конденсатора.

Передача данных по однопроводной шине выполняется импульсами нулевого уровня, но различной длительности лог. 0 и лог. 1. Импульс воспринимается как лог. 1, если его длительность не превышает 15 мкс (рис. 2). Если длительность импульса больше 15 мкс, то он воспринимается как лог. 0. Длительность одного бита информации принята равной 60 мкс. Отсюда и разброс возможных длительностей импульсов: лог. 0 - 1...15 мкс, лог. 1 - 15...60 мкс.

Рисунок 2. Временные диаграммы импульсов однопроводной шины

Для того чтобы термодатчик подготовить к приему информации, управляющий микроконтроллер должен послать в линию импульс обнуления (Reset) (рис. 54). Импульс обнуления должен иметь длительность 480...960 мкс. В ответ на обнуление линии термодатчик посылает импульс присутствия (Presence). Если в устройстве не предусмотрено отключение датчика, то импульс присутствия для упрощения программы можно не проверять, а заполнить это время (около 100 мкс) паузой. Длительность импульса Presence может быть в пределах 60...240 мкс.

Если к одной линии подключено несколько термодатчиков, то проверка импульса присутствия обязательна. Перед приемом каждого бита информации с датчика микроконтроллер управления должен послать короткий импульс готовности (запроса) длительностью 1...3 мкс.

Обмен данными и командами начинается с младшего бита. Формат регистров термодатчика показан на рис. 3. Младший регистр температуры (LS) несет информацию о температуре. В нулевой бит записана информация о десятых долях температуры. Если нулевой бит единичный, то десятые доли равны 0,5°С. Старший регистр температуры (MS) содержит информацию о знаке температуры. Если значения регистра нулевые, то знак температуры положительный, и наоборот. Поскольку все биты регистра MS одинаковы, то достаточно считать только младший бит.


Рисунок 3. Форматы регистров термодатчика DS1820

Регистры установки ограничения температуры Тh, Tl несут информацию только о целых значениях температуры. В седьмом бите записывают информацию о знаке температуры. При отрицательной температуре в седьмой бит необходимо записать единицу.

В табл. 1 приведен пример принимаемых кодов при различных температурах. Для того чтобы получить значение температуры при минусовых температурах, необходимо принятую информацию перевести в дополнительный код. Для перевода в дополнительный код необходимо принятый код инвертировать и прибавить единицу. Например, для значения 1111 1111 получим 0000 0001, т.е. 0,5°С, но со знаком минус.


Таблица 1.

Подключение термодатчика к микроконтроллеру показано на рис. 4. Шина данных должна быть подключена к плюсу питания через резистор номиналом 4,7 кОм, поскольку выходной транзистор датчика имеет открытый сток. При питании датчика от шины данных вывод 3 остается свободным.

Рисунок 4. Схема подключения термодатчика к микроконтроллеру AVR

В режиме питания от шины данных перед приемом информации требуется максимальная пауза длительностью 750 мс, хотя у меня датчик работал и при длительности паузы, равной 500 мс. В каждом конкретном случае необходима экспериментальная проверка выбранной длительности паузы.

Если необходима повышенная точность измерения температуры, а быстродействие системы не имеет значения, то ее можно рассчитать по формуле:

Т = Тu - 0,25 + (CUNT_PER - COUNT_REMAIN)/COUNT_PER,

где Тu - измеренная температура в °С; COUNT REMAIN, COUNT_PER - 6 и 7 байты блокнота (рис. 53). В документации на термодатчик не указана точность значений вычисленных температур, поэтому радиолюбителям советую провести экспериментальную проверку.

Вообще, если необходима точность измерения температуры 0,5°С за пределами диапазона -10...+85°С, то необходимо делать поправку на точность измерения температуры для каждого датчика. Для этого экспериментально сравнивают показания температуры вашей системы с показаниями образцового термометра. Полученную относительную погрешность программно прибавляют со своим знаком к измеренному значению.

Микроконтроллерные термодатчики DS18B20, как упоминалось выше, отличаются повышенной точностью измерения температуры. Формат регистров термодатчика показан на рис. 5. Младший полубайт регистра LS предназначен для передачи данных температуры с максимальной точностью, т. е. 0,0625°С. Если точность измерения температуры будет в два раза меньше, то все данные сдвинутся на разряд вправо, а в нулевом бите будет информация 2(в минус третей степени). Если будет установлена точность измерения температуры, равная 0,5°С, то формат регистров температуры ничем не будет отличаться от формата регистров термодатчика DS1820.

В табл. 2 показан пример данных при различных температурах, измеренных с максимальной точностью измерения.


Таблица 2.

Точность измерения температуры термодатчиком DS18B20 задается при его инициализации установкой пятого и шестого бита регистра конфигурации (рис. 5). В табл. 3 показаны устанавливаемые значения битов регистра конфигурации при различной точности измерения и максимальном времени преобразования температуры. Реально это время может быть значительно меньшим.


Рисунок 5. Формат регистров термодатчика DS18B20


Таблица 3

При подаче управляющим микроконтроллером команды 0x4E (запись в блокнот) подряд передаются 3 байта. Первым передается байт установки ограничения температуры по максимуму (Тh), вторым - по минимуму (Tl), а третьим - байт конфигурации. Назначение других команд ничем не отличается от назначения команд термодатчика DS1820.

Последовательность действий управляющего микроконтроллера при считывании температуры с одного термодатчика DS1820:
1) послать сигнал обнуления линии (480...960 мкc);
2) принять импульс присутствия или заполнить время паузой (60...240 мкc);
3) послать команду пропуска идентификации 0xCC;
4) послать команду начала преобразования 0x44;
5) пауза не менее 500 мкc для завершения процесса преобразования;
6) обнулить линию;
7) послать команду пропуска идентификации 0xCC;
8) послать команду считывания блокнота 0xBE;
9) принять 9 байт;
10) выделить и проанализировать бит десятых долей градуса;
11) проанализировать бит знака;
12) если знак отрицательный, то перевести значение температуры в дополнительный код.

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

Во второй части пример практического применения датчиков DS18B20 .

Теоретический материал был взят из книги Н. И. Заеца "Радиолюбительские конструкции на PIC микроконтроллерах"

Пора переходить к чему-нибудь более полезному в хозяйстве. Ну, например, сделать цифровой термометр, что-ли. Тем более, что с Ардуино - это совсем не так сложно, как было в "доконтроллерную эпоху". В те времена электронный термометр представлял собой сложную конструкцию из десятка микросхем, аналогового датчика, который нужно было еще откалибровать, и трансформаторного блока питания на несколько выходных напряжений. Ну, и - соответствующей подготовки радиолюбителя, который задумает все это собрать. Сейчас с этим - все гораздо проще.

Разрешите представить - цифровой датчик температуры буржуинской фирмы "Dallas semiconductor" DS18B20.

Полностью функциональное устройство для точного (до нескольких знаков после запятой) измерения температуры в диапазоне от -55 до +120 градусов Цельсия. Кроме того - имеется даже немного "мозгов" (ячеек памяти) для запоминания чего-нибудь полезного. Но пока что мы ими пользоваться не будем. Как видно на рисунке - выпускается в нескольких вариациях. Самая распространенная и для нас удобная - та, где написано "ТО-92".

Датчик имеет всего 3 вывода, на два из которых подается напряжение питания 5в, а средний вывод - для передачи данных. Все управление датчиком (подача на него команд, считывание измеренной температуры) идет по единственному проводнику, поэтому вся эта технология и протокол приема-передачи называется "1-Wire" или "One-Wire".

Чтобы не сильно загружаться теорией, примерно рассмотрим вкратце процесс измерения температуры с помощью нашего датчика.

Каждый сеанс передачи или приема данных начинается с команды инициализации. Опять же не будем вдаваться в подробности общения Ардуины с термометром, за нас это сделали посторонние люди (мысленно скажем им спасибо). Просто передадим ей одну команду - "инициализация", и она сама разберется, что надо сделать.

Далее, после инициализации, начинаем подавать управляющие команды. Тут надо заметить, что на одном управляющем проводке, теоретически, может находиться несколько устройств семейства "1-Wire". Причем, не только датчики температуры. Поэтому, есть возможность обращаться к каждому из них по уникальному серийному номеру. Но, поскольку у нас на проводе единственный датчик, то ни к чему другому мы не можем обратиться в принципе. Поэтому эти прелюдии пропускаются командой (передаваемым байтом "0хСС"). Забыл сказать - здесь и далее используется шеснадцатиричная запись двоичных чисел (байтов).

После того, как определились с адресатом - передаем команду "измерить температуру" ("0х44"). После этого нужно оставить датчик в покое примерно на 1 секунду, пока он будет делать свои дела.

За это время "ds-ка" измерит температуру и запишет результаты в два байта, которые нам нужно у нее выудить и привести к человеческому виду. Начинаем, как всегда, с инициализации сеанса связи. Потом снова передаем команду "сброс передачи адреса" ("0хСС"). И тут же следом - сообщаем, что готовы принять результат измерения: ("0хВЕ").

После этого Ардуина получает последовательно 2 байта (или двухбайтное число - кому как нравится) с результатами. Посмотрим, что это за результаты и как нам привести их к удобоваримому виду.

Опять же, чтоб не сильно грузиться, определимся с тем, что для нас важно. А именно - в младшем и, частично, в старшем байте находится результат измерения температуры с точностью до 4-го знака после запятой (нам такая точность - излишня). Знак температуры ("+" или "-") определяется значением старшего бита старшего байта.

Но, довольно слов - пора заняться конструированием. Схема подключения DS18B20 к Ардуине не только проста - а элементарно проста:


Выводы питания датчика подключены к соответствующим выводам Ардуины, а вывод данных - к цифровому выходу "10". Кроме того, вывод данных подключен к шине +5 вольт через резистор 3 - 5 килоом (так называемый "подтягивающий" резистор). Заметьте, что цифровой выход "10", хотя он будет работать и на выход, и на вход, нам уже не придется настраивать, как в предыдущем примере со светодиодами. Разработчики библиотеки "1-Wire" заботливо освободили нас от всякой черновой работы. Спасибо им за это!

В-общем, у меня получилось, примерно, так:


Да! Совсем забыл! Библиотека "1-Wire" не входит в базовую поставку Arduino IDE, поэтому ее нужно скачать, например, отсюда . Распакуем архив и положим папку с библиотекой в директорию \libraries, которая находится в папке, где установлена Arduino IDE. При следующем запуске среды разработки - библиотека будет доступна для использования. Вот где ее можно найти:


Однако, не будем использовать скетч из "Образцов", там сильно всего наворочено. Лучше скопируем в Arduino IDE вот такой скетч:

#include

OneWire ds(10); //

void setup(void) {
Serial.begin(9600); //настраиваем последовательный порт для вывода результатов
}

void loop() {
byte data; // объявляем массив из 2-х байт
ds.reset(); // инициализируем датчик
ds.write(0xCC); // пропускаем адресацию к конкретному датчику (у нас он один)
ds.write(0x44); // даем команду измерять температуру
delay(1000); // ждем 1 секунду, пока измеряется температура

ds.reset(); // снова инициализируем датчик
ds.write(0xCC); // снова пропускаем адресацию
ds.write(0xBE); // даем команду готовности считывать температуру
data = ds.read(); //считываем младший
data = ds.read(); // и старший байты
int Temp = (data << 8) + data; // преобразуем считанную информацию
Temp = Temp >> 4; // к нужному виду.
Serial.println(Temp); // выводим результат в последовательный порт.

Что мы тут видим... Сначала к скетчу подключается библиотека "OneWire". Указываем, что наш датчик подключен к выводу "10" Ардуины. Затем настраивается последовательный порт для вывода результатов измерения. Все, подготовительные операции закончены, начинаем измерять. Подготавливаем (резервируем и называем) 2 байта, куда будем записывать результат измерения температуры. Затем - подаем команды, как описывалось выше и, наконец, получаем 2 байта с нашей температурой. Затем происходит преобразование считанной информации и удаление лишних знаков после запятой с тем, чтобы получить целое значение температуры, без десятичных дробей. Эта информация и выводится через последовательный порт. Где мы можем ее увидеть? А вот здесь:


Итак, загружаем этот скетч в Ардуину, открываем "Монитор последовательного порта" и наблюдаем каждую секунду измеренную температуру:


Ура! Заработало! Не будем вдаваться в подробности процесс преобразования полученных от датчика 2-х байт в целое число температуры, это тема для отдельной большой статьи. Скажу только, что полученное число - переменная Temp типа integer. То есть, она может принимать как положительные значения, так и отрицательные. Проверим работу нашего устройства на морозце:


Ну что же - показывает и отрицательные температуры. Даже прямо сразу со знаком. В дальнейшем, когда мы будем выводить температуру на различные индикаторы, надо будет запомнить эту особенность нашей программы. И предусмотреть дополнительно индикацию знака плюсовой температуры. Но про то - уже в следующих статьях.



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows