Бытовые электроприборы

Датчик температуры с интерфейсом 1 wire. Монтаж линии датчиков (1-wire)

Датчик температуры с интерфейсом 1 wire. Монтаж линии датчиков (1-wire)

Информационное взаимодействие с "таблетками"?логгерами iButton и любая их поддержка осуществляется посредством т.н. 1-Wire-интерфейса, разработанного в конце 90?х годов фирмой Dallas Semiconductor, которая с 2001 году является частью компании Maxim Integrated. Этот интерфейс регламентирован разработчиками для применения в четырех основных сферах?приложениях:

  • обслуживание устройств, упакованных в специальные корпуса can F# (ранее MicroCAN), для решения задач идентификации, аутентификации, авторизации, защиты информации, контроля доступа, обеспечения электронных платежей, переноса или преобразования информации (технология iButton),
  • программирование встроенной памяти интегральных компонентов,
  • идентификация элементов оборудования и защита доступа к ресурсам электронной аппаратуры,
  • элементы и системы автоматизации (технология 1-Wire-сетей).

Первое из этих направлений, связанное в том числе с обслуживанием "таблеток"?логгеров iButton, очень широко распространено в мире, как и сами устройства iButton (подробнее см. здесь). Второе с успехом обеспечивает возможность легкой перестройки функций полупроводниковых компонентов, производимых компанией Maxim Integrated и имеющих малое количество внешних выводов. Третье позволяет обеспечить недорогую, но достаточно эффективную идентификацию и надежную защиту самого разнообразного оборудования. Что касается четвертого применения, то реализация локальных распределенных систем на базе 1-Wire-сетей является оптимальным для многих практических задач автоматизации.

Так в чем же особенность этого сетевого стандарта? Ведь в качестве среды для передачи информации по 1-Wire-магистрали чаще всего возможно использование обычного телефонного кабеля и, следовательно, скорость обмена в этом случае невелика. Однако если внимательно проанализировать большинство реальных объектов, требующих автоматизации, то больше чем для 60% из них предельная скорость обслуживания в 16,3 Кбит/с будет более чем удовлетворительной. А другие преимущества 1-Wire-технологии, такие как:

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

Основные принципы

1-Wire-net представляет собой информационную сеть, использующую для осуществления цифровой связи 1-Wire-магистраль, состоящую из шины данных (DATA) и возвратной шины (RET). Таким образом, для реализации среды обмена этой сети могут быть применены доступные кабели, содержащие неэкранированную витую пару той или иной категории, и даже обычный телефонный шнур. Такие кабели при их прокладке не требуют наличия какого?либо специального оборудования, а ограничение максимальной протяжённость кабеля 1-Wire-магистрали регламентировано разработчиками на уровне 300 м.

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

Конфигурация любой 1-Wire-сети может произвольно меняться в процессе её работы, не создавая помех дальнейшей эксплуатации и работоспособности всей системы в целом, если при этих изменениях соблюдаются принципы организации 1-Wire-интерфейса. Эта возможность достигается благодаря присутствию в протоколе 1-Wire-интерфейса специальной команды поиска ведомых устройств (Поиск ПЗУ), которая позволяет быстро определить новых участников информационного обмена. Стандартная скорость отработки такой команды составляет ~75 узлов сети в секунду.

[Каждый из 1-Wire-компонентов имеет уникальный номер (адрес), как и денежные знаки] Благодаря наличию в составе любого устройства, снабженного 1-Wire-интерфейсом, индивидуального адреса, столь же уникального, как и номер денежной купюры (отсутствие совпадения адресов для компонентов, когда?либо выпускаемых Maxim Integrated, гарантируется самой фирмой?производителем), такая сеть имеет практически неограниченное адресное пространство. При этом каждый из 1-Wire-компонентов сразу готов к использованию в составе 1-Wire-сети, без каких?либо дополнительных аппаратно?программных модификаций.

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

[Схема порта мастера 1-Wire-сети] Стандартная скорость работы 1-Wire-сети, изначально нормированная на уровне 16,3 Кбит/с, была выбрана, во?первых, исходя из обеспечения максимальной надёжности передачи данных на большие расстояния, и, во?вторых, с учётом быстродействия наиболее широко распространённых типов универсальных микроконтроллеров, которые в основном должны использоваться при реализации ведущих устройств 1-Wire-сети. Эта скорость обмена может быть снижена до любой возможной, благодаря введению принудительной задержки при передаче по магистрали отдельных битов данных (т.е. растягиванию временных слотов протокола). Однако увеличение скорости обмена в 1-Wire-сети с длиной кабеля магистрали более 1 м выше значения 16,3 Кбит/с приводит к сбоям и ошибкам. Если же протяженность 1-Wire-магистрали не превышает 0,5 м, то скорость обмена может быть значительно увеличена за счёт перехода на специальный режим ускоренной передачи (Overdrive ? до 125 Кбит/с), который допускается для отдельных типов 1-Wire-компонентов. Как правило, такой режим обмена аппаратно реализован для 1-Wire-компонентов, имеющих большой объём встроенной памяти, предназначенных для эксплуатации в составе небольшой, но качественной и не перегруженной другими устройствами 1-Wire-сети. Типичным примером таких компонентов являются микросхемы семейства iButton.

[Вид оболочки пакета OneWireViewer (для боле подробного просмотра щелкните левой кнопкой мыши)] Пожалуй, особенно привлекательным качеством 1-Wire-технологии является исключительная простота настройки, отладки и обслуживания сети практически любой конфигурации, построенной по этому стандарту. Действительно, для начала работы достаточно любого персонального компьютера, недорогого адаптера 1-Wire-интерфейса, а также свободно распространяемого компанией Maxim Integrated тестового программного пакета разработчика OneWireViewer. При наличии этого небольшого числа составляющих организация функционирования 1-Wire-сети практически любой сложности, построенной на базе стандартных 1-Wire-компонентов, реализуется буквально в течении нескольких минут. Возможности, предоставляемые программным пакетом OneWireViewer, позволяют с максимальным комфортом для разработчика идентифицировать любой 1-Wire-компонент, подключённый к 1-Wire-магистрали, ведомой компьютером через адаптер, и проверить в полном объёме правильность его функционирования в составе конфигурируемой 1-Wire-сети. Организация ведущих

Компания Maxim Integrated выпускает несколько видов адаптеров, которые позволяют наделить любой персональный компьютер функциями мастера 1-Wire-сети. К ним относятся адаптеры семейства DS9097U для COM?порта и адаптеры семейства DS9490R для USB?порта. А адаптер типа DS9481R обеспечивает возможность реализации на базе компьютера мастера 1-Wire-сети по спецификации USB 2.0. Эти устройства имеют различные функциональные возможности и конструктивные особенности, что обеспечивает разработчику максимальную свободу выбора при конструировании.

Часто в качестве ведущего 1-Wire-сети выступает не компьютер, а простейший универсальный микроконтроллер. Для организации его сопряжения с 1-Wire-магистралью используются различные программно?аппаратные методы. От простейшего, когда управляющая программа контроллера полностью реализует протокол 1-Wire-интерфейса на одном из своих функциональных двунаправленных выводов, связанных с шиной данных 1-Wire-магистрали, до вариантов, позволяющих высвободить значительные ресурсы контроллера, благодаря использованию специализированных микросхем поддержки взаимодействия с 1-Wire-сетью. Такие микросхемы подключаются к процессору, играющему роль ведущего 1-Wire-сети, через периферийные узлы ввода/вывода, входящие в состав любого универсального микроконтроллера. Например, драйвера семейства DS2482 позволяют управлять 1-Wire-сетью, используя популярный микроконтроллерный интерфейс I2C. Если же мастер 1-Wire-сети должен быть организован на базе типового узла последовательного интерфейса UART микроконтроллера, используется микросхема DS2480В. Эта микросхема, также как микросхемы DS2482 и DS2483, реализует так называемый программируемый механизм активной подтяжки шины данных 1-Wire-магистрали. Использование активной подтяжки гарантирует качественную передачу сигналов в проблемных 1-Wire-сетях с протяжённой магистралью. Также применение активной подтяжки обеспечивает увеличение нагрузочной способности ведущего по количеству обслуживаемых им ведомых абонентов сети. Кстати, адаптеры семейства DS9097U для COM?порта персонального компьютера, также построены именно на базе микросхемы DS2480В. Более того, учитывая особенности современных операционных сред Windows, именно использование микросхемы?драйвера DS2480В, которая по своей сути является управляемым по последовательному интерфейсу цифровым автоматом, способным взять на себя значительную часть функций по реализации сетевого протокола, и обеспечивает полномасштабное обслуживание 1-Wire-сети в реальном масштабе времени.

Ведомые 1-Wire-компоненты

[Кристалл 1-Wire в корпусе MicroCAN] [Так выглядят кристаллы 1-Wire-компонентов] Ведомые 1-Wire-компоненты, содержащие в составе своей схемы узел 1-Wire-интерфейса, выпускаются в двух различных видах. Либо в корпусах MicroCAN, похожих внешне на дисковый металлический аккумулятор, либо в обычных корпусах для монтажа на печатную плату. Футляр MicroCAN полый внутри. Он выполняет функцию защиты содержащегося в нём полупроводникового кристалла микросхемы с узлом 1-Wire-интерфейса, который соединён с внешним миром лишь через две, изолированные друг от друга, половинки металлического корпуса, являющиеся, по существу, контактными площадками для подключения 1-Wire-магистрали. В подобных “таблеточных” корпусах поставляются устройства iButton. Компоненты, которые предназначены для использования в составе 1-Wire-сетей, упаковываются в пластиковые корпуса, используемые для изготовления транзисторов и интегральных схем. Такой подход объясняется тем, что в отличие от устройств iButton компоненты, специально ориентированные для применения в составе 1-Wire-сетей, часто имеют более двух выводов. Помимо выводов, которые требуются для обмена данными по 1-Wire-магистрали, они располагают дополнительными выводами, необходимыми для обеспечения их питания и организации внешних цепей, связывающих такие устройства с объектами автоматизации, например, датчиками или исполнительными устройствами.

К наиболее простым ведомым 1-Wire-компонентам относятся кремниевый серийный номер DS2401 (или модифицированный вариант этого устройства с внешним питанием DS2411) и электронный ключ DS2413P, управляемый по 1-Wire-интерфейсу. Первое из этих устройств часто используется в качестве электронной метки, которая позволяет идентифицировать состояние, например, механического переключателя, коммутирующего шину данных 1-Wire-магистрали. С помощью DS2413P можно дистанционно осуществить простейшие функции переключения внешнего оборудования, изменяя состояние управляемого ключа относительно возвратной шины 1-Wire-магистрали (в настоящее время ключ DS2405 уже не поставляется, поскольку доступна более функционально совершенная замена – DS2413P).

[Термометры с 1-Wire-интерфейсом применяют во многих лабораториях мира] Однако наиболее популярными ведомыми 1-Wire-компонентами, на базе которых реализовано, пожалуй, наибольшее количество практических приложений, безусловно, являются цифровые термометры типа DS18S20 (более известные до 2001 года под обозначением уже давно снятого с производства устройства DS1820, успевшего стать международным брендом). Преимущества этих цифровых термометров с точки зрения организации магистрали, по сравнению с любыми другими интегральными температурными сенсорами, а также неплохие метрологические характеристики и хорошая помехоустойчивость, уже на протяжении двух десятков лет неизменно выводят их на первое место при построении многоточечных систем температурного контроля в диапазоне от –55°С до +125°С. Такие сенсоры позволяют не только осуществлять непосредственный мониторинг температуры в режиме реального времени, но и благодаря наличию встроенной энергонезависимой памяти температурных уставок, могут обеспечивать [Внешний вид популярнейших цифровых термометров семейства DS18#2# от Maxim Integrated] приоритетную оперативную сигнализацию в 1-Wire-сети о факте выхода контролируемого параметра за пределы заданных значений. Также поставляются более совершенные термометры DS18В20, у которых скорость преобразования определяется разрядностью результата, программируемой непосредственно по 1-Wire-интерфейсу. Цифровой код, считываемый с такого термометра, является прямым результатом измеренного значения температуры и не нуждается в дополнительных преобразованиях. Некалиброванная, но в тоже время более дешёвая версия микросхемы DS18B20 под обозначением DS1822 представляется оптимальным решением для разработчиков недорогих многоточечных систем контроля температурных процессов.

До 2010 года компания Maxim Integrated также поставляла целый спектр дискретных микросхем, оснащённых 1-Wire-интерфейсом и реализующих функции отдельных элементов систем автоматизации. Среди них: четырехканальный 16?разрядный АЦП типа DS2450, двухканальный счетчик, совмещённый с буферной памятью, типа DS2423, цифровой потенциометр на 256 градаций типа DS2890, узлы часов реального времени и календаря типа DS2415 и типа DS2417, причём последнее устройство через особый вывод прерывания, обеспечивало управление по времени переключением внешнего оборудования. Однако, как показал десятилетний опыт развития 1-Wire-сетей, для реальных объектов автоматизации, 1-Wire-компоненты, исполняющие отдельные функции, [Микросистемы, содержащие множество функциональных узлов, обеспечивают эффективную поддержку управления питанием многих портативных устройств] менее востребованы по сравнению с устройствами ориентированными на реализацию сразу нескольких функций на одном кристалле. Такие решения получили название 1-Wire-микросистем. Наиболее характерным представителем 1-Wire-микросистемы является микросхема DS2438, которая помимо узла 1-Wire-интерфейса также содержит узлы: цифрового термометра, АЦП с недифференциальным входом, токовый АЦП с дифференциальным входом, программируемый таймер, Flash?память, набор регистров для хранения данных общего назначения. Весь этот арсенал в составе одного 1-Wire-компонента позволяет легко решить, например, задачу по эффективному обслуживанию и сопровождению энергетических элементов питания различных типов. В настоящее время компания Maxim Integrated выпускает более эффективные 1-Wire-микросистемы: DS2760, DS2775, DS2776, DS2777, DS2781 и т.п.

[Сдвоенный ключ DS2406 – самый универсальный и востребованный элемент 1-Wire-сетей] Тем не менее наиболее незаменимыми «кирпичиками», лежащими в основе фундамента 1-Wire-сетей автоматизации, оказались универсальные сдвоенные адресуемые транзисторные ключи типа DS2406P. На базе этих устройств может быть реализована масса применений и, прежде всего, узлы контроля логических состояний (уровней) и схемы обслуживания датчиков «сухого контакта», а также разнообразные ключевые схемы. Таким образом, именно благодаря использованию этих компонентов осуществляется сбор дискретной информации с территориально рассредоточенных датчиков (мониторов дверей, контакторов положения арматуры, любых сенсоров, имеющих выход ДА/НЕТ, как?то: датчики положения, прохода, присутствия, пожарной и охранной сигнализации и т.д.).

[Универсальный двунаправленный порт DS2408 значительно расширяет возможности 1-Wire-сетей] Однако при всём многообразии 1-Wire-компонентов, все?таки наиболее универсальным из них является уникальная микросхема DS2408. Это двунаправленный восьмиразрядный свободно поразрядно программируемый по 1-Wire-магистрали порт ввода/вывода, который позволяет реализовать любой интерфейс между всяким цифровым устройством и 1-Wire-сетью. Использование порта DS2408 позволяет посредством 1-Wire-интерфейса обеспечить простое и гибкое управление вводом/выводом по 8 независимым каналам. Таким образом, на базе этого устройства возможна организация привода светодинамических или жидкокристаллических индикаторов и дисплеев различных видов, осуществление сканирования матричных клавиатур и дискретных датчиков самых различных типов.

Если же эксплуатация 1-Wire-сети или любого иного электронного оборудования, имеющего минимум выводов для реализации обмена данными, требует обеспечения хранения дополнительных объёмов информации, в распоряжении разработчика имеются специальные 1-Wire-компоненты, содержащие только лишь узлы ЕPROM (DS2502/ DS2505/ DS2506) или EЕPROM (DS2431/ DS2432/ DS2433/ DS28E02/ DS28E04/ DS28EC20) различных объёмов. Причём некоторые из этих микросхем имеют специальные узлы механизма шифрования SHA, что позволяет довольно просто обеспечить достаточно высокий уровень криптографической защиты данных, как при их передаче, так и при их хранении. "Таблетки" iButton и 1-Wire-сеть

[На базе устройств iButton также возможно построение 1-Wire-сетей] Целый ряд компонентов семейства iButton в корпусах MicroCAN также может быть использован в составе 1-Wire-сетей в качестве ведомых абонентов, которые решают специфические задачи идентификации, преобразования, накопления, хранения и переноса информации. Например, для реализации процедуры идентификации в системах промышленной автоматизации обычно достаточно применения распространённых носимых электронных меток DS1990A. Более сложное устройство DS1904 позволяет синхронизовать работу узлов часов/календаря микропроцессорных систем. [Устройство ТЕРМОХРОН DS1921 является удобным защищённым автономным логгером] А многоточечный температурный контроль может быть выполнен сетью из нескольких “таблеток” DS1920. Если же использовать “таблетки”-логгеры DS1921/DS1922/DS1923/DS1925 или иначе устройства ТЕРМОХРОН и устройства ГИГРОХРОН, каждое из которых регистрирует или температурные значения, или значения температуры и относительной влажности, измеренные через определённые, заранее заданные, промежутки времени и сохраняет полученную информацию в собственной энергонезависимой памяти, легко построить территориально распределённую систему мониторинга микроклимата любой сложности.

Для решения проблемы переноса данных, накопленных территориально удалённой автономной 1-Wire-системой, к стационарному персональному компьютеру удобны различные типы микросхем памяти из семейства iButton, которые в этом случае играют роль так называемых «транспортных таблеток». К подобным устройствам относятся, прежде всего, устройства энергонезависимой памяти, включающие в состав своей конструкции литиевый элемент питания. Это целый ряд “таблеток”: DS1992L (1 Кбит), DS1993L (4 Кбита), DS1995L (16 Кбит), DS1996L (64 Кбита). Кроме того, для целей транспорта информации могут быть использованы устройства с памятью типа EEPROM модификаций DS1971(32 байта), DS1972(128 байт), DS1973(512 байт) и DS1977(32 Кбайта). «Транспортные таблетки» входящие в состав семейства микросхем iButton EPROM?памяти? DS1982 (1 Кбит), DS1985 (16 Кбит), DS1986 (64 Кбита), ? удобны для заполнения памяти микропроцессорных систем (например, калибровочными константами или начальными установочными значениями).

Для сопряжения устройств в корпусах MicroCAN с шинами 1-Wire-магистрали используют специальные защелки типа DS9100 или DS9098P, или же более простые зажимы типа DS9094. Однако следует учитывать, что при организации 1-Wire-сети на базе “таблеток” iButton с помощью таких приспособлений теряется весь смысл в суперзащитных свойствах их корпуса. Поскольку подобные варианты включения этих “таблеток” в состав абонентов 1-Wire-сети делают соединение в любом случае уязвимым для внешних воздействий (воды, пыли, грязи, инея и т.д.). Поэтому вопрос об организации защищённых от внешних воздействий 1-Wire-сетей, реализованных на базе устройств iButton, требует особого подхода.

Магистраль и топология 1-Wire-сети

Большую роль при построении 1-Wire-сетей играет исполнение 1-Wire-магистрали. Как правило, протяжённые 1-Wire-магистрали имеют структуру, состоящую из трёх основных проводников: DATA ? шина данных, RET (GND) – возвратная шина или земляной провод, EXT_POWER – внешнее питание не только обслуживаемых ведомых абонентов, но и внешних относительно них цепей датчиков и органов управления. В зависимости от технологии прокладки кабеля, способа его сопряжения с ведомыми абонентами, особенностей используемых приёмов монтажа и качества применяемых материалов, в соответствии с нижеследующей Таблицей, различают четыре основных варианта организации 1-Wire-сетей, каждый из которых подразумевает использование особой технологии и аксессуаров при реализации магистрали.

Классификация 1-Wire-сети Протяжённость кабеля магистрали Количество ведомых абонентов Тип используемого кабеля Топология Мастер 1-Wire-сети
Миниатюрная До 5 м До 10 шт Любой Свободная Любой ведущий с пассивной подтяжкой (резистор к питанию)
Короткая До 30 м До 50 шт 4-х проводный телефонный Общая шина с патчами до 0,5 м Адаптеры на базе дискретных компонентов DS9097E, DS1410E
Средняя До 100 м До 100 шт Витая пара 3 категории Строгая общая шина Активная подтяжка (DS2480В, DS2482, DS2483 или специальное схемное решение (MAX6314))
Длинная До 300 м До 250 шт Витая пара 5 категории или IEEE1394 (Firewire) Общая шина без разрыва ствола Link или программная модификация временных слотов 1-Wire-протокола

[Адаптер LinkUSB – наиболее эффективный привод для проблемных 1-Wire-сетей] Если же организация 1-Wire-сети на базе персонального компьютера связана с особыми трудностями (большая протяжённость кабеля магистрали, большое количество ведомых абонентов, плохое качество кабеля или сложная топология, много помех и т.д.), то наиболее оптимально использование интеллектуального адаптера для COM-порта типа Link или его аналога для USB-порта адаптера LinkUSB. Основой любого из таких адаптеров является микропроцессор, оснащённый специализированной программой управления. При этом все устройства, реализованные по технологии Link, полностью эмулируют со стороны последовательного порта работу популярного адаптера DS9097U производства Maxim Integrated. Поэтому всё программное обеспечение, ранее разработанное для поддержки адаптеров DS9097U, также подходит для взаимодействия с любым из адаптеров Link. Но главное, что благодаря собственным интеллектуальным ресурсам адаптеры Link и LinkUSB обеспечивают льготный режим работы ведомых абонентов в составе проблемных 1-Wire-сетей, в условиях сложной помеховой обстановки. Адаптеры Link и LinkUSB многократно улучшают механизм активной подтяжки шины данных 1-Wire-магистрали, что позволяет действительно получать идеальные сигналы обмена при длинах кабеля до 300 метров и числе ведомых абонентов до 250 шт. Кроме того, использование процессором Link?адаптера специальных алгоритмов цифровой фильтрации многократно улучшает устойчивость обслуживаемой им 1-Wire-сети к электромагнитным помехам, шумам и отражениям сигналов.

  • Tutorial

Имеем в наличии гермозону на 4 ряда с 16-тью открытыми стойками в каждом ряду.
Схема кондиционирования: горячие-холодные коридоры, внутренние кондиционеры с внешними испарителями, 3 кондиционера на ряд, то есть 6 кондиционеров на холодный коридор.

Задача: построить систему мониторинга температуры гермозоны с возможностью предупреждения выхода кондиционеров из строя.

Для решения данной задачи решено было использовать сеть 1-wire температурных датчиков и систему мониторинга Zabbix 2.

Собираем сеть 1-wire.

Нам необходимо:

1. Контроллер 1-Wire сети DS9490R

2. Температурные датчики DS18B20 , в количестве, расчитываем: 4 ряда * 16 стоек в ряду * 2 датчика на стойку (холодный и горячие коридоры), то есть 128 датчика.

3. Для удобной установки датчика использовали вот такой переходник RJ45 на RJ45, кат. 5e GCT11-8p8c , так же в количестве 128 штук

4. И на каждый датчик по 2 патч-корда, то есть 128 * 2 = 256, длина патч-корда половина ширины стойки сервера

Собираем датчик, выбираем в переходнике три любых провода, делаем 3 дырки в переходнике, припаиваем датчик и так 128 раз:)
Рекомендуется залить место припоя клеем из термопистолета, получается что-то похоже на это:

Датчики сразу рекомендуется проверять на работу, прямым подключением к контролеру 1-wire сети и считывания с него информации. Так же рекомендуется пронумеровать датчики: последовательно наклеить номера с 1 по 128. Инициализация 1-wire сети будет описана ниже.

А так это смотрится если закрепить на стойке.

Так как на контролере разъем RJ11, а не RJ45, то рекомендую сделать нулевой датчик-переходник, его порядковый номер будет ноль, а номера стоек будут начинаться с 1, что более привычно.

ВАЖНО!
Протяженность нашей сети составила около 140 метров, так как сервер находился в 2 ряду.
В процессе тестирования выяснилось, что питания порта USB не хватает для такой длиной сети, контролер просто не может опросить датчики, дальше половины сети, поэтому рекомендую купить USB хаб, обязательно с внешнем питанием, и подключить контролер к нему. После подключения хаба, скорость опроса датчиков возросла, и в сети перестали появляться ошибки, все датчики читались.
Разбить сеть на два сегмента мне не удалось, так как программа которая считывает данные с датчиков, так и не смогла понять с каким контролером работать, по крайне мере заставить мне не удалось.

Инициализация 1-wire сети и получение значений датчиков.

Итак приступаем к настройке программной части.

Сервер к которому подключен USB контролер 1-wire сети работает под управлением FreeBSD 9.1, Zabbix 2.0.8 установлен из портов.

Для получения значений датчиков используется программа DigiTemp

Скачиваем исходники DigiTemp и компилируем, скомпилированные программы у меня располагаются: /usr/local/etc/digitemp/new/digitemp-3.6.0/

Для работы с нашем контроллером используем программу digitemp_DS2490

# cd /usr/local/etc/digitemp/new/digitemp-3.6.0/
# ./digitemp_DS2490 -i

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

./digitemp_DS2490 -i - результатом выполнения будет являться файл конфигурации сети 1-wire с названием.digitemprc, в домашнем каталоге программы.
При этом digitemp выведет 64-битные ID датчиков, которые запишет в файл.

Пример.digitemprc
TTY USB
READ_TIME 1000
LOG_TYPE 1
LOG_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F"
CNT_FORMAT "%b %d %H:%M:%S Sensor %s #%n %C"
HUM_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F H: %h%%"
SENSORS 133


ROM 5 0x28 0xCB 0xE2 0x19 0x03 0x00 0x00 0x6F

ВАЖНО
Номер счетчика ROM 0 0x28 0x62 0xB5 0x19 0x03 0x00 0x00 0x61, НЕ ЯВЛЯЕТСЯ его физически последовательным номером в сети, этот номер получен во время инициализации сети, то есть кто первым ответил, тот и записался в файл.
Поэтому на стадии пайки датчиков и их проверки рекомендую формировать, сразу последовательную сеть. То есть берем датчик, спаяли, подсоединили сразу к контролеру, запустили./digitemp_DS2490 -i получили его ID, скопировали его в Excel таблицу и так же добавили последовательно ROM номер … в таблицу.
Отсоединили датчик, наклеили на него последовательный номер, и повесили на гирлянду, соединяя патч-кардами. Не рекомендую подсоединять гирлянду к контролеру и запускать проверку, во-первых это будет гораздо дольше, а во-вторых в свете вышесказанного, из-за того, что ответы от датчиков приходят не последовательно, искать ID нового датчика будет сложнее.

После того как вы протестировали все датчики, подсоедините гирлянду к контролеру и запустите./digitemp_DS2490 -i

Сформируется конфигурационный файл вашей сети.digitemprc

Вам необходимо заменить
ROM 0 0x28 0x62 0xB5 0x19 0x03 0x00 0x00 0x61
ROM 1 0x28 0x29 0xD5 0x19 0x03 0x00 0x00 0xFD
ROM 2 0x28 0x59 0xDE 0x19 0x03 0x00 0x00 0x15
ROM 3 0x28 0xDA 0xD6 0x19 0x03 0x00 0x00 0x98
ROM 4 0x28 0xFD 0xBE 0x19 0x03 0x00 0x00 0x84

На ту последовательно которая у вас получилась в Excel файле в таком же формате.

Сохраните полученный файл.digitemprc в другой папке, так как если вы вдруг запустите еще раз./digitemp_DS2490 -i , то ваш файл будет перезаписан, и тогда физическая адресация будет неверной с большой долей вероятности.

После того как 1-wire сеть настроена, можно считывать значения датчиков, запустите./digitemp_DS2490 -q -a -r1 -n1 , программы выведет значения датчиков.

Проверьте правильность последовательного подключения в сети, например нагрейте 5 датчик, и запустите программу, температура должна возрастать на 4 (так как нумерация идет с 0)

Переходим к настройке Zabbix .

Сервер на котором установлен Zabbix в zabbix’е называется ZabbixServer.
Создаем в нем 129 элементов данных, то есть на каждый датчик температуры по элементу данных.

Для нас здесь важно понимать:
gmz.temp.t17 - это ключ элемента, они используется для отсылки значения датчика
и тип элемента должен быть “Zabbix trapper”, так как отправка значений будет происходить через программу zabbix_sender.

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

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

В crontab пользователя root добавляем задание:
*/1 * * * * /usr/local/etc/digitemp/digitemp_cron.sh > /dev/null 2>&1

То есть запускаем раз в минуту скрипт digitemp_cron.sh
cat /usr/local/etc/digitemp/digitemp_cron.sh

#!/usr/local/bin/bash
cd /usr/local/etc/digitemp/new/digitemp-3.6.0/
./digitemp_DS2490 -q -a -r1 -n1 -o"ZabbixServer gmz.temp.t%s %N %.2C" | /usr/local/bin/zabbix_sender -vv -z 127.0.0.1 -I 127.0.0.1 -T -i -

O"ZabbixServer gmz.temp.t%s %N %.2C" - это строка определяет формат вывода данных.

ВАЖНО!
ZabbixServer - это название хоста с установленным Zabbix server в Zabbix.

Запустите./digitemp_DS2490 -q -a -r1 -n1 -o"ZabbixServer gmz.temp.t%s %N %.2C" | /usr/local/bin/zabbix_sender -vv -z 127.0.0.1 -I 127.0.0.1 -T -i -

В результате работы zabbix_sender должно быть, что все строки отправлены и приняты:

Info from server: «Processed 133 Failed 0 Total133 Seconds spent 0.000540»
sent: 133; skipped: 0; total: 133

Если все так, то вы можете добавлять графики и триггеры, и настраивать оповещения.

Теперь же перейдем к самой простой платформе для создания умного дома - 1-WIRE. Платформа разрабатывалась с конца 80-х до конца 90-х годов компанией Dallas Semiconductor (с 2001 года - Maxim Integrated) и предназначалась для задач контактной идентификации объектов, в т.ч. с функциями измерения и регистрации температуры, влажности, параметров автономного электропитания, а также с функциями съема, хранения и переноса данных. Пожалуй, самым известным примером применения этой платформы является iButton - ключ-таблетка для домофона:

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

Возможность подключения устройств в «горячем » режиме

Протокол 1-Wire предусматривает выдачу устройством, подключаемым к магистрали в «горячем» режиме, импульса, оповещающего о появлении на магистрали нового устройства. Иными словами, в сеть можно добавлять новые устройства и они тут же смогут работать.

Уникальный идентификатор устройства

Каждая микросхема 1-Wire содержит уникальный 64-битный код, записываемый на этапе производства. Данный код позволяет индивидуализировать все выпускаемые устройства 1-Wire, для чего производитель гарантирует отсутствие одинаковых кодов (аналогично MAC-адресам сетевых адаптеров). При подключении к магистрали данный код считывается контроллером и используется для идентификации связанного с этим устройством объекта, а также для определения типа устройства. При подключении к магистрали нескольких устройств их коды могут использоваться в качестве их адресов, что позволяет строить технологические сети, получившие название MicroLAN.

Топология

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


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

Основные параметры интерфейса 1-Wire следующие:

  • максимальная длина магистрали при использовании витой пары - до 300 м;
  • максимальное количество абонентов на магистрали максимальной длины - до 250;
  • скорость обмена по магистрали максимальной длины - до 16,3 кбит/c.
Принцип работы сети

Обмен данными по магистрали включает три фазы:

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

Логика всех устройств тактируется отрицательным фронтом сигналов контроллера как в режиме записи, так и в режиме чтения. Биты кодируются длительностью положительного импульса: «1» передается длинным импульсом, а «0» - коротким. В режиме записи все импульсы данных формируются контроллером. В режиме чтения контроллер формирует последовательность единиц, а абонент накладывает на них свою маску нулей:

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

Программное обеспечение

Фирма Maxim Integrated (создатель шины 1-WIRE) предоставляет для программирования систем на базе 1-Wire библиотеки API и SDK для широкого ряда платформ - персональных компьютеров с ОС Windows/Linux/MacOS, мобильных устройств, микроконтроллеров, .NET и JAVA. Так же предлагается программный cканер сети OneWire Viewer, позволяющий находить и идентифицировать подключенные к сети устройства и отображать полный перечень их параметров и данных. Из сторонних разработок наибольший интерес представляют следующие:

  • OWFS - One Wire File System. Свободно распространяется по лицензии GPLv2. Предназначен для UNIX-платформ, но при использовании UNIX-эмулятора cygWin может работать и в среде Windows. Имеет веб-интерфейс, что делает возможным удаленный доступ, например, через Интернет. OWFS является самой популярной программной средой для домашней автоматизации на базе платформы 1-Wire.
  • Бенукс - программная среда для различных задач автоматизации. Является коммерческим продуктом. Позволяет взаимодействовать с системой автоматизации по различным каналам, в т.ч. с помощью веб-интерфейса и SMS. Предоставляет возможности автоматизированного управления по сценариям.
  • jHomeNet - свободно распространяемый программный комплекс для сервера 1-Wire на Java.

Интерфейс 1-Wire разработан фирмой Dallas Semiconductor, все права на этот интерфейс принадлежат исключительно этой фирме (Которая, впрочем, уже давно прекратила свое самостоятельное сущестование и перешла под крыло корпорации MAXIM Inc.).
Чем привлекателен этот интерфейс? Разумеется, малым количеством выводов МК, требующихся для подключения практически неограниченного количества микросхем. В самом деле, двусторонний обмен требует всего 1 линию! Кроме того, ассортимент устройств с этим интерфейсом весьма широк. Наконец, протокол обмена по этому интерфейсу очень прост и легко реализуется программно практически на любых МК хотя есть и специальные микросхемы-адаптеры).

Фирменная документация по указанному интерфейсу и устройствах, его поддерживающих, находится по адресу http://www.maxim-ic.com/1-Wire.cfm.

Аппаратная реализация интерфейса 1-Wire

На рисунке показана упрощенная схема аппаратной реализации интерфейса 1-Wire. Вывод DQ устройства представляет собой вход КМОП-логического элемента, который может быть зашунтирован (замкнут на общий провод) полевым транзистором. Сопротивление канала этого транзистора в открытом состоянии - около 100 Ом. Когда транзистор заперт - имеется небольшой ток утечки (примерно 5 мкА) на общий провод.
Шина 1-Wire должна быть подтянута отдельным резистором к напряжению питания устройств (которое, кстати, может быть от 3 до 5В - уточняется по характеристикам конкретного устройства). Сопротивление этого резистора 4.7 К, однако, это значение рекомендовано только для достаточно коротких линий. Если шина 1-Wire используется для подключения удаленных на большое расстояние устройств, то сопротивление этого резистора следует уменьшить. Чуть позже я коснусь этой проблемы и поясню причины необходимости такого уменьшения сопротивления, а пока скажу, что минимально допустимое его сопротивление - около 300 Ом, а максимальное - около пары-тройки десятков килоом. Данные величины - ориентировочные, вы всегда должны уточнить по характеристикам конкретного устройства 1-Wire его максимальный втекающий ток линии DQ, который, собственно, и определяет минимум внешнего сопротивления.
Подключение шины 1-Wire к МК показано условно в двух вариантах: с использованием 2 отдельных выводов МК (один в качестве выхода, а другой в качестве входа), так и одного, работающего и на ввод и на вывод. Разделение этих способов показано пунктирной линией, условно обозначающей границу корпуса МК. С некоторой натяжкой можно представить себе логическое строение шины 1-Wire как всем известное соединение выводов микросхем с открытым коллектором по схеме "монтажное ИЛИ". Очевидно, что передача какой-либо информации при этом возможна только выдачей низкого уровня в линию, т.е. замыканием ее на общий провод, а в высокий логический уровень линия вернется сама, благодаря наличию внешнего подтягивающего резистора. Так же очевидно, что одновременная передача нескольких устройств обречена на неудачу из-за полного искажения информации (все передаваемые единицы одного устройства будут подавлены передаваемыми нулями от другого устройства).

Программная реализация интерфейса 1-Wire

А теперь о том, как происходит обмен информацией по шине 1-Wire. Основные постулаты.
1. Обмен всегда ведется по инициативе одного ведущего устройства, которое в большинстве случаев является микроконтроллером (МК).
2. Любой обмен информацией начинается с подачи импульса сброса ("Reset Pulse" или просто RESET) в линию 1-Wire ведущим устройством.
3. Для интерфейса 1-Wire в общем случае предусматривается "горячее" подключение и отключение устройств.
4. Любое устройство, подключенное к 1-Wire после получения питания выдает в линию DQ импульс присутствия, называемый "Presence pulse" (далее я буду использовать термин PRESENCE). Этот же импульс устройство всегда выдает в линию, если обнаружит сигнал RESET.
5. Появление в шине 1-Wire импульса PRESENCE после выдачи RESET однозначно свидетельствует о наличии хотя бы одного подключенного устройства.
6. Обмен информации ведется так называемыми тайм-слотами: один тайм-слот служит для обмена одним битом информации.
7. Данные передаются побайтно, бит за битом, начиная с младшего бита. Достоверность переданных/принятых данных (проверка отсутствия искажений) гарантируется путем подсчета циклической контрольной суммы.
Основные постулаты определяют логический низкоуровневый протокол обмена данными.
На следующем рисунке показана диаграмма сигналов RESET и PRESENCE, с которых всегда начинается любой обмен данными. Кстати, выдача импульса RESET в процессе обмена служит для досрочного завершения процедуры обмена информацией.

Диаграмма сигналов инициализации обмена

Как видим, длительность большинства временных интервалов очень приблизительная и имеет только ограничение только по минимуму (не меньше указанного). Условные обозначения линий, показанные на Рис. 2, будут использоваться и далее.
Импульс RESET формирует ведущий МК, переводя в низкий логический уровень шину 1-Wire и удерживая ее в этом состоянии минимум 480 микросекунд. Затем МК должен "отпустить" шину. Через некоторое время, зависящее от емкости линии и сопротивления подтягивающего резистора, в линии установится высокий логический уровень. Протокол 1-Wire ограничивает это время "релаксации" диапазоном от 15 до 60 микросекунд, что и является определяющим для выбора подтягивающего резистора (как правило, емкость линии мы менять существенно не можем, а именно она оказывает существенное влияние на время возврата линии к высокому уровню).
Обнаружив импульс RESET, ведомое устройство приводит свои внутренние узлы в исходное состояние и формирует ответный импульс PRESENCE, как следует из рисунка - не позже 60 микросекунд после завершения импульса RESET. Для этого устройство переводит в низкий уровень линию DQ и удерживает ее в этом состоянии от 60 до 240 микросекунд. Конкретное время удержания зависит от многих параметров, но всегда находится в указанном диапазоне. После этого устройство так же "отпускает" шину.
Но после завершения импульса PRESENCE устройству дается еще некоторое время для завершения внутренних процедур инициализации, таким образом, МК должен приступить к любому обмену с устройством не ранее, чем через 480 микросекунд после завершения импульса RESET.
Итак, процедура инициализации интерфейса, с которой начинается любой обмен данными между устройствами, длится минимум 960 микросекунд, состоит из передачи от МК сигнала RESET и приему от устройства сигнала PRESENCE. Если сигнал PRESENCE не обнаружен - значит на шине 1-Wire нет готовых к обмену устройств.

Теперь рассмотрим процедуры обмена битами информации, которые, как вы помните, осуществляются определенными тайм-слотами. Тайм-слот - это по существу определенная, довольно жестко лимитированная по времени последовательность смены уровней сигнала в линии 1-Wire. Различают 4 типа тайм-слотов (я буду использовать термин МК, как синоним "ведущего устройства" и просто "устройство", как синоним "ведомого"): передача "1" от МК, передача "0" от МК, прием "1" от устройства и прием "0" от устройства.
Любой тайм-слот всегда начинает МК путем перевода шины 1-Wire в низкий логический уровень. Длительность любого тайм-слота должна находиться в пределах от 60 до 120 микросекунд. Между отдельными тайм-слотами всегда должен предусматриваться интервал не менее 1 микросекунды (конкретное значение определяется параметрами ведомого устройства).
Тайм-слоты передачи отличаются от тайм-слотов приема поведением МК: при передаче он только формирует сигналы, при приеме, кроме того, еще и опрашивает (т.е. принимает) уровень сигнала в линии 1-Wire. Следующй рисунок демонстрирует временные диаграммы тайм-слотов всех 4-х типов: вверху показаны тайм-слоты передачи от МК, внизу - приема от устройства.

Тайм-слот передачи "0" заключается просто в удержании шины 1-Wire в низком уровне в течение всей длительности тайм-слота. Передача "1" осуществляется путем "отпускания" шины 1-Wire со стороны МК не ранее чем через 1 микросекунду после начала тайм-слота, но не позже чем через 15 микросекунд. Ведомое устройство опрашивает уровень в шине 1-Wire в течение временного интервала, условно показанного в виде серого прямоугольника, т.е. начиная с 15-й микросекунды от начала тайм-слота и заканчивая 60-й микросекундой от начала. Типичный момент ввода уровня в устройство (т.е. характерный для большинства устройств) - около 30-й микросекунды от начала тайм-слота.
Заштрихованная область - это область "нарастания" уровня в шине 1-Wire, которая зависит от емкости линии и сопротивления подтягивающего резистора, она приведена для справки.
Тайм-слоты приема информации отличаются тем, что МК формирует только начало тайм-слота (абсолютно так же, как при передаче "1"), а затем управление уровнем шины 1-Wire берет на себя устройство, а МК осуществляет ввод этого уровня так же в определенной зоне временных интервалов. Зона эта, как видно из рисунка, довольно мала. Как и раньше, заштрихованная область - область неопределенности, поэтому для ввода, собственно говоря, контроллеру остается даже не промежуток, а скорее конкретный момент, когда он должен ввести уровень сигнала из линии. Этот момент времени - 14-я или 15-я микросекунда от начала тайм-слота. Разумеется, если линия имеет малую емкость, а подтягивающий резистор мал, зона опроса несколько расширяется, однако рекомендую ориентироваться на худший вариант (как, кстати, рекомендует и фирма-производитель), что-бы всегда обеспечить надежный обмен данными.

Итак, подведем итоги. МК начинает тайм слот с выдачи в шину 1-Wire "0" в течение 1 микросекунды. Последующий уровень зависит от типа тайм слота: для приема и передачи "1" уровень должен стать высоким, а для передачи "0" - оставаться низким вплоть до конца тайм-слота, т.е. не менее 60 и не более 120 микросекунд. Если МК принимает данные, то опрос уровня в шине он должен сделать на промежутке от 13-й до 15-й микросекунде тайм-слота. МК должен обеспечить интервал между отдельными тайм-слотами не менее 1 микросекунды (лучше - больше, максимальное значение не ограничено).
Важно понимать, что следует очень тщательно подходить к обеспечению в шине 1-Wire требуемых временных интервалов, т.к., например, увеличение длительности тайм-слота вывода "0" свыше рекомендованного значения может привести к ошибочному восприятию этого тайм-слота, как сигнала RESET, и, разумеется, после этого вся процедура обмена пойдет насмарку. Но так же следует учитывать влияние самой линии на длительность фронтов импульсов. Поэтому в общем случае, это не простая задача. Но выполнение несложных рекомендаций позволит ее решить достаточно простыми средствами: во-первых, все сигналы, которые должен формировать МК, следует формировать по принципу необходимого минимума длительности (т.е. немного больше, чем указанная минимальная длительность), а от устройства следует ожидать сигналов по принципу наихудшего (т.е. ориентироваться на самые худшие варианты временных параметров сигнала).
Если вы разрабатываете схему, которая целиком умещается на одной плате вместе со всеми устройствами на шине 1-Wire, то, ориентируясь на самый первый рисунок, вы получите практически идеальную линию: фронты нарастания высокого уровня в шине будут минимальными - это избавит вас от большинства проблем. Но если Вы подключаете несколько устройств через длинный соединительный шлейф - придется бороться с погонной емкостью линии.
Мною проверено, что соединение по свитым вручную обычным монтажным проводам при типовом подтягивающем резисторе однозначно возможно на расстоянии до 9 м, а для соединения по очень длинной телефонной "лапше" может потребовать уменьшения подтягивающего резистора до 510 ом и даже менее.

Разобравшись с процедурами обмена битами, пора приступать к более высокому уровню протокола обмена информацией, и для этого необходимо рассмотреть принципы адресации устройств и управления ими.
Каждое устройство 1-Wire обладает уникальным идентификационным 64-битным номером, программируемым на этапе производства микросхемы. Уникальным - это значит, что фирма-производитель гарантирует, что не найдется двух микросхем с одинаковым идентификационным номером (по крайней мере в течении нескольких десятков лет при существующих темпах производства).
При рассмотрении протокола обмена мы будем исходить из принципа, что на шине 1-Wire имеется более одного устройства. В этом случае перед МК встают 2 проблемы: определение количества имеющихся устройств и выбор (адресация) одного конкретного из них для обмена данными. Решение первой проблемы осуществляется двумя путями: универсальным и гибким, но требующим довольно сложного программно-реализуемого алгоритма, и простым, но с большими ограничениями. Универсальный алгоритм мы рассматривать не будем, т.к. это требует отдельной статьи. А более простой заключается в том, что номера всех используемых в вашей схеме 1-Wire-устройств вы должны знать заранее, и просто использовать их как константы в вашей программе. Номера некоторых устройств нанесены прямо на корпусе микросхем (например, для устройств iButton - всем известных ключей-таблеток), а номера других можно определить при помощи специальных программ или устройств (о них в конце статьи). iButton - зарегистрированная торговая марка, права на которую принадлежат Dallas Semiconductor, дополнительная информация об этом семействе изделий на есть на сайте.
Итак, предположим, что мы знаем номера всех устройств 1-Wire на шине. Как же ведется работа с ними? Алгоритм тут следующий. МК посылает, как обычно, импульс RESET, и все имеющиеся устройства выдают PRESENCE. Затем МК посылает в шину команду, которую принимают все устройства. Команд определено несколько общих для всех типов 1-Wire-устройств, а так же могут быть команды, уникальные для отдельных типов. Среди общих команд нас в первую очередь могут заинтересовать следующие (см. табли-цу).

Значение байта

Описание

SEARCH ROM

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

READ ROM

Чтение адреса устройства - используется для определения адреса единственного устройства на шине

MATCH ROM

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

SKIP ROM

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

Первую команду мы не станем рассматривать по ранее изложенной причине, вторая позволит вам определить адрес имеющихся у вас устройств перед их установкой в готовое изделие, а две последние наверняка станут основными в вашей работе.
После того, как МК выдаст команду READ ROM, от устройства поступит 8 байт его собственного уникального адреса - МК должен их принять. Учтите, что любая процедура обмена данными с устройством должна быть завершена полностью либо прервана посылкой сигнала RESET.
Если отправлена команда MATCH ROM, то после нее МК должен передать так же и 8 байт конкретного адреса устройства, с которым будет осуществляться последующий обмен данными. Это равносильно выставлению адреса на параллельной шине в микропроцессорных устройствах. Приняв эту команду, каждое устройство сравнивает передаваемый адрес со своим собственным. Все устройства, адрес которых не совпал, прекращают анализ и выдачу сигналов в линии 1-Wire, а опознавшее адрес устройство продолжает работу. Теперь все данные, передаваемые МК будут попадать только к этому "адре-сованному" устройству. То, какие именно данные надо послать в устройство или получить от него после его адресации, зависит от конкретного устройства и в настоящей статье не рассматривается (например, для упомянутого термометра это могут быть команды запуска измерения или считывания результата, для ключа-таблетки не определены никакие иные команды, кроме основных, а для микросхем АЦП дополнительных команд может быть около десятка).
Если устройство одно на шине - можно ускорить процесс взаимодействия с ним при помощи команды SKIP ROM. Поучив эту команду, устройство сразу считает адрес совпавшим, хотя никакого адреса за этой командой не следует. Некоторые процедуры не требуют приема от устройства никаких данных, в этом случае команду SKIP ROM можно использовать для передачи какой-то информации сразу всем устройствам. Это можно использовать, например, для одновременного запуска цикла измерения температуры несколькими датчиками-термостатами типа DS18S20.
Прием и передача байтов всегда начинается с младшего бита. Порядок следования байтов при передаче и приеме адреса устройства так же ведется от младшего к старшему. Порядок передачи другой информации зависит от конкретного устройства, поэтому следует обращаться к документации на применяемые вами устройства.

В завершение обзора интерфейса рассмотрим детально строение уникального 64-битного номера-адреса устройств 1-Wire. Он состоит фактически из 8 отдельных байт: одного байта идентификатора семейства, шести байт (48 бит) собственно уникального адреса и одного байта контрольной суммы всех предыдущих байтов. Рассмотрение этих составных частей начнем, по традиции, в обратном порядке.
Итак, контрольная сумма или CRC - это байт, значение которого передается самым последним и вычисляется по специальному алгоритму на основе значения всех 7-и предыдущих байтов. Алгоритм подсчета таков, что если все байты переданы-приняты без искажений (а искажения вполне возможны, если вспомнить характер аппаратной реализации интерфейса), принятый байт контрольной суммы обязательно совпадет с рассчитанным в МК (или устройстве) значением. Т.е. при реализации программного алгоритма обмена информацией мы должны при передаче и приеме байтов подсчитывать их контрольную сумму по строго определенному алгоритму, а затем либо передать полученное значение (если мы вели передачу адреса/данных), либо сравнить расчетное значение с принятым значением CRC. Только при совпадении обоих CRC МК или устройство считают принятые данные достоверными. В противном случае продолжение обмена невозможно.
Очевидно, что алгоритм подсчета CRC должен быть одинаковым как для МК, так и для любого устройства. Он "стандартизирован" и описан в документации. Однако его понимание требует определенных умственных усилий и, что лично для меня более критично, наличия времени, которого постоянно не хватает. Именно поэтому я не стану описывать сам алгоритм расчета (все желающие могут познакомиться с ним по фирменному документу Application Note 27 "Understanding and Using Cyclic Redundancy Checks with Dallas Semiconductor iButtonTM Products"), а просто приведу примеры программной реализации этого алгоритма, которые можно использовать не особо углубляясь в математические дебри. Разумеется, вы легко сможете адаптировать приводимые примеры под свои нужды. Кстати, по этим примерам можно восстановить и алгоритм расчета CRC.

Пример первый: ассемблер MCS-51. Подпрограмма расчета CRC.
Эта подпрограмма использует одну ячейку памяти CRC для хранения результата. Перед первым вызовом эту ячейку необходимо обнулить. В аккумуляторе - очередной принятый или передаваемый байт. После того, как все байты переданы/приняты в ячейке CRC получится контрольная сумма. Подпрограмма не портит никаких регистров, кроме регистра состояния.

DO_CRC:
PUSH ACC ; сохраняем аккумулятор
PUSH B ; сохраняем регистр В
PUSH ACC ; сохраняем байт данных
MOV B, #8 ; кол-во битов (счетчик циклов)
CRC_LOOP:
XRL A, CRC ; XOR с предыдущим значением контрольной суммы
RRC A ; сдвиг вправо через флаг переноса
MOV A, CRC ; берем последнее значение CRC
JNC ZERO ; переход, если не было переноса
XRL A, #18H ; обновляем значение CRC путем XOR с константой
ZERO:
RRC A ; снова сдвигаем CRC
MOV CRC, A ; сохраняем новое значение CRC
POP ACC ; восстанавливаем байт данных
RR A ; циклически сдвигаем вправо
PUSH ACC ; снова сохраняем значение
DJNZ B, CRC_LOOP ; повторяем цикл 8 раз (для каждого бита)
POP ACC ; очищаем стек
POP B ; восстанавливаем прежние значения регистров из стека
POP ACC
RET ; завершение процедуры

Использование этой (да и последующей) подпрограммы очень простое: перед началом приема или передачи надо обнулить ячейку CRC, а затем каждый принятый или переданный байт поместить в аккумулятор и вызвать эту подпрограмму. После того, как приняты все 8 (обратите внимание - именно 8!) байтов уникального адреса устройства, необходимо проверить содержимое ячейки CRC: ненулевое ее значение свидетельствует о наличии искажения принятых данных. Если же CRC=0 - это значит, что данные приняты без искажений. Если же МК вел передачу уникального адреса устройства, то содержимое CRC должно быть передано 8-ым байтом после предыдущих семи.

Пример второй: процедура на языке Pascal с использованием табличных вычисле-ний CRC. Как и предыдущая, эта процедура должны быть вызвана для каждого передаваемого/принимаемого байта, а перед первым использованием переменная CRC должна быть обнулена.

Var
CRC: Byte; {переменная-результат расчета контрольной суммы}

Procedure Do_CRC(X: Byte);
{Эта процедура вычисляет контрольную сумму по стандартному алгоритму для устройств 1-Wire и накапливает результат в глобальной переменной CRC}

Const
{Нижеследующая таблица содержит заранее вычисленные сигнатуры, используемые для быстрого расчета CRC}

Table: Array of Byte = (0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,
157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,
35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,
190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,
70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,
219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,
101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,
248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,
140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147,205,
17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,
175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,
50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,
202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,
87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,
233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,
116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53);

Begin
CRC:= Table;
{Расчет заключается в простом извлечении результата из таблицы}
End;

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

Итак, мы разобрались с алгоритмом расчета контрольной суммы уникального адреса устройства, однако это всего лишь один последний байт из 8 байтов этого адреса, необходимо рассмотреть и остальные. Предыдущие 6 байтов (помните, что мы рассматриваем байты адреса в обратном порядке?), собственно, и есть тот самый уникальный номер-идентификатор. Номер - он и есть номер, рассказывать о нем нечего, переходим к заключительному первому байту - коду семейства.
Код семейства определяет номер группы, к которой принадлежит конкретное устройство и для микросхем одного семейства, естественно, будет одинаковым. Зная (считав) код семейства из неизвестного устройства можно довольно точно определить его функциональное назначение и даже некоторые параметры. Приведу список некоторых кодов семейств 1-Wire-устройств (таблица ниже).

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

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

  • любой обмен информацией начинается с передачи импульса RESET и приема имульса PRESENCE;
  • если импульса PRESENCE не обнаружено - на шине нет устройств;
  • МК всегда инициирует обмен, начиная каждый тайм-слот обмена битом информации;
  • временные параметры каждого тайм-слота следует соблюдать с максимально возможной точностью;
  • для выбора одного из многих устройств на шине 1-Wire МК должен передать в шину команду MATCH ROM и затем 8 байт адреса устройства, последний (8-й) байт этого адреса - есть контрольная сумма предыдущих семи;
  • если устройство на шине одно - МК может узнать его адрес путем посылки команды READ ROM, после чего принять от устройства 8 байтов адреса, последний из которых так же будет контрольной суммой первых семи;
  • для работы с единственным устройством на шине можно отказаться от указания его адреса, для этого МК должен передать устройству команду SKIP ROM, после чего можно начинать обычный обмен данными;
  • любая начатая процедура обмена может длиться сколь угодно долго за счет пауз между отдельными тайм-слотами, но всегда должна быть завершена полностью;
  • прервать начатый обмен можно в любой момент путем выдачи импульса RESET в шину 1-Wire (но это может нарушить нормальную работу некоторых устройств).
Просмотров: 11741

Как было обещано ранее, предлагаю поговорить о подключении датчиков температуры к контроллеру умного дома Loxone Miniserver.
В предыдущей статье вы може прочитать как подключить сервоприводы .

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

Фото 1. Датчик температуры 1-Wire DS18B20.

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


Loxone предлагает два варианта датчика с легким подключением:

Фото 2. Датчик температуры Loxone 1-Wire.

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


Фото 3. Герметичны датчик температуры Loxone 1-Wire.

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


Отметим, что датчики 1-Wire напрямую нельзя подключить к Miniserver’у, поэтому подключение нужно осуществлять через расширение Loxone 1-Wire.

Фото 4. Расширение Loxone 1-Wire для системы умного дома Loxone.

На одно расширение можно подключить до двадцати датчиков.


Длина шины, в зависит от способа подключения:

Пример классического шинного соединения.
При данном варианте подключения мы имеем наибольшую длину - 350м.

Соединение шиной с одиночными ответвлениями.
Суммарная длина шины при таком подключении, немного меньше классической - 300м.

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

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


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

В независимости от выбранного варианта подключения шины, рекомендуется использовать кабель “витая пара” с попарным экранированием.

Схема подключения расширения 1-Wire к Loxone Miniserver

Схема 1. Подключение расширение Loxone 1-Wire к контроллеру умного дома Loxone Miniserver.

Схема 2. Способы подключения датчиков 1-Wire.

Подключение с питанием от шины (на схеме слева), стоит использовать в случаях, когда количество жил в витой паре ограниченно. Например Вам нужно подключить 5-ть кнопок в выключателе. В обычной витой паре 8 проводов (т.е. 4 пары), 6 из них идут на выключатель, один питающий и пять сигнальных проводов. В итоге у Вас остается всего одна пара - под датчик. В остальных случаях лучше использовать вариант подключения с отдельным питанием, так как это позволит на одно расширение подключить большее количество датчиков.
Стоит напомнить, что подключения могут быть комбинированными, то есть одновременно к одному расширению можно подключить как датчики с питанием от шины, так и с автономным питанием.

Схема подключения нескольких датчиков 1-Wire при питании от шины

Схема 3. Схема подключения нескольких датчиков 1-Wire при питании от шины к контроллеру умного дома Loxone Miniserver.

Схема подключения нескольких датчиков 1-Wire при отдельном питании

Схема 4. Схема подключения нескольких датчиков 1-Wire при отдельном питании к контроллеру умного дома Loxone Miniserver.


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

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

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

Фото 5. Датчик температуры для сауны Loxone 0-10В.

Схема подключения датчика температуры 0-10В для сауны

Схема 5. Схема подключения датчика температуры 0-10В для сауны к контроллеру умного дома Loxone Miniserver.

Рассмотрим вариант если Вы планируете подключить только один датчик, например для сауны. В этом случае есть возможность применить более простой вариант подключения - напрямую, т.е. без клемм.
Надо заметить, что в датчике температуры для сауны так же встроен датчик влажности, который тоже передает сигнал по 0-10В. Именно поэтому на представленной схеме от датчика идут два сигнальных провода и соответственно им нужно два входа 0-10В на Miniserver’е.

Предлагаю так же рассмотреть пример подключения двух датчиков: температуры/влажности 0-10В. Количество датчиков обусловлено техническими особенностями Miniserver’а, а именно - всего четыре входа 0-10В. Больше количество подключается по аналогии, но уже к расширению Loxone Extension.

Схема подключения двух датчиков температуры/влажности 0-10В

Схема 6. Схема подключения двух датчиков температуры/влажности 0-10В к контроллеру умного дома Loxone Miniserver.

К сожалению нормальной клеммы на четыре контакта нет, поэтому мы используем Phoenix Contact UTTB и как для раздачи питания, и как проходные.