• Компоненты 1 wire. Выносим в отдельный поток

    04.09.2020

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

    В настоящее время Бенукс поддерживает следующие разновидности оборудования:

    Оборудование с доступом по WiFi на базе модуля ESP8266


    В последнее время широкую популярность получили недорогие малогабаритные модули с доступом по Wi-Fi на базе чипа ESP8266, который представляет собой 32-битный контроллер со схемой обвязки. Помимо большого разнообразия аппаратных модификаций этого модуля, существует и много вариантов прошивок для контроллера. Система Бенукс поддерживает прошивку от "homes-smart", в которой обмен происходит по Http-протоколу. Есть модули со встроенной внутренней антенной, есть модули с подключением внешней антенны. Небольшие габариты модулей позволяют их легко встраивать в другие блоки или аппаратуру, а так-же в интерьер жилища или офиса. В системе Бенукс используются модули с прошивкой от homes-smart.ru

    Одним из удачных законченных решений является оборудование интернет-магазина radioseti.ru в котором датчики и модули управления размещены в корпусах и готовы к использованию. В номенклатуре датчики температуры, влажности, протечки воды. Для управления оборудованием существуют модули в корпусах для монтажа на DIN-рейку. Начальная настройка модулей производится через ВЭБ-интерфейс, а затем в программе Бенукс это оборудование заводится в справочник устройств и используется в программе наравне с оборудованием других протоколов и технологий.

    Основой сети 1-Wire является так называемый "мастер линии" - адаптер



    Что значит "облегчённый"? - При малом количестве датчиков и небольшой длине микросети в качестве адаптера можно использовать очень простенькие схемы из нескольких деталей. В интернете можно найти несколько вариантов таких схем. Схема одного из них приведена: Этот адаптер используется для подключения около 3 устройств при длине линии не более 5 метров.

    Если же организация 1-Wire-системы на базе персонального компьютера связана с особыми трудностями (большая длина линии, большое количество ведомых устройств, плохое качество кабеля или сложная топология, много помех и т.п.), то наиболее оптимально использование интеллектуального адаптера для COM-порта типа LINK. Он реализован на базе микропроцессора. При этом устройство полностью эмулирует со стороны последовательного порта работу популярного адаптера DS9097U производства Dallas Semiconductor и, таким образом, поддерживает все разработанное ранее для персональных компьютеров программное обеспечение. Но главное, что благодаря собственным интеллектуальным ресурсам этот адаптер реализует льготный режим работы однопроводных устройств на проблемных 1-Wire-линиях, в условиях сложной помеховой обстановки. LINK многократно улучшает механизм активной подтяжки на линии, что позволяет действительно получать идеальные сигналы обмена при длинах кабеля до 300 метров и числе сопровождаемых однопроводных компонентов до 250 шт, а использование процессором такого адаптера специальных алгоритмов цифровой фильтрации многократно улучшает устойчивость обслуживаемой 1-Wire-линии к электромагнитным помехам, шумам и отражениям сигналов.

    Примечание: если USB-адаптер подключается к компьютеру через USB-расширитель, то обычно количество ошибок 1-Wire увеличивается, поэтому такое подключение нежелательно.


    Конструктивно микросхема может устанавливаться в стандартную телефонную розетку со схемой стабилизатора внешнего питания. Приводим внешний вид модуля в сборе.

    Конструктивно микросхема может устанавливаться в стандартную телефонную розетку со схемой стабилизатора внешнего питания. Приводим внешний вид модуля в сборе.



    схема подключения к цифровому модулю внешних герконовых датчиков или датчиков типа "сухой контакт" показана
    схема подключения к цифровому модулю цепи для управления оборудованием показана

    В системе Бенукс может применяться восьмиканальная микросхема DS2408 в качестве как цифрового ввода, так и управления оборудованием. Причём часть каналов может использоваться для ввода, а часть для вывода.

    Датчик питания 220V.

    Один из вариантов применения цифрового универсального модуля - контроль наличия напряжения. Для этого стандартный модуль дополняется оптроном типа АОТ166А и двумя резисторами на 110 Ком. Благодаря тому, что используемый оптрон имеет широкий диапазон входного тока, на вход полученного модуля допускается подавать напряжение от 12 до 380 Вольт. А наличие двух встречно включенных светодиодов внутри оптрона позволяет подавать напряжение любой полярности, а значит как переменного тока, так и постоянного. На фото показан модуль, используемый в качестве датчика наличия 220В. Кроме примера, показанного на фото, описываемый модуль можно использовать и в других применениях, например как датчик наличия питания на электромагнитном клапане или задвижке и т.д.

    Схема подключения внешнего сигнала к модулю показана
    Стоит отметить, что если в описанном модуле использовать двухканальную микросхему DS2406P и два оптрона, то такой модуль можно использовать для контроля двух различных напряжений. Видеокоммутаторы с интерфейсом 1-Wire изготавливается на основе микросхем DS2406, DS2406P, DS2408 и DS2413. В настоящее время система "Бенукс" обслуживает следующие типы видеокоммутаторов:


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


    Четырёхканальный на основе DS2406P или DS2413. В таком коммутаторе сигналы с двухканальной микросхемы поступают на двоичный дешифратор, который управляет четырьмя электромеханическими реле. В зависимости от двоичного кода на выходе микросхемы DS2406P, включается один из четырёх видеоканалов.

    Розетка с интерфейсом 1-Wire

    Для управления всевозможными бытовыми электроприборами имеется типовая розетка 220 вольт в пластиковом корпусе. Внутри корпуса размещается плата с микросхемой DS2413P и интегральный стабилизатор для её питания. Микросхема управляет силовым симистором со схемой опторазвязки. Симистор крепится на радиаторе, что позволяет управлять нагрузками до 1000 ватт. Кроме силовой розетки, наружу корпуса выведены два гнезда RJ для подключения микросети 1-Wire. Светодиодный индикатор сигнализирует о включенной розетке. Вместо микросхемы DS2413P можно использовать DS2406(DS2406P), которая так-же позволяет управлять внешними устройствами, но имеет иное расположение выводов на корпусе.
    Ниже по тексту имеется ссылка на схему этого устройства.

    Безкорпусные сборки управления нагрузкой 220В с 1-Wire
    Для промышленного использования в системах управления рекомендуем использовать безкорпусные модули, коммутирующие нагрузки 220в. Для примера приводим модуль с электромагнитным реле.

    Датчик движения с интерфейсом 1-Wire

    Это устройство представляет собой типовой датчик движения SRP100 с дополнительной встроенной платой. На плате расположена микросхема DS2406P и интегральный стабилизатор для её питания. На один канал микросхемы заведён сигнал от датчика движения, а на второй канал - концевик, срабатывающий при открывании корпуса датчика движения. Питание датчика движения выполняется от микросети 1-Wire.
    Для того, чтобы не ограничивать пользователя использованием только датчика SRP100 и чтобы пользователь мог по своему усмотрению выбрать датчик движения из множества вариантов исходя из своих требований, используется специальный модуль для подключения любых датчиков движения с подобным интерфейсом. То есть, пользователь отдельно приобретает понравившийся ему датчик движения и подключает его к этому модулю. Единственное ограничение: чтобы датчик позволял запитывать его от напряжения +12В и тип выходного сигнала этого датчика должен быть типа "сухой контакт" или подобный. Модуль изготовлен на основе универсального двухканального цифрового ввода-вывода с дополнительным встроенным стабилизатором питания +12В. На выходную колодку этого модуля выводятся два цифровых канала и питание +12В.

    Пример подключения двухканального цифрового модуля к датчику движения SRP-100
    Датчик протечки воды с интерфейсом 1-Wire

    Это устройство представляет собой транзисторный ключ, срабатывающий от малых токов, возникающих при попадании воды на контакты сенсорной платы. Сигнал от транзисторного ключа поступает на микросхему DS2406, а затем обрабатывается системой "Бенукс".

    Датчик освещённости и влажности

    Этот модуль собран на основе микросхемы DS2438. В качестве датчика освещённости используется фотодиод ФД256, а измерителем влажности является дактчик HIH-4000-004 фирмы Honeywell Inc.

    Модуль аналоговых сигналов на основе DS2438

    Основное назначение этого модуля - завести типовой аналоговый сигнал (0-10В) в персональный компьютер для цифровой обработки. Источником такого сигнала может быть датчик влажности, датчик давления (водяного, атмосферного и т.д.), датчик усилия, потребляемого тока и т.д., т.е. любой датчик, у которого выходной сигнал имеет диаппозон от 0 до 10 вольт.
    Этот модуль собран на основе микросхемы DS2438. Особенность этой микросхемы в том, что в ней имеется два входа для аналоговых сигналов. На первый вход подаётся сигнал от 0 до +10 вольт. На второй вход может подаваться двуполярный сигнал от -250 милливольт до +250 милливольт.

    Для увеличения надо кликнуть на картинке.

    Модуль-приёмник ИК-команд с передачей сигнала в 1-Wire

    Это устройство даёт возможность управлять восемью устройствами на расстоянии, с помощью ИК пульта. Сигналами с ИК пульта одна из восьми DS2401 подключается непосредственно к сети 1-WIRE. ПК с системой БЕНУКС обнаруживает активность на шине DS2401 и подает команды на включение или выключение устройств, а так же выполнение команд по заданному сценарию.
    Система Бенукс определяет микросхему DS2401 как тип iButton, поэтому допускается использование микросхем DS* с такими "групповыми" номерами: 01,04,06,08,09,11,12,20,35,45,55.
    Тем кто любит попаять. Девайс так же можно модернизировать и сделать автономное устройство, которое управляет всевозможными бытовыми электроприборами. Для этого вместо микросхем DS2401 нужно установить, согласно схеме, силовой каскад из симистров или реле. Тогда у Вас получится устройство, которое управляет восемью устройствами с ИК пульта.

    Примечание:
    Этот модуль является отдельной разработкой одного из пользователей системы "Бенукс",
    по всем вопросам обращайтесь на E-mail [email protected]

    Примечания.
    Во всех представленных выше устройствах микросхемы DS2406, DS2406P и DS2408 могут могут работать либо как цифровой датчик, либо как устройство управления, в зависимости от электрической схемы подключения. Микросхема DS2413 в системе Бенукс не используется как цифровой датчик, потому что не поддерживает команду 1-Wire "поиск активных". Эта микросхема используется только для устройства управления.
    Схемотехника большинства устройств заимствована с сайта Московской фирмы ЭлИн.
    Производители оборудования с протоколом 1-Wire

    Большой выбор датчиков и устройств с 1-Wire в Интернет-магазине www.radioseti.ru
    Кроме того, в этом же магазине можно приобрести модули ESP8266 с доступом по Wi-Fi. Более подробно о таких модулях ethernet usb (может быть использован для адаптера 1-Wire)
    Миникомпьютеры серии eBox

    Моргания лампочки и замыкание контактов - дело интересное и полезное для первых шагов. Но, как все мы помним со школы, чем нагляднее эксперимент, тем он интереснее. Я продолжу развивать проект из предыдущих серий, и сегодня мы прикрутим термодатчик 1-Wire для того, чтобы контролировать температуру в твоем многострадальном холодильнике. Того и гляди, скоро у тебя появится «умный» холодильник:).

    В предыдущих сериях

    Так как я продолжаю повествование с некоей точки, а не с самого начала, то пройдусь по тому, что уже имеется. В нашем арсенале Arduino mega2560 с поднятой ОСРВ scmRTOS . Прошивка позволяет моргать светодиодом L на плате в разных последовательностях в зависимости от «аварийного» или «нормального» состояния, а также «плеваться» в консоль грязными ругательствами (ведь ты именно такие выбрал?) в качестве уведомления об изменении состояния. «Нормальность» состояния определяется замкнутостью контактного датчика. Последовательность можно менять из консоли. Исходники проекта выложены на GitHub .

    Вдохнем новизны

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

    Так в чем проблема? А вот в чем: можно было взять обычный резистивный термодатчик и использовать встроенный АЦП микропроцессора. Но! Я взялся за этот проект с правилом: минимум паяльника и дополнительного нестандартного оборудования, все из коробки. При использовании же резистивного термодатчика необходимо городить делитель напряжения, а значит, требуется минимальное, но погружение в схемотехнику. Так что этот вариант отпал.

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

    Для того чтобы начать сессию обмена данными, необходимо сформировать сигнал «сброс». Для этого мастер передает в линию данных 0 на время не менее 480 мкс. После чего мастер отпускает линию данных и начинает слушать линию. За счет резистора подтяжки линия данных установится в 1. Если на линии присутствует устройство (датчик), то он передаст мастеру подтверждение сброса, для этого он удерживает линию данных в 0 на время 60–240 мкс. Считав состояние линии, мастер узнает о присутствии на шине устройств, готовых к обмену.

    1-Wire обладает еще одной особенностью: передача битов осуществляется не уровнями сигнала, а временными задержками. Таким образом, чтобы передать 1, необходимо установить в линии 0 и держать его 15 мкс, после чего отпустить линию, которая за счет подтягивающего резистора перейдет в уровень 1. Чтобы передать 0, необходимо установить в линии 0 на 15 мкс, а затем держать 0 на линии еще 60–120 мкс.

    Честный 1-Wire

    Предложенный вариант реализации интерфейса 1-Wire обладает одним недостатком. Точнее, двумя.

    1. Он жрет ресурсы (как любая программная эмуляция).
    2. Он неустойчив к помехам.

    С первым недостатком можно еще как-то мириться, хотя по мере роста проекта ресурсов остается все меньше. Со вторым недостатком в боевом софте надо бороться семплированием сигнала. Что такое семплирование? Допустим, бит 1 передается 6 мкс. Для того чтобы точно быть уверенным, что это 1, а не какая-то наводка, необходимо несколько раз в течение этих 6 мкс измерить состояние входного сигнала. Чем больше измерений ты проведешь, тем точнее будет твой результат и уверенность в правильности принятия данных. Однако 6 мкс - это ооочень мало, тут возникает вопрос разумности и аппаратных возможностей. С разумностью, хочется верить, у тебя все в порядке, а вот с возможностями в нашем микропроцессоре неважненько. Первое, что приходит в голову, - натравить таймер с частотой 1 мкс и получить хотя бы пять семплов. Проблема только в том, что в данном железе на такую частоту настроить таймер не представляется возможным. Настроить-то можно, но толку от этого не будет, так как надо учитывать накладные расходы на «проваливание» в прерывание, сохранение регистров, выход из прерывания. Другой вариант - мотание в цикле, но опять вопрос во времени. Такт процессора на частоте 16 МГц длится 1/16 мкс, то есть у тебя есть всего 16 тактов. За это ничтожное время тебе надо прокрутить счетчик (цикл же), снять состояние сигнала, перейти к следующей итерации. С учетом оптимизации и прочих накладных расходов на СИ сделать это практически нереально. Выход один - использовать аппаратную микросхему интерфейса 1-Wire, подключаемую, например, по SPI-интерфейсу.

    Железо

    Итак, выбор пал на термодатчик компании Maxim , модель DS18S20 (что под рукой оказалось). Если ты полез гуглить, сразу предупреждаю: подавляющее количество примеров применения термодатчиков с Arduino построено на базе DS18B20 . Он немного отличается, но в рамках нашего проекта разницы никакой.

    Работа термометра

    Для работы с термометром по 1-Wire необходимо выполнить (по крайней мере для знакомства с ним) всего три действия:

    • запустить измерение;
    • подождать время, необходимое АЦП термометра, чтобы зафиксировать показание;
    • считать показание из памяти термометра.

    Как и с обычными АЦП, чем выше точность, тем больше времени требуется для проведения измерения, тем дольше нужна задержка перед попыткой чтения показаний.

    WARNING

    Будь внимателен при подключении термодатчика, при ошибке подключения ты можешь его сжечь. Если сам не силен, попроси умеющего товарища спаять тебе проводки, ничего зазорного в этом нет:).



    Теперь, когда с подключением ты более или менее разобрался, приступим ко второй части нашего остросюжетного боевика. Нужно писать софт. Я, как и большинство программистов, создание ленивое, поэтому я вопросил у Всезнающего Гугла, что уже придумано до нас и надо ли изобретать велосипед.

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

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

    Ось зла

    Предварительные причесывания

    Начал я с простого - заставил хотя бы собираться библиотеки. Обе библиотеки используют ардуиновские функции, поэтому пришлось внести некоторые изменения. Для начала добавим файл OneWire_Port.h в проект (он будет портом библиотеки OneWire для проекта) и приинклюдим его в файл OneWire.h , а затем начнем причесывание. А именно:

    • OneWire построена таким образом, что ей при создании экземпляра объекта скармливается номер ноги, на которой у тебя будет линия 1-Wire. Это тащит за собой кусочек мрака из недр библиотек Ардуино, поэтому я пошел простым путем и зашил хардкодом в конструктор класса OneWire нужные мне ноги. Да, теряем универсальность, но я пока не вижу применения с двумя шинами 1-Wire (хотя... ну да не сейчас). Исходя из схемы платы, я выбрал ногу PA6, которая выходит на колодку DIGITAL пин 28. PORTA &= ~_BV(PA6); DDRA &= ~_BV(PA6); bitmask = _BV(PA6); baseReg = &PINA;
    • OneWire использует задержки в микросекундах для реализации протокола 1-Wire, подсунем библиотечную функцию _delay_us() в файл OneWire_Port.h #define delayMicroseconds(usec) _delay_us(usec)
    • OneWire любит отключать прерывания во время выполнения очень маленьких задержек (несколько микросекунд), и я ее понимаю. Но сразу же оглянемся и подумаем о том, что у нас все-таки будет ось. А значит, включение прерываний разумнее проредить немного, чтобы случайно не потерять контекст выполнения на неопределенное время. Библиотека использует ардуиновские функции работы с прерываниями, подсунем ей стандартные через файл OneWire_Port.h: #define noInterrupts() __builtin_avr_cli() #define interrupts() __builtin_avr_sei()
    • В драйвере термодатчика используется задержка, измеряемая в миллисекундах. Тут разумнее использовать вызов функции ОС, особенно учитывая размер этих задержек. Для замены sleep на вызов функции ОС пришлось немного погородить макросов в OneWire_Port.h , комментарии в коде. // Количество «тиков» операционной системы (переключений контекстов) в секунду #define __CLOCKS_PER_SEC 1000 //Период системного таймера операционной системы #define PERIOD_TIMER_MS (1000UL / __CLOCKS_PER_SEC) // Макрос перевода миллисекунд в количество тиков операционной системы #define MSEC_TO_TICK(X) (X / PERIOD_TIMER_MS) #define delay(msec) OS::sleep(MSEC_TO_TICK(msec))

    Внедрение агента в банду

    Теперь либы собираются, настал черед вкрутить их в код проекта. Как удостовериться, что оно заработало? Элементарно: создаем экземпляр класса OneWire, затем DallasTemperature с параметром шины, на которую подключены термодатчики, и начинаем все это активно использовать.

    В проекте уже есть простенький терминал, добавляй туда команду, по которой будет производиться опрос термодатчика и вывод значения в терминал. Для удобства я добавил еще одну команду - поиск термодатчиков, по этой команде опрашивается линия, ответившие термодатчики заносятся в «кеш» библиотеки, после чего для найденных термодатчиков можно получить адреса и вывести их в терминал. Отмечу отдельно алгоритм поиска устройств на линии, очень увлекательный процесс, описан подробно в документации к iButton в разделе Network Capabilities.

    Выносим в отдельный поток

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

    Немного подумав, я решил, что лучше сделать целый класс - движок работы с термодатчиками, унаследовав его от класса process<>, чтобы все собрать в одну кучку: сделать имплементацию функции-потока, дать этой функции доступ к членам класса, выставить наружу основные функции работы с термодатчиками.

    Однако тут я уткнулся в жадность. Мне хотелось оставить возможность опроса термодатчиков из консоли и иметь сигнализацию. Сразу же возникает необходимость разделять общие ресурсы, так как теперь два потока будут дергать один термодатчик (а точнее, шину 1-Wire). Лезь в класс OneWire и добавляй ему приватного мембера OS::TMutex _mutex; .

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

    Void OneWire::open() { _mutex.lock(); } void OneWire::close() { _mutex.unlock(); }

    Затем пришлось прошерстить всю библиотеку DallasTemperature и обернуть вызовы функций работы с шиной 1-Wire в оболочку _wire->open() -> _wire->close() .

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

    Float val; AnalogState new_state; if (!TemperatureEngine::temperature_get(0, &val)) { if (state != lost && ++ lost_cntr > 10) { state = lost; TAlarmMessage msg; msg.state = state; msg.src = TAlarmMessage::AI_ALARM; AlarmMessageBox.push(msg); } continue; } lost_cntr = 0; if (val < low_value) new_state = low; else if (val > high_value) new_state = high; else new_state = normal; if (new_state != state) { TAlarmMessage msg; msg.state = new_state; msg.src = TAlarmMessage::AI_ALARM; AlarmMessageBox.push(msg); } state = new_state;

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

    Тут-то я и наступил на грабли. Я забыл про функцию инициации процесса измерения DallasTemperature::requestTemperatures . В ней стоят задержки для того, чтобы подождать, пока термодатчик производит измерение. Но я поставил _wire->close() перед этими задержками. В итоге я получил странную картину: при запросе из терминала начинали скакать показания термодатчика. А случалось вот что: поток движка термодатчиков запускал измерение, одновременно приходил я со своим запросом по терминалу, и в итоге мы оба читали какие-то неинициализированные значения.

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

    Остается лишь добавить в поток обработки аварийных сообщений кейсы нового источника аварий.

    Template<> OS_PROCESS void TAlarmTask::exec() { for(;;) { TAlarmMessage msg; // Тут мы уснем до получения аварийного сообщения AlarmMessageBox.pop(msg); // Получили сообщение, теперь обработаем его if (TAlarmMessage::DI_ALARM == msg.src) { // Обработка аварий цифрового датчика }else if(TAlarmMessage::AI_ALARM == msg.src) { // Здесь вставляем код обработки аварий аналогового (термо)датчика } } }

    Испытания огнем

    Конечно же, огонь применять никто не собирается, пожаров нам только не хватает. Но полевые испытания провести стоит. Так как датчик достаточно инертный, то я решил извлечь хоть какую-то пользу от выделяемого компьютером тепла и засунул термодатчик под поток воздуха от процессорного кулера. Ура, температура поползла вверх!

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

    Заключение

    Вот мы и сделали еще один сложный шаг к защите содержимого твоего холодильника не только от врагов, но и от разморозки. Теперь в твоем арсенале есть термодатчик, а так как используется линия 1-Wire, то ты уже самостоятельно можешь навесить и два, и три, и более термодатчиков. Надеюсь, что материал этой статьи раскрыл для тебя новые и интересные возможности, казалось бы, игрушечного Arduino и подогрел интерес к программированию встраиваемых систем. Помни, что только написание кода даст тебе знание и умение. Тренируйся, больше практики, старайся воплощать самые свои сумасшедшие идеи, и знание придет. Пиши, пиши, пиши! Железный привет, RESET:).

    DANGER

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

    WARNING

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

    WARNING

    Цель этой статьи - рассказать, как использовать эти датчики (или другие устройства сети) в суровых "полевых условиях". Не секрет, что на столе под лампой светлой цифровой датчик DS18B20 или его бюджетный брат DS18S20 замечательно работает с минимальным обвязом со стороны микроконтроллера в т.н. двухпроводной схеме:







    Дополнительная выделенная линия питания сулит нам следующие "бонусы":
    1. Длина сетевого кабеля 100 метров и более;
    2. Количество одновременно подключенных датчиков - не менее 32шт.;
    3. Разрешающая способность АЦП - 0,0625 °C и точность измерения - 1°C.

    Однако, еще остается борьба с помехами на длинных линиях связи. Простейшей защитой является включенный в обратном направлении диод Шоттки между линией данный и общим проводом, именно так советует поступать Brian C. Lane , автор популярного проекта DigiTemp . Мы лишь немного расширим данное решение для трехпроводной схемы включения:


    L1, L2 - фербиды BLM21AG221SN1D - индуктивности для защиты от высокочастотных помех, возникающих при коммутации сильноточных потребителей;

    C1 - керамический конденсатор, естественный спутник ножек питания цифровой микросхемы;

    IC1 - собственно цифровой датчик температуры DS18B20Z в корпусе SOIC8.

    Все компоненты - SMD (0805 и SOT23) для уменьшения размера платы датчика:



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


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


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

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

    Трактат о проводочках кабеля

    Самой распространенной ошибкой при построении сети 1-Wire является выбор в пользу Ethernet-кабеля Cat.5 ! Подавляющее большинство читателей скажет - "у нас все очень хорошо и бодро работает на обрезках сетевухи ". Не спорю ни в коем случае, кабель Cat.5 длиной 10..30 м вполне годится для 3-х проводного способа подключения датчиков, более того - вот вам рекомендованная схема использования народного кабеля, которую и сам использую на даче для водоснабжения дома:





    "Ну таки и в чем дело?" - скажет проницательный читатель. А вот в чем: в кардинальном различии "физики и логики" сетей Ethernet и 1-Wire. Не вдаваясь в сложности организации сети Ethernet, просто прошу поверить (и с мультиметром про верить) в то, что из-за значительного падения напряжения на длинных и весьма тонких проводах кабеля Cat.5e датчику сети 1-Wire банально не хватает напряжения питания !

    1-Wire — однопроводный низкоскоростной интерфейс, разработанный фирмой Dallas Semiconductor (сейчас она является подразделением фирмы MAXIM) для двунаправленного обмена данными с различными периферийными устройствами (датчики температуры, электронные ключи, аккумуляторы).

    Это довольно дешёвый и надёжный интерфейс, для устройств, не требующих быстрого обмена большим количеством данных. Он позволяет обмениваться данными на скорости до 15,4 кбит/с в обычном режиме и до 125 кбит/с в режиме «overdrive» (в статье мы будем рассматривать обычный режим). При использовании специальных проводов (IEEE1394 — Firewire) расстояние передачи данных может составлять до 300 м.

    Как физически устроен сам интерфейс? Да очень просто, — смотрим рисунок слева. В микрухах реализованы порты 1-wire, которые состоят из высокоомного приёмника и передатчика на полевом транзисторе с открытым стоком, подключенные к одному общему выводу (вывод порта 1-wire). Типовой ток утечки закрытого выходного полевика составляет 5 мкА. Снаружи реализована шина 1-wire. Она состоит из одного сигнального провода (поэтому интерфейс и назван однопроводным), подтянутого через резистор (типовое значение 5,1 кОм) к питанию (к плюсу) и одного провода, подключенного к общему проводу (то есть к минусу).

    Обмен данными осуществляется по принципу Master-Slave (ведущий-ведомый), соответственно устройства с интерфейсом 1-wire бывают двух типов: «Master» (ведущее устройство) и «Slave» (ведомое устройство). Как правило в качестве «Мастера» выступает контроллер (или компьютер, через специальное устройство сопряжения), а в качестве «Слэйвов» — различные периферийные устройства.

    На одну шину 1-wire можно подключить множество (до 2 48) slave-устройств, поскольку каждое такое устройство имеет уникальный 48-битный серийный номер, который вместе с байтом «CRC» и байтом «family code» (определяющим тип устройства) образует уникальную 64-битную метку. Ведущий на шине 1-wire должен быть один.

    Питаться устройства с интерфейсом 1-wire могут как от независимого источника, так и от сигнального провода. Если в устройствах используется КМОП-архитектура, то диапазон напряжений питания может быть довольно широкий, но, при подключении на одну шину, питание всех устройств должно быть примерно одинаковым (чтобы уровни напряжения правильно распознавались приёмниками). В основном используются TTL-уровни (соответственно, пятивольтовое питание). Ещё хотелось бы добавить, что выход, реализованный на полевике с низким током утечки, — это специальная заточка под питание от сигнальной линии. Если у вашего устройства будет внешнее питание — никто не мешает вам организовать порт 1-wire, например, на биполярном транзисторе с открытым коллектором. Аналогично, резистор 5,1 кОм — тоже не догма, его значение может варьироваться в зависимости, например, от ёмкости линии.

    Теперь давайте подробнее расмотрим механизм передачи данных на уровне протокола.

    Во первых, необходимо отметить, что всем обменом на шине управляет «Мастер». Только мастер решает — когда и с каким устройством он хочет поговорить и когда устройство должно посылать или принимать очередной бит. «Слэйвы» синхронизируются с «Мастером» по спаду на сигнальной линии и далее отсчитывают интервалы до тех или иных своих действий по внутреннему счётчику. Единственное самостоятельное действие, разрешённое «Слэйву» — это выдача сигнала «Presence» (импульс присутствия), который он выдаёт сразу после подключения на шину, чтобы обозначить своё присутствие. Кроме этого, «Мастер» может сформировать на шине сигнал «Ресет», после которого все «Слэйвы» на шине должны ресетнуться и также ответить «Мастеру» сигналом «Presence».

    Диаграммы сигналов «Reset» и «Presence» приведены на рисунке слева. Синим цветом обозначено состояние активности «Мастера» (когда он притягивает уровень на шине к нулю), красным цветом обозначено состояние активности «Слэйва» (когда «Слэйв» притягивает уровень на шине к нулю), серым цветом обозначено состояние, когда «Мастер» и «Слэйв» неактивны (сигнал через резистор подтянут к питанию).

    Чтобы всё было понятно — опишем то, что нарисовано на этом рисунке, словами. Итак, чтобы сформировать сигнал «Reset», — «Мастер» должен притянуть уровень на шине к нулю на время не менее 480 мкс и не более 960 мкс (480 мкс ≤ T RSTL < 960 мкс). После этого он должен отпустить шину и, не менее, чем на 480 мкс, прекратить свою активность на шине (T RSTH > 480 мкс). «Слэйвы», не ранее, чем через 15 мкс, но и не позднее, чем через 60 мкс после того, как «Мастер» отпустит шину (15 мкс < T PDH < 60 мкс), должны сформировать на шине низкий уровень (это и есть сигнал присутствия), длительностью от 60 до 240 мкс (60 мкс < T PDL < 240 мкс), после чего они также отпускают шину.

    После того как «Мастер», получив сигнал «Presence», понял, что на шине есть «Слэйвы» — он может начинать с этими «Слэйвами» обмен данными. Данные по шине передаются побитово, младшим битом вперёд. 0 и 1 кодируются уровнями напряжения на сигнальном проводе (0 — низкий уровень напряжения, 1 — высокий уровень напряжения).

    Каждый бит передаётся в установленном временном промежутке, называемом тайм-слотом. Начало каждого тайм-слота (как я уже говорил) определяет «Мастер», притягивая шину к низкому уровню. Время между тайм-слотами не регламентировано, то есть один бит можно передать, условно говоря, сейчас, а другой, скажем, через 5 минут, ничего страшного при этом не произойдёт и данные не потеряются.

    Выборка данных «Слэйвом» и «Мастером» происходит в разные временные интервалы, относительно начала тайм-слота, поэтому мы отдельно рассмотрим варианты передачи данных в направлениях «Мастер» ⇒ «Слэйв» (тайм-слот записи) и «Слэйв» ⇒ «Мастер» (тайм-слот чтения).

    Тайм-слот записи показан на рисунке слева. Как и ранее, синим цветом обозначена активность «Мастера», красным — активность «Слэйва» и серым — моменты, когда линия подтянута к питанию через резистор.

    1. 1 мкс≤T LOW1 <15 мкс — время, в течении которого шина притянута к нулю при передаче 1
    2. 60 мкс≤T LOW0
    3. 60 мкс≤T SLOT <120 мкс — длительность тайм-слота
    4. T REC >

    Поясню этот рисунок несколько подробнее. Итак, для того, чтобы «Слэйв» распознал начало тайм-слота — «Мастер» должен удерживать сигнал на шине равным нулю в течении времени T LOW1 . После этого, но не позднее 15 мкс от начала тайм слота, «Мастер» должен установить на шине уровень сигнала, соответствующий передаваемому биту. То есть, если он хочет передать 1, то он должен отпустить шину через какой-то промежуток времени от начала тайм-слота, чтобы до начала «Окна выборки» сигнал успел установиться в единицу. Если же «Мастер» хочет передать ноль, то он просто должен так и оставить линию притянутой к нулю. В течении «Окна выборки» сигнал на линии не должен меняться, потому что в любой момент в течении этого времени сигнал может быть считан «Слэйвом». «Окно выборки» заканчивается через 60 мкс от начала тайм-слота. После окончания окна выборки и до окончания тайм-слота — «Мастер» должен отпустить шину, чтобы сигнал вернулся к высокому уровню. Понятно, что отпускать шину актуально только в том случае, если «Мастер» передавал 0, если же он передавал 1, то ему нужно просто дождаться окончания тайм-слота.

    Тайм-слот чтения показан на рисунке справа.

    1. 1 мкс≤T LOWR <15мкс — время, в течении которого шина притянута к нулю
    2. T RDV =15 мкс — момент окончания «Окна выборки»
    3. 0 мкс≤T RELEASE <45 мкс — время, в течении которого «Слэйв» должен отпустить шину
    4. 60 мкс≤T SLOT <120 мкс — длительность тайм-слота
    5. T REC >1 мкс — интервал между тайм-слотами

    Здесь всё происходит следующим образом: «Мастер» притягивает шину к нулю, чтобы обозначить начало тайм-слота. Пока линия притянута к нулю — «Слэйв» должен либо тоже притянуть линию к нулю, если хочет передать ноль, либо оставить линию свободной, если хочет передать единицу. После того, как «Мастер» отпустит шину (через время T LOWR), — начинается «Окно выборки» и «Мастер» может считывать с шины значение бита. Далее, после окончания «Окна выборки», «Слэйв» должен в течении времени T RELEASE отпустить шину.

    Хотелось бы уточнить, что «Мастер» должен не сразу читать уровень на шине после того, как отпустит её, а через некоторое время, которое необходимо для того, чтобы исключить влияние ёмкости линии (если «Слэйв» передаёт 1, то, из-за наличия этой ёмкости, напряжение не может вырасти мгновенно после отпускания шины «Мастером»). С учётом этого, «Мастеру» наиболее целесообразно сделать промежуток, в течении которого он удерживает шину на низком уровне, как можно короче (чтобы увеличить себе окно выборки), а читать данные с шины как можно ближе к концу «окна выборки» (таким образом можно будет работать с линиями, имеющими бОльшую ёмкость).

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

    1. Эмуляция электронного ключа 1-wire на ATTiny2313


    Последовательные интерфейсы фактически стали основными в современных приборных и бортовых сетях. Один из наиболее широко используемых интерфейсов такого рода – 1-Wire, представленный в 1990-х годах компаний Dallas Semiconductor (ныне –Maxim/Dallas). Этот интерфейс использует каждый, кто с ключом-таблеткой подходит к двери подъезда. Несмотря на солидный возраст, 1-Wire не утратил актуальности и сегодня благодаря своей универсальности, простоте и удобству использования.

    Как устроен 1-Wire Интерфейс 1-Wire был предложен фирмой Dallas Semiconductor в конце 90-х годов прошлого века. Системы 1-Wire привлекательны благодаря легкости монтажа, низкой стоимости устройств, возможности распознавать устройство при подключении к функционирующей сети, большому числу устройств в сети и т.д.

    Типичная система 1-Wire состоит из управляющего контроллера (мастера или ведущего) и одного или нескольких устройств (ведомых), присоединенных к общей шине


    Устройства подключаются к шине по схеме с открытым стоком и подтягивающим резистором (см. рис.1). Уровень сигналов в шине – от 3 до 5 В. В пассивном состоянии в линии поддерживается высокий уровень напряжения. Все сигналы формируются с помощью замыкания сигнальной шины на землю (низкий уровень напряжения).

    Большинство устройств 1-Wire поддерживают две скорости передачи данных: стандартную – около 15 кбит/с и повышенную (overdrive) около 111 кбит/с. Понятно, что чем выше скорость, тем больше ограничений на длину шины и число подключаемых к ней устройств. Режим передачи данных по шине 1-Wire полудуплексный: мастер и ведомые устройства передают данные по очереди. Каждая транзакция через интерфейс 1-Wire начинается с того, что мастер передает импульс Reset. Для этого он переводит напряжение в шине на низкий уровень и удерживает его в этом состоянии в течение 480 мкс

    Затем мастер отпускает шину, и подтягивающий резистор возвращает напряжение к высокому логическому уровню. Все ведомые
    устройства, обнаружив сигнал Reset и дождавшись его окончания, передают свой сигнал – Presence. Он представляет собой сигнал низкого уровня длительностью 100 200 мс. Устройство может генерировать сигнал Presence и без импульса Reset например, таким способом оно сообщает о
    себе при подключении к шине

    После передачи импульса Presence устройство 1-Wire готово к приему команд. Весь информационный обмен в шине происходит под управлением мастера. Для передачи каждого бита выделяется специальный временной промежуток (таймслот) длительностью порядка 80 мкс. В начале каждого таймслота
    мастер переводит линию на нулевой уровень. Если далее мастер хочет передать 0, он удерживает напряжение на низком уровне как минимум 60 мкс (рис.3а). При передаче единицы мастер удерживает нулевое напряжение 5 – 6 мкс, азатем отпускает линию и выжидает примерно 60 мкс до начала формирования следующего тайм-слота

    Если мастер ожидает данные от ведомых устройств, он также обозначает начало тайм-слота, обнуляя линию на 5 – 6 мкс, после чего перестает удерживать низкое напряжение и в течение короткого времени слушает линию. Если устройство хочет передать ноль, оно само обнуляет линию сразу после регистрации импульса начала тайм-слота. Если устройству нужно передать единицу, оно никаких действий не производит. Отметим, что приведенные
    значения временных интервалов соответствуют стандартной скорости передачи данных через интерфейс 1-Wire. В режиме overdrive эти интервалы соответственно уменьшаются.

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

    Формат команд прост – идентификатор команды (1 байт), за которым могут следовать данные (идентификатор устройства, полезные данные и т.п.). Все устройства в сети знают длину каждой команды.

    Последовательность инициализации шины 1-Wire

    Информация о значении битов в адресах устройств 1-Wire

    У каждого устройства 1-Wire есть 64-разрядный идентификатор (ID). Он состоит из 8-разрядного кода семейства, который идентифицирует тип устройства и поддерживаемые им функции, 48-разрядного серийного номера и 8-битного поля кода циклического избыточного контроля (CRC-8). ID вводится при изготовлении устройства и хранится в ПЗУ. Фирма Maxim гарантирует, что один раз использованный адрес никогда не повторится в другом устройстве. В самом деле, 48 бит – это 2,81 1014 различных чисел. Если производить 1000 миллиардов (1012) различных устройств ежегодно, то все серийные номера можно использовать не ранее чем через 281 год и это только для одного семейства.

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

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

    Но чтобы начать работу с определенным устройством, мастер должен знать его ID. Если в системе только одно ведомое устройство, его адрес можно определить с помощью команды READ ROM. В ответ на команду READ ROM устройство передает свой 64-битный адрес

    Передача информационных битов по шине 1-Wire: а – мастер передает сигналы, б мастер считывает сигналы

    Если же в системе несколько устройств с неизвестными ID, попытка спользовать команду READ ROM приводит к коллизии. В этом случае для пределения адресов используется специальный алгоритм поиска, в основе которого лежит команда SEARCH ROM . Мастер передает команду SEARCH ROM. В ответ все устройства, подключенные к шине, высылают младший бит своего адреса. Свойства шины 1-Wire таковы, что при одновременной передаче сигналов всеми устройствами результат будет равен логическому

    Чтение адреса устройства

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

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

    Способы использования микросхемы DS2490: в составе внешнего USB – 1-Wire адаптера (а); внутри главного компьютера (б); в составе USB-хаба (в)


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

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

    Не менее важно, что сеть 1-Wire относится к самосинхронизирующимся, т.е. не требует отдельной линии для передачи тактовых сигналов. И, конечно, огромное число ID подключаемых устройств выгодно выделяет ее на фоне других последовательных сетей.

    Элементная база

    Для реализации интерфейса 1-Wire фирма Maxim/Dallas предлагает ряд устройств. В роли мастера интерфейса может выступать как ПК, так и специализированные микроконтроллеры. Соответственно, в ассортименте Maxim/Dallas присутствуют устройства, которые обеспечивают переход к 1-Wire интерфейсу от стандартных интерфейсов компьютера (например, USB и RS232), управляющего работой устройств 1-Wire. Так, микросхема DS2490 служит мостом между интерфейсами USB и 1-Wire . DS2490 используется в системах 1-Wire несколькими способами: входит в состав адаптера USB – 1-Wire, который подсоединяется к USB-порту главного компьютера напрямую кабелем или через USB-хаб (рис.5а); встраивается в главный компьютер (рис.5б) или же в USB-хаб.

    Домофонный ключ с iButton


    Некоторые устройства могут не только соединять 1-Wire с другими интерфейсами, но также брать на себя часть функций мастера шины 1-Wire. Одно из таких устройств – DS2482-100. Это мост между интерфейсами I2C и 1-Wire. Микросхема DS2482-100 преобразует протоколы между управляющим I2C микроконтроллером (мастером) и ведомыми 1-Wire устройствами. По отношению к этим устройствам DS2482-100 выступает в роли мастера. С помощью встроенных таймеров DS2482-100 формирует фронты передаваемых по шине сигналов, снимая эту нагрузку с управляющего микроконтроллера. Для того чтобы оптимизировать форму сигналов, DS2482-100 контролирует скорости нарастания и уменьшения напряжения в линии и предоставляет дополнительные программируемые функции, которые помогают согласовать параметры сигналов и особенности ведомых устройств.

    Микросхема DS2482-800 аналогична по функциям DS2482-100, но может работать с восемью шинами 1-Wire. В качестве моста между интерфейсами RS232 и 1-Wire можно применять микросхему DS2480B. Устройства 1-Wire соединяются с помощью витой пары различных типов или даже обычным телефонным проводом.

    Некоторые применения 1-Wire

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

    Наличие уникальных 64-битных адресов позволяет широко использовать устройства 1-Wire в системах аутентификации. Здесь они часто применяются в устройствах iButton. Это микросхема с введенным на этапе производства 64-битных адресом, заключенная в круглый корпус из нержавеющей стали диаметром 16 мм (MicroCAN). Такие устройства функционируют, например, в домофонных ключах.

    Микросхемы с поддержкой 1-Wire (например, DS2401, DS2431, DS28E01-100) используются также для идентификации картриджей принтеров, медицинских сенсоров, емкостей с реагентами и др. Преимущество микросхем 1-Wire в том, что для контроля идентифицируемого устройства нужен всего один контакт. Такие микросхемы заключены в специальный плоский корпус (SFN – Single Flat No lead) размером 6 × 6мм, который облегчает их присоединение к устройству.

    Еще одно распространенное применение 1-Wire – системы автоматизации. В первую очередь это системы многоточечного измерения температуры различных сред и мониторинга теплового режима помещений. Температуру можно измерять датчиками производства той же Maxim/Dallas. Наиболее популярный из них – цифровой термометр DS18S20. Он имеет разрешение 9 бит и измеряет температуру в диапазоне от -55 до 125°C. Точность измерений составляет 0,5°C в диапазоне -10…85°C. Поскольку каждый термометр, как и любое устройство 1-Wire, имеет уникальный 64-битный адрес, к одной шине 1-Wire можно подключать множество таких приборов.

    Таким образом, благодаря своим выигрышным возможностям – один провод для передачи данных и управления устройствами, подсоединение устройств через один контакт, питание подключенных устройств по проводу передачи данных, наличие у каждого устройства уникального адреса, низкая стоимость
    элементной базы – интерфейс 1-Wire широко представлен в самых различных изделиях современной электроники.

    Похожие статьи