Министерство образования и науки Российской Федерации Государственное образовательное учреждение высшего профессионального образования «Ивановский государственный энергетический университет имени В.И. Ленина» Кафедра электроники и микропроцессорных систем Исследование микросхемы электронного термометра DS18S20 и интерфейса 1- Wire Методические указания к лабораторной работе по курсу «Интерфейсы систем обработки данных» для студентов специальности 210106 Иваново 2010 Составитель Редактор В. Г. ТЕРЕХОВ, А. И. ТЕРЕХОВ А. А. АНИСИМОВ В работе исследуется микросхема электронного термометра DS18S20 и особенности его подключения чераз интерфейс 1–Wire. Методические указания предназначены для студентов 4 – 5 - го курсов специальности 210106.62. Лабораторная работа рассчитана на 8 часов. Утверждены цикловой методической комиссией ЭМФ Рецензент кафедра электроники и микропроцессорных систем ГОУВПО «Ивановский государственный энергетический университет имени В.И.Ленина» 2 Содержание Задание .................................................................................... 4 Методические указания ....................................................... 4 Микросхема термометра DS18S20 ................................... 4 Интерфейс 1-Wire.................................................................. 8 Контрольные вопросы ........................................................ 19 Библиографический список .............................................. 19 3 Задание 1. Изучить особенности работы микросхемы цифрового термометра DS18S20. 2. Изучить по приведенным описаниям микросхемы особенности обмена данными через интерфейс 1-Wire. 3. Разработать алгоритм и программу работы ЭВМ чтения данных с микросхемы термометра DS18S20 через параллельный LPT–порт при одиночном устройстве на шине. 4. Доработать алгоритм и программу для произвольного количества устройств на шине интерфейса 1-Wire. Методические указания 1. Для формирования временных интервалов рекомендуется использовать программу taimClok.exe, которая подсчитывает количество элементарных инкрементных регисторных команд за 18,2 мс. 2.Программа может быть написана как на ассемблере, так и на языках высокого уровня. Для вывода информации на экран в случае создания программы на ассемблере рекомендуется пользоваться программными прерываниями: int 10 02 – установка позиции курсора; int 21 02 – вывод символа на экран и т.д. (см. программу help.exe, установленную на компьютере). 3. Любая начатая процедура обмена данными может длиться сколь угодно долго за счет пауз между отдельными таймслотами, но всегда должна быть завершена полностью. 4. Прервать начатый обмен данными можно в любой момент путем выдачи импульса RESET в шину 1-Wire, хотя это может нарушить нормальную работу некоторых устройств. 5. При использовании термометра DS18S20 необходимо учитывать, что его корпус сделан из материала с относительно плохой теплопроводностью. Поэтому время переходных процессов при нагреве/охлаждении термометра может быть довольно большим. Микросхема термометра DS18S20 Широко распространенная микросхема цифрового термометра DS18S20 (рис.1), выпускаемая фирмой DALLAS, обеспечивает измерение температуры в диапазоне –55…+125°C с дискретностью 0,5°C. Подробное описание микросхемы термометра DS18S20 можно найти в [1]. 4 GND DQ Vdd Рис. 1. Внешний вид микросхемы цифрового термометра DS18S20 Термометр калибруется на заводе, гарантированная точность составляет ±0,5 °C в диапазоне –10…+85 °C и ±2 °C во всем диапазоне рабочих температур. С помощью дополнительных вычислений дискретность представления температуры можно уменьшить до 0,1 °C. Типичная кривая ошибки измерения температуры приведена на рис. 2. Ошибка (0С) 0,5 0 -0,5 0 10 20 40 30 50 60 70 Температура (0С) Рис. 2. Типичная кривая ошибки показаний термометра DS18S20 Несмотря на ограниченную абсолютную точность, малая дискретность представления температуры позволяет с высокой точностью проводить относительные измерения, что часто требуется на практике. Термометр DS18S20 допускает напряжение питания в диапазоне от +3 до +5,5 В. В режиме ожидания потребляемый ток близок к нулю (менее 1мкА), а во время преобразования температу- 5 ры он равен примерно 1мА. Время преобразования – максимум 750 мс. Принцип действия цифровых датчиков температуры фирмы DALLAS основан на подсчете количества импульсов, вырабатываемых генератором с низким температурным коэффициентом во временном интервале, который формируется генератором с большим температурным коэффициентом. Счетчик для подсчета количества импульсов состоит из двух последовательно соединенных частей. Старшая часть счетчика инициализируется один раз за цикл преобразования значением, соответствующим – 55 °C (минимальной измеряемой температуре). Младшая часть после каждого переполнения предустанавливается значениями, которые соответствуют количеству импульсов генератора на 1 °C для каждого конкретного значения температуры. Такое построение счетчика позволяет компенсировать параболическую зависимость частот генераторов от температуры. По окончании процесса преобразования содержимое счетчика переписывается в регистр температуры. Термометр DS18S20 имеет промежуточное ОЗУ объемом 9 байт и энергонезависимую память (2 байта). Карта памяти термометра DS18S20 показана на рис. 3. Промежуточное ОЗУ Младший байт температуры Старший байт температуры ТН / байт пользователя 1 ТL / байт пользователя 2 Зарезервировано Зарезервировано COUNT_REMAIN COUNT_PER_C CRC Энергонезависимая память 0 1 2 3 4 5 6 7 8 ТН / байт пользователя 1 ТL / байт пользователя 2 Рис. 3. Карта памяти термометра DS18S20 Для термометра DS18S20 температура представляется в виде 9-битного значения в дополнительном коде. Поскольку это значение занимает 2 байта, всем разрядам старшего байта присваивается значение знакового разряда. Дискретность представления температуры составляет 0,5 °C. Зависимость выходного кода от температуры приведена в табл. 1. 6 Таблица 1. Зависимость выходного кода от температуры Температура +125°C +25°C +0.5°C 0°C -0.5°C -25°C -55°C Выходной код (Binary) Ст. байт Мл. байт 0000 0000 1111 1010 0000 0000 0011 0010 0000 0000 0000 0001 0000 0000 0000 0000 1111 1111 1111 1111 1111 1111 1100 1110 1111 1111 1001 0010 Выходной код (Hex) 00FAh 0032h 0001h 0000h FFFFh FFCEh FF92h Более высокая разрешающая способность может быть получена, если произвести дополнительные вычисления на основе значений COUNT_REMAIN (значение, оставшееся в младшей части счетчика в конце измерения) и COUNT_PER_C (количество импульсов на один градус для данной температуры), которые доступны для чтения при опросе микросхемы. Предварительно прямо измеренное значение температуры делится на 2 с отбрасыванием остатка от деления (TEMP_READ). Точное значение температуры t (0С) может быть вычислено по формуле t = TEMP_READ – 0,25 + (COUNT_PER_C – – COUNT_REMAIN)/COUNT_PER_C. Такой расчет позволяет получить дискретность представления температуры, равную 0,1 °C. Байты TH и TL представляют собой температурные пороги, с которыми сравниваются 8 бит каждого измеренного значения температуры (младший бит отбрасывается). С помощью специальной команды можно организовать сигнализацию выхода температуры за пределы этих порогов. Если такая функция не нужна, байты TH и TL можно использовать для хранения любых данных пользователя. Для вычисления байта контрольной суммы (CRC) используется полином CRC = X8+X5+X4+1. Байт контрольной суммы формируется с использованием этого полинома по одинаковому принципу при приеме и передаче информации. 7 Блок-схема алгоритма вычисления CRC показана на рис. 4. Алгоритм использует операции сдвига и «исключающего или». В квадратах показаны биты 8-разрядной переменной, которая используется для вычисления CRC. Перед началом вычислений её необходимо обнулить, а затем на вход алгоритма нужно последовательно побитно подать контролируемую последовательность. В термометре DS18S20 информация передается начиная с младшего бита младшего байта. В результате обработки всей последовательности переменная будет содержать значение CRC. вход D7 D6 D5 D4 XOR D3 XOR D2 D1 D0 XOR Рис. 4. Блок-схема алгоритма вычисления контрольной суммы Если алгоритм выполнить над последовательностью, включающей в себя и байт CRC, то значение переменной при правильном приеме будет равно нулю. Каждый экземпляр термометра DS18S20 имеет ПЗУ (8 байт), в которое с помощью лазера в процессе производства записывается код семейства (1 байт; для термометра DS18S20 это 10h), уникальный 48-битный номер (6 байт) и один байт CRC для контроля правильности пересылки. Код семейства и номер используются для адресации устройств. Интерфейс 1-Wire Считывание значения измеренной температуры, а также передача команды начала преобразования и других команд производится с помощью 1-проводного интерфейса (1-WireTM) фирмы Dallas Semiconductor, которая сегодня является частью корпорации MAXIM. На основе этого интерфейса фирма Dallas создала сеть, называемую microLAN (или µLAN). Для работы в этой сети выпускается ряд устройств, таких как адресуемые ключи, АЦП, термометры, часы реального времени, цифровые потенциометры. Такой же интерфейс имеют и цифровые ключи IButton (или 8 Touch Memory), которые широко используются в системах ограничения доступа. Протокол обмена данного интерфейса легко реализуется программно практически на любых микроконтроллерах. Существуют специальные микросхемы – адаптеры, реализующие все функции ведущего устройства на интерфейсе, применение которых не очень популярно из – за высокой стоимости. Vсс Ведущее устройство 1- Wire Устройство 1- Wire 4,7k DQ Rx Шина 1- Wire Tx Rx Tx Рис. 5. Схема подключения устройств к шине 1-Wire На рис. 5 показана упрощенная схема аппаратной реализации интерфейса 1-Wire. Вывод DQ шины интерфейса устройства представляет собой вход КМОП - логического элемента, который может быть зашунтирован (замкнут на общий провод) полевым транзистором. Сопротивление канала этого транзистора в открытом состоянии – около 100 Ом. Когда транзистор заперт – течет небольшой ток утечки (примерно 5 мкА) на общий провод. Шина 1-Wire должна быть «подтянута» отдельным резистором к напряжению питания устройств, которое может быть от 3 до 5 В. Сопротивление этого резистора для коротких линий рекомендовано 4,7 кОм. Для подключения удаленных на большое расстояние устройств сопротивление этого резистора уменьшают в пределе до 300 Ом. Подключение шины 1-Wire к ведущему устройству показано с использованием 2 отдельных выводов (один в качестве выхода, а другой в качестве входа). Передача какой-либо информации возможна установкой низкого уровня сигнала в шине, т.е. замыканием ее на общий провод. Если нет замыкания, то на шине благодаря наличию внешнего подтягивающего резистора установится высокий логический уровень. Одновременная передача несколькими устройствами обречена на неудачу из-за полного 9 искажения информации (все передаваемые единицы одного устройства будут подавлены передаваемыми нулями от другого устройства). Организация обмена информацией по шине 1-Wire. 1. Обмен всегда ведется по инициативе одного ведущего устройства (в данном случае ЭВМ). 2. Интерфейс 1-Wire в общем случае допускает «горячее» подключение и отключение устройств. 3. Любой обмен информацией начинается с подачи импульса сброса (Reset Pulse или RESET) в шину 1-Wire ведущим устройством. 4. Любое устройство, подключенное к шине 1-Wire после получения питания, выдает в шину DQ импульс присутствия, называемый Presence pulse (PRESENCE). Этот же импульс устройство всегда выдает в шину, если обнаружит сигнал RESET. 5. Появление в шине 1-Wire импульса PRESENCE после выдачи RESET однозначно свидетельствует о наличии хотя бы одного подключенного устройства. 6. Обмен информацией ведется так называемыми таймслотами: один тайм-слот служит для обмена одним битом информации. 7. Данные передаются побайтно, бит за битом, начиная с младшего бита младшего байта. Достоверность переданных/принятых данных гарантируется путем подсчета контрольной суммы. Основные особенности шины определяются применением логического низкоуровневого протокола обмена данными. На рис. 6 показана диаграмма сигналов RESET и PRESENCE, с которых всегда начинается любой обмен данными. Выдача импульса RESET в процессе обмена служит для досрочного завершения процедуры обмена информацией. Длительность большинства временных интервалов приблизительная и имеет только ограничение только по минимуму (не меньше указанного). Импульс RESET формирует ведущее устройство, переводя в низкий логический уровень шину 1-Wire и удерживая ее в этом состоянии минимум 480 мкс. Затем ведущее устройство должно «отпустить» шину. Через некоторое время, зависящее от емкости шины и сопротивления подтягивающего резистора, в шине установится высокий логический уровень. Протокол 1-Wire ограничивает это время «релаксации» диапазоном от 15 до 60 мкс, 10 что и является определяющим для выбора подтягивающего резистора. Ведущий передает импульс RESET 480мкс (миниум) VCC Время реакции 15-60мкс Ведущий находится в состоянии приема 480мкс (миниум) Устройство передает импульс PRESENCE 60-240мкс GND Рис.6. Диаграмма инициализации на шине 1-Wire: ведущий поддерживает низкий уровень устройство поддерживает низкий уровень уровень в линии обеспечивает резистр «подтяжки» Обнаружив импульс RESET, ведомое устройство приводит свои внутренние узлы в исходное состояние и формирует ответный импульс PRESENCE не позже 60 мкс после завершения импульса RESET. Для этого устройство переводит в низкий уровень шину DQ и удерживает ее в этом состоянии от 60 до 240 мкс. Конкретное время удержания зависит от многих параметров, но всегда находится в указанном диапазоне. После этого устройство также «отпускает» шину. После завершения импульса PRESENCE устройству дается еще некоторое время для завершения внутренних процедур инициализации, таким образом, ведущее устройство должно приступить к любому обмену с устройством не ранее, чем через 480 мкс после завершения импульса RESET. В сумме процедура инициализации интерфейса длится минимум 960 мкс. Если сигнал PRESENCE не обнаружен, значит, на шине 1Wire нет готовых к обмену устройств. Процедуры обмена битами информации осуществляются тайм-слотами. Тайм-слот – это определенная, довольно жестко лимитированная по времени последовательность смены уровней сигнала в шине 1-Wire. Различают 4 типа тайм-слотов: передача логических «1» или «0» от ведущего устройства и прием логических «1» или «0» ведомым устройством. 11 Любой тайм-слот всегда начинает ведущее устройство путем перевода шины 1-Wire в низкий логический уровень. Длительность любого тайм-слота должна находиться в пределах от 60 до 120 мкс. Между отдельными тайм-слотами всегда должен предусматриваться интервал не менее 1 мкс. Тайм-слоты передачи отличаются от тайм-слотов приема поведением ведущего устройства: при передаче только это устройство формирует сигналы, при приеме, кроме того, еще и опрашивает (т.е. принимает) уровень сигнала в шине 1-Wire. Рис. 7 демонстрирует временные диаграммы тайм-слотов всех 4 типов: вверху показаны тайм-слоты передачи от ведущего устройства, внизу приема от ведомого устройства. Начало тайм-слота Начало тайм-слота 60мкс < TX «0»< 120мкс 60мкс < TX «1»< 120мкс >1мкс 1мкс<TREC< VCC Тайм- слот передачи ведущим «0» Тайм- слот передачи ведущим «1» GND 60мкс 15мкс 60мкс 15мкс 30мкс мин. типично макс. Зона ввода значений в ведомое устройство Начало тайм-слота мин. типично макс. Зона ввода значений в ведомое устройство Начало тайм-слота Тайм - слот передачи ведомым «0» >1мкс VCC 30мкс Тайм - слот передачи ведомым «1» GND 60мкс < TX «0»< 120мкс 60мкс < TX «0»< 120мкс 15мкс 15мкс Зона ввода значений в ведущее устройство Зона ввода значений в ведущее устройство Рис. 7. Диаграммы тайм-слотов на шине 1-Wire Тайм-слот передачи логического «0» заключается в удержании шины 1-Wire в низком уровне в течение всей длительности тайм-слота. Передача логической «1» осуществляется путем «отпускания» шины 1-Wire со стороны ведущего устройства не ранее чем через 1 мкс после начала тайм-слота, но не позже чем через 15 мкс. Ведомое устройство опрашивает уровень в шине 1-Wire в течение временного интервала, условно показан- 12 ного в виде прямоугольника, т.е. начиная с 15-й мкс от начала тайм-слота и заканчивая 60-й мкс от начала тайм-слота. Типичный момент ввода уровня в устройство (т.е. характерный для большинства устройств) около 30-й мкс от начала тайм-слота. Заштрихованная область это область «нарастания» уровня в шине 1-Wire, которая зависит от емкости шины и сопротивления подтягивающего резистора и временных характеристик конкретного устройства. Тайм-слоты приема информации отличаются тем, что ведущее устройство формирует только начало тайм-слота выдачей в шину 1-Wire логического «0» в течение 1 мкс (так же, как при передаче логической «1»), а затем управление уровнем берет на себя ведомое устройство, а ведущее устройство осуществляет ввод этого уровня также в определенной зоне временных интервалов. Зона эта довольно мала. Заштрихованные области на временных диаграммах рис. 7 – это области неопределенности, отражающие худшие варианты условий обмена данными. Для надежного ввода данных ведушему устройству остается момент времени от 13-й до 15-й мкс от начала тайм-слота, когда он должен считать уровень сигнала из шины. Ведущее устройство должно обеспечить интервал между отдельными тайм-слотами не менее 1 мкс (лучше больше, максимальное значение не ограничено). Увеличение длительности тайм-слота вывода логического «0» свыше рекомендованного значения может привести к ошибочному восприятию этого тайм-слота как сигнала RESET, и, разумеется, после этого вся процедура обмена пойдет как ошибочная. Для надежного обмена рекомендуется все сигналы ведущего устройства формировать по принципу необходимого минимума длительности (т.е. немного больше, чем указанная минимальная длительность), а от устройства следует ожидать худшие (минимальной длительности) временные параметры сигнала. Более высокий уровень протокола обмена информацией оперирует с командами. Первой командой, которую должен передать мастер (ведущее устройство) для термометра DS18S20 после инициализации, является одна из команд функций ПЗУ. Всего термометр DS18S20 имеет 5 команд функций ПЗУ: 13 Skip ROM [CCh] – позволяет пропустить процедуру сравнения серийного номера и тем самым сэкономить время в системах, где на шине имеется всего одно устройство. Match ROM [55h] – позволяет адресовать на шине конкретный термометр. После этой команды мастер должен передать нужный 64-битный код, и только тот термометр, который имеет такой код, будет «откликаться» до следующего импульса сброса. Read ROM [33h] – позволяет прочитать содержимое ПЗУ. В ответ на эту команду термометр DS18S20 передает 64-битный код с серийным номером. Search ROM [F0h] – позволяет определить серийные номера всех термометров, присутствующих на шине. Alarm Search [ECh] – аналогична предыдущей, но «откликаться» будут только те термометры, у которых результат последнего измерения температуры выходит за предустановленные пределы, значение которых хранится в ячейках TH и TL ОЗУ. Для одного устройства на шине достаточной функцией для адресации является функция Skip ROM. Получив эту команду, устройство сразу считает адрес совпавшим, хотя никакого адреса за этой командой не следует. Некоторые процедуры не требуют приема от устройства никаких данных, в этом случае команду SKIP ROM можно использовать для передачи информации сразу всем устройствам. Это используется, например, для одновременного запуска цикла измерения температуры несколькими термометрами DS18S20. После обработки одной из команд функций ПЗУ термометр DS18S20 способен воспринимать еще несколько команд: Write Scratchpad [4Eh] – позволяет записать данные в промежуточное ОЗУ термометра DS18S20. Read Scratchpad [BEh] – позволяет считать данные из промежуточного ОЗУ. Copy Scratchpad [48h] – копирует байты TH и TL из промежуточного ОЗУ в энергонезависимую память. Эта операция требует около 10 мс. Convert T [44h] – запускает процесс преобразования температуры. Recall E2 [B8h] – действует обратным образом по отношению к команде Copy Scratchpad, т.е. она позволяет считать байты TH и 14 TL из энергонезависимой памяти в промежуточное ОЗУ. При включении питания эта команда выполняется автоматически. Read Power Supply [B4h] – позволяет проверить, использует ли термометр DS18S20 двухпроводную схему включения с «паразитным» питанием. При использовании термометра DS18S20 только для измерения температуры при одиночном устройстве на шине нужны всего две из этих команд: Convert T и Read Scratchpad. Последовательность действий при измерении температуры при с одним термометром на шине должна быть следующей: посылаем импульс сброса и принимаем ответ термометра; посылаем команду Skip ROM [CCh]; посылаем команду Convert T [44h]; формируем задержку (минимум 750 мс); посылаем импульс сброса и принимаем ответ термометра; посылаем команду Skip ROM [CCh]; посылаем команду Read Scratchpad [BEh]; читаем данные из промежуточного ОЗУ (8 байт) и CRC; проверяем CRC, и если данные считаны верно, вычисляем температуру. При произвольном количестве устройств необходимо знать номера всех устройств на шине. Если идентификаторы ведомых устройств заранее неизвестны, то после сброса интерфейса и приема ответа от устройств передается команда «Поиск ПЗУ». Далее каждый бит 64-битового адреса ведомых устройств определяется за 3 тайм-слота. В первом тайм-слоте каждое ведомое устройство передает первый бит своего идентификатора в шину. Ведущее устройство считывает результат, как логическое «И», над всеми первыми битами идентификаторов всех ведомых устройств. Во втором тайм-слоте ведомые устройства размещают на шине двоичное дополнение к первому биту своего идентификатора. Ведущее устройство считывает состояние шины, которое есть результат логического «И» над всеми дополнениями к первому биту идентификатора всех ведомых устройств. Если все устройства в первом разряде идентификатора содержат логическую «1», то ведущее устройство за два таймслота считает код 10b. Аналогично, если значение 1-го разряда всех устройств равно логическому «0», то ведущее устройство примет код 01b. В этих случаях бит может быть сохранен как значение первого бита всех адресов и в третьем тайм-слоте ве- 15 дущее устройство подтверждает (записывает) этот бит по шине, чем оповещает ведомые устройства о необходимости дальнейшего продолжения передачи разрядов идентификатора. Если на шине будут присутствовать устройства как с логическим «0», так и с логической «1» в первом бите идентификатора, то ведущее устройство примет код 00. В этом случае ведущее устройство должно выбрать, с какими адресами продолжать работу, с логическим «0», или с логической «1» в первом разряде. Выбор передается по шине, указывая выбранным ведомым устройствам о необходимости дальнейшей передачи идентификатора, а остальные ведомыеустойства переходят в режим ожидания. Затем ведущее устройство переходит к считыванию следующих битов, и этот процесс повторяется до считывания всех 64 бит. В результате ведущее устройство обнаруживает полный 64разрядный идентификатор. Для поиска других идентификаторов необходимо снова инициировать команду «Поиск ПЗУ», но в этом случае при возникновении несоответствий следует сделать другой выбор. Если придерживаться данной последовательности, то в конечном счете можно обнаружить все ведомые устройства. После выполнения поиска все ведомые устройства, кроме одного, переходят в режим ожидания. Таким образом, в этом состоянии связаться с активным ведомым устройством можно с помощью команды «Совпадение ПЗУ». Спецификация этих устройств с интерфейсом 1-Wire допускает их питание от самой шины, т.е. «паразитное» питание по двухпроводной схеме подключения. Не все, но многие, например тот же термометр DS18S20 или ключ-таблетка DS1990A, устройства поддерживают такой режим питания. Для работы в этом режиме низкий уровень сигнала в шине 1-Wire должен иметь более жесткие (в сторону уменьшения) временные рамки. Потребление тока всеми устройствами 1-Wire такое ничтожное, что емкости встроенных конденсаторов достаточно для поддержания в рабочем состоянии схемы устройства в течение небольшого интервала, когда в шине 1–Wire формируется низкий логический уровень. При «паразитном» питании возможности устройств несколько уменьшаются, что проявляется в ухудшении работы на шину с большой собственной емкостью (т.е. шину большой протяженности). Поэтому связь с устройствами, использующими «паразит- 16 ное» питание, возможна на относительно небольших расстояниях. Кроме того, «паразитное» питание часто сопровождается дополнительными побочными эффектами, которые описываются в документации на конкретные изделия. Так, использование «паразитного» питания не рекомендовано для термометра DS18S20 при измерении температур выше 100 0C, так как могут увеличиться токи утечки, что приведет к резкому увеличению ошибки. Для условий, в которых такие температуры вероятны, рекомендовано, чтобы термометр DS18S20 питался от внешнего блока питания. В некоторых ситуациях ведущее устройство может не знать способ питания. Чтобы получать эту информацию, ведущее устройство может после команды Skip ROM [CCh] послать команду Read Power Supply [B4h], сопровожденную тайм-слотом чтения. В тайм-слоте чтения при «паразитном» питании будет получен низкий уровень шины, при внешнем – высокий. Адаптер шины 1-Wire Для подключения к компьютеру можно использовать как LPT – порты, так и COM [2] порты. Для работы с COM-портом программа может использовать API – функции через специальную «оберточную» динамическую библиотеку comapi32.dll. Достоинство такого подключения – предсказуемая точность формирования временных интервалов, обеспечиваемая аппаратной частью COM – порта. Однако скорость обмена получается относительно низкой из-за того, что необходимое программное переключение скорости COM-порта идёт довольно долго (порядка 200 мс). Подключение термометра DS18S20 к параллельному LPTпорту компьютера (в режиме ISA) позволяет получить более высокие скорости, но сложно обеспечить стабильные временные параметры доступа. Временные интервалы рекомендуется в данном случае формировать на основе счетных ячеек. Обмен может заканчиваться ошибкой из–за нестабильности временных интервалов. Схема адаптера приведена на рис. 8. 17 D0 D1 D2 D3 D4 D7 D5 D6 ACK VCC DQ DS18S20 GND Рис. 8. Схема адаптера шины для LPT- порта В ЭВМ в адресном пространстве для параллельного порта LPT1 используются 2 адреса: 378h и 379h. Первый из адресов соответствует регистру данных D0 - D7 порта и позволяет формировать управляющие сигналы на микросхему. Шесть младших разрядов используются для питания микросхемы от порта и поэтому должны постоянно удерживаться в состоянии логической «1». Разряд D6 используется как шина формирования сигналов ведущего устройства при выдаче информации. Для чтения ответов от ведомых устройств используется 6-й бит (считая с нулевого) регистра состояния принтера LPT – порта (бит ACK, адрес 379h), причем правильно считать информацию можно при установке бита D6 в состояние логической «1» (рис 8). 18 Контрольные вопросы 1. Поясните принцип измерения температуры датчиком температуры термометра DS18S20. 2. Приведите временные параметры шины 1-Wire. 3. Поясните особенности «паразитного» питания устройств на шине1-Wire и способ его определения. 4. Как рассчитывается контрольная последовательность? 5. Как различаются группы команд шины 1-Wire? 6. Как работает адаптер шины 1-Wire с LPT – портом? 7. Предложите алгоритм работы адаптера с COM –портом. 8. Приведите последовательность действий на шине для измерения температуры с одиночного термометра. 9. Приведите последовательность действий на шине для измерения температуры с нескольких термометров. Библиографический список 1. DS18S20 High-Precision 1-Wire Digital Thermometer. URL: http://pdfserv.maxim-ic.com/arpdf/DS18S20.pdf. 2. Компьютерный термометр на основе DS18S20. URL:http://radiokot.ru/articles/13/index.shtml. 19 Исследование микросхемы электронного термометра DS18S20 и интерфейса 1- Wire Методические указания к лабораторной работе по курсу «Интерфейсы систем обработки данных» для студентов специальности 210106 Составители: Терехов Владимир Григорьевич, Терехов Анатолий Иванович Редактор Н. С. Работаева Подписано в печать Формат 60х84 1/16. Печать плоская. Усл. печ. л. 1,16 Тираж 50 экз. Заказ № ГОУВПО «Ивановский государственный энергетический университет имени В.И. Ленина» 153003, г. Иваново, ул. Рабфаковская, 34. Отпечатано в УИУНЛ ИГЭУ. 20