Любая операция в сети Master устройство - Slave устройство начинается с команды. Команда представляет собой байт информации. Каждая команда имеет свой собственный код. Выполнение команды начинается с импульса сброса. Затем Slave устройство вырабатывает, а Master устройство проверяет сигнал присутствия на линии. Если сигнал на месте, Master выдает на линию код команды в режиме записи. Получив этот код, Slave устройство переключается в режим выдачи информации.
При описании протокола 1-Wire принято выделять два уровня, связанных с логикой работы протокола – сетевой и транспортный уровни. Сразу после сигнала сброса шина переходит на сетевой уровень. Отработав команду сетевого уровня, шина переходит на транспортный. Система команд сетевого уровня протокола 1-Wire включает 5 команд: Чтение ПЗУ, Чтение ПЗУ (для микросхемы DS1990A команда имеет другой код), Совпадение ПЗУ, Пропуск ПЗУ, Поиск ПЗУ. Все эти команды, кроме команды Пропуск ПЗУ, не используются в случае, если в сети имеется лишь одно устройство. Поскольку для выполнения требований технического задания одного датчика температуры вполне достаточно, ограничимся описанием команды Пропуск ПЗУ (SkipROM). Эта команда (код – 0ССН) позволяет перейти на транспортный уровень всем устройствам в сети, оставляя их активными. В нашем случае устройство всего одно.
После команды сетевого уровня все элементы сети переходят на транспортный уровень. Список команд этого уровня разнится для каждого устройства. Команды электронного датчика температуры DS18B20 будут рассмотрены в данной работе позднее. Следует отметить, что для выполнения очередной команды после выполнения команды транспортного уровня необходимо произвести импульс начального сброса.
Теперь приступим непосредственно к увлекательному описанию интегрального датчика температуры фирмы DallasSemiconductorDS18B20.
Фирма DallasSemiconductor выпускает целый набор микросхем-измерителей температуры. Самый первый интегральный термодатчик с 1-Wire интерфейсом назывался DS1820. Эта оригинальная микросхема сразу после своего появления приобрела популярность у разработчиков электронной аппаратуры.
DSI8B20 - более совершенная микросхема. Высокая дискретность достигается увеличением количества разрядов результирующего кода. Причем в микросхеме имеется возможность изменения количества .разрядов выходного регистра. По умолчанию выходной регистр имеет 9 разрядов. Изменяя содержимое регистра конфигурации, микроконтроллер может увеличить количество разрядов до 12. Точность измерения температуры в диапазоне —10...+85*С составляет -±0,5°С. На выходе микросхемы DS18B20 мы получаем прямой код. значение которого равно величине измеряемой температуры. В 9-разрядном режиме значение измеряемой температуры выдается -С дискретностью в 0,5'С. В двенадцатиразрядном режиме количество отсчетов повышается в восемь раз. Максимальное время преобразования для микросхемы DS18B20 также зависит от выбранного количества разрядов. Для 12-разрядного режима работы оно равно 750 мс.
Микросхема DS18B20 выпускается в двух модификациях [2], Они отличаются исключительно конструкцией корпусу, На рисунке 10 приведен внешний вид обеих модификаций микросхемы. Основной вариант микросхемы выполнен в миниатюрном пластмассовом корпусе типа ТО-92. Второй вариант заключен в планарный восьмивыводной, миниатюрный корпус типа SOIC. Для того, чтобы различать эти два варианта исполнения, второй вариант получил обозначение DSI8B20Z. Микросхема имеет всего три задействованных вывода: DO-вход/выход данных 1-Wire интерфейса; VDD— вывод внешнего питания: GND — общий провод. Расположение выводов показано на рисунке 10.
Внутренняя структура микросхемы DS18B20 приведена на рисунке 11. Сигнал с шины DQ и напряжение с внешнего вывода питания (VDD ) прежде всего поступают на схему паразитного питания. Однако в схеме паразитного питании имеется еще один дополнительный элемент, о котором не говорилось ранее. Это датчик наличия питания. Датчик представляет собой пороговый элемент, на который поступает напряжение питания от внешнего источника. Датчик вырабатывает логически сигнал, поступающий в схему управления. В результате микросхема получает возможность автоматически определять режим своего питания. Микроконтроллер, работающий в качестве Master устройства на той же шине, имеет возможность запросить у всех подключенных к ней датчиков информацию о режиме питания и соответствующим образом скорректировать алгоритм своей работы.
Рисунок 10 - Внешний вид микросхем DS18B20 в двух разных исполнениях
Рисунок 11 - Внутренняя структура микросхемы DS18B20
Сигнал DQ, обеспечив напряжением схему паразитного питания поступает на 1-Wire порт, который служит аппаратной частью одно проводного интерфейса. Данные, полученные при помощиэтого интерфейса, поступают в блокнотную память. Блокнотная память предназначена для временного хранения информации от датчика температуры и трех специальных регистров: регистра верхнего предела (Тн), регистра нижнего предела (TL) и регистра конфигурации. Все три специальных регистра представляют собой три ячейки флэш-памяти (EEPROM).
С блокнотной памятью также связан генератор контрольной суммы. Этот генератор автоматически вычисляет контрольную сумму всех регистров блокнотной памяти. При считывании информации из блокнотной памяти контрольная сумма также читается и служит для проверки правильности прочитанной информации. Применение блокнотной памяти позволяет повысить надежность передачи информации. Информация никогда не записывается непосредственно в ячейки флэш-памяти (регистры Тн и TL и регистр конфигурации). Предварительно она помещается в блокнотную память. Затем микроконтроллер читает ее оттуда и проверяет контрольную сумму. Если результат проверки положительный, микроконтроллер подает по шине специальную команду «Копирование блокнотной памяти в EEPROM».
Посредством 1-Wire интерфейса можно также прочитать содержимое 64-битного ПЗУ, в котором хранится IDкод микросхемы. Последние восемь битов ID кода представляют собой контрольную сумму первых ее 56 битов.
Структура памяти микросхемы DS18B20 приведена на рисунке 12. Память состоит из восьми регистров блокнотной памяти и трех регистров EEPROM. Операции записи и чтения блокнотной памяти выполняются для всех ее регистров одновременно. При; записи все восемь регистров блокнотной памяти записываются одним блоком из восьми байт. Точно также одним блоком происходит считывание информации. На рисунке 12 для каждого регистра обозначена его позиция внутри передаваемого блока (байт 0, байт 1 и так далее).
Два самых младших регистра (байт 0 и байт 1) содержат результат преобразования температуры в код. Следующие три регистра служат для промежуточного хранения информации для регистров флэш-памяти.В регистр Тн записывается верхний предел температуры. В регистр TL — нижний. Эти регистры используют для проверки факта выхода величины измеренной температуры за границы установленного диапазона. Микроконтроллер способен быстро отыскать в сети MicroLAN все термодатчики, у которых не соблюдается это условие. Если не нужен механизм ограничения температуры, то регистры Тн и TL можно использовать как дополнительные ячейки энергонезависимой памяти и хранить в них любые данные. Например, туда можно записать код места положения конкретного датчика. Регистр конфигурации служит для переключения количества разрядов измерителя температуры.
Рисунок 12 - Структура памяти микросхемы DS18B20
Все три описанные выше регистра (байт 2, байт 3, байт 4) имеют механизм автоматического восстановления. При включении питания в них автоматически копируется информация из соответствующих регистров EEPROM. В регистр температуры после включения питания помешается код 0550Н (старший байт 05Н, младший байт 50Н), что соответствует температуре 85°С.
Оставшиеся три регистра блокнотной памяти (байт 5, байт 6 и байт 7) в микросхеме DSI8S20 не используются. Они зарезервированы для будущих ее модификаций. При чтении все три неиспользуемых регистра возвращают код OFFH (единицы во всех разрядах). Последний, восьмой регистр блокнотной памяти — это регистр генератора контрольной суммы.
Формат регистра температуры приведен на рисунке 13.
Рисунок 13 - Структура регистра температуры
После окончания процесса преобразования эти регистры содержат прямое значение величины измеренной температуры в двоичном виде. Регистр температуры — это два регистра блокнотной памяти. На рисунке 13 показан вес каждого разряда регистра. Биты с 11-го по 15-й (обозначенные буквой S) содержат одно и то же значение. Оно равно знаку записанного числи (0 — плюс, 1 — минус). Положительные значения температуры записываются в прямом коде, а отрицательные — в дополнительном (для того, чтобы перевести двоичное число в дополнительный код, нужно инвертировать его, а затем прибавить единицу).
Теперь рассмотрим формат регистров Тн и TL. На рисунке 14 он представлен в графическом виде. Как видно из рисунка, эти регистры имеют всего по восемь разрядов. Причем старший разряд - это знак числа. Поэтому верхний и нижний пределы температуры могут устанавливаться лишь с шагом в 1 градус. Для записи положительных и отрицательных чисел в регистрах Тн и TL также используются прямой и дополнительный коды.