Компьютер. Радиоэлектроника. Блоки питания. Справочники. Источники питания. Радиосвязь

Примеры связи мк по 1 wire интерфейсу

Однопроводной интерфейс 1-Wire, разработанный в конце 90-х годов фирмой Dallas Semiconductor Corp., регламентирован разработчиками для применения в трех основных сферах-приложениях:

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

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

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

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

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

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

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

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

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

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

Стандартная скорость работы 1-Wire-сети, которая составляет 15,4Кбит/сек, была выбрана, во-первых, с учетом обеспечения максимальной надежности передачи данных на большие расстояния, и, во-вторых, с учетом быстродействия наиболее широко распространенных типов микроконтроллеров, которые в основном должны использоваться при реализации ведущих устройств однопроводной шины. Это значение скорости обмена может быть уменьшено до любого возможного значения благодаря введению принудительной задержки между передачей в линию отдельных битов данных (растягиванию временных слотов протокола). Или увеличено за счет перехода на специальный ускоренный режим обмена (скорость Overdrive - до 125Кбит/сек), который допускается для отдельных типов однопроводных компонентов на небольшой по расстоянию, качественной, не перегруженной другими приборами линии связи.

Пожалуй, особенно привлекательным качеством технологии 1-Wire является исключительная простота настройки, отладки и обслуживания сети практически любой конфигурации, построенной по этому стандарту. Действительно, для начала работы достаточно любого персонального компьютера, недорогого адаптера 1-Wire-линии, а также свободно распространяемой фирмой Dallas Semiconductor Corp. программы iButton Viewer. При наличии этого небольшого числа составляющих контроль и управление сетью практически любой сложности, построенной на базе стандартных однопроводных компонентов, организуется буквально в течение нескольких минут. Программа iButton Viewer, в этом случае, позволяет с максимальным комфортом для разработчика идентифицировать любое из ведомых однопроводных устройств на линии и проверить в полном объеме правильность его функционирования в составе конфигурируемой сети.

Организация ведущих

Отдельные виды адаптеров, которые позволяют наделить любой персональный компьютер возможностью обслуживать в качестве мастера 1-Wire-сеть, выпускаются самой фирмой Dallas Semiconductor Corp. К ним относятся адаптеры для параллельного порта типа DS1410E, для COM-порта типа DS9097E и DS9097U, для USB-порта типа DS9490R. Эти приборы имеют различные функциональные возможности и конструктивные особенности, что обеспечивает разработчику максимальную свободу выбора при конструировании. А наличие у пользователя небольших навыков в создании электронной аппаратуры, позволяет легко произвести самостоятельную сборку схемы простейшего адаптера 1-Wire-сети для компьютера из небольшого числа доступных электронных компонентов.

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

А для организации мастера однопроводной системы на базе микроконтроллеров с 3хвольтовым питанием поставляются пассивные микросхемы DS1482, выполняющие согласование с уровнями сигналов стандартной 1-Wire-магистрали. Если же мастер однопроводной линии должен быть организован на базе стандартного узла последовательного интерфейса UART микроконтроллера, используется микросхема DS2480В, а микросхема DS2490 адаптирует однопроводную линию для работы от встроенного узла UBS-интерфейса. Обе микросхемы реализуют так называемый программируемый механизм активной подтяжки шины данных 1-Wire-магистрали, обеспечивающий качественную передачу сигналов в длинных проблемных линиях и увеличение нагрузочной способности ведущего по количеству обслуживаемых им ведомых устройств. Кстати большинство выше упомянутых адаптеров для персональных компьютеров, также построены на базе подобных микросхем. Более того, учитывая особенности работы современных операционных сред Windows, использование именно этих компонентов, которые по своей сути являются управляемыми по последовательному интерфейсу цифровыми автоматами, обеспечивает полномасштабное обслуживание однопроводных линий в реальном масштабе времени.

При построении сложных законченных микропроцессорных систем, имеющих дефицит машинного времени для реализации 1-Wire-протокола, наиболее рациональной является идея о возложении отдельной задачи по обслуживанию однопроводной линии на специальный узел заказной или полузаказной СБИС, для последующего сопряжения такого цифрового автомата, через системную магистраль, непосредственно с основным процессорным узлом. Фирма Dallas Semiconductor Corp. даже разработала набор рекомендаций по организации подобного узла под названием DS1WM, который был реализован, в том числе, специалистами Xilinx Inc. в виде законченного практического примера для программируемых перестраиваемых матриц семейств Virtex и Spartan. Более того, и Dallas Semiconductor Corp., которая в том числе известна как поставщик высокоскоростных контроллеров клона MCS51, выпускает специализированный связной микроконтроллер DS80C400, который содержит встроенный в кристалл автомат поддержки 1-Wire-протокола с возможностью реализации механизма активной подтяжки.

Достаточно перспективным представляется также направление, связанное с применением карманных компьютеров (или PDA (Personal Digital Assistant)) популярных платформ PalmOS, Handspring и WinCE/PocketPC для обслуживания однопроводных компонентов, в том числе работающих в составе 1-Wire-сетей. При этом, для подключения PDA к однопроводной шине применяют специализированные адаптеры последовательного порта, которые отличаются малым потреблением и построены на базе схемных решений, использующих выше перечисленные микросхемы сопряжения с 1-Wire-линией. Именно такой подход в настоящее время является наиболее рациональным при организации автономных и мобильных 1-Wire-систем.

Проблема подготовки программного обеспечения для управления мастером линии при обслуживании 1-Wire-сетей, также не представляется неразрешимой. Фирмой Dallas Semiconductor Corp. свободно распространяется профессиональный программный пакет разработчика iButton TMEX SDK, являющийся универсальным средством для профессиональных программистов, который значительно упрощает процесс создания программ для обслуживания однопроводных устройств, подключенных через стандартные типы адаптеров к персональным компьютерам, которые оснащены операционной системой Windows. Он содержит комплект отлаженных драйверов и утилит для реализации полномасштабного 1-Wire-протокола. В качестве среды взаимодействия с разработчиком пакет iButton TMEX SDK использует специальный стандартизованный программный API-интерфейс. Кроме того, с fttp-сервера кампании Dallas Semiconductor Corp. свободно доступен ряд примеров реализации 1-Wire-протокола для некоторых, наиболее популярных видов микропроцессоров, а также готовые библиотеки функциональных программных модулей однопроводного интерфейса для различных программных платформ.

Ведомые однопроводные компоненты

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

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

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

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

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

Тем не менее, самой фирмой Dallas Semiconductor Corp. в качестве стандартного "мостика" обмена между любыми схемами, построенными на микроконтроллерах различных типов, и 1-Wire-сетями рекомендуется применение специализированной двухпортовой статической памяти DS2404. Поскольку к массиву памяти этого прибора возможен доступ, как со стороны однопроводной шины, так и со стороны подчиненного последовательного интерфейса, управляемого микроконтроллером, обмен информацией между ведущим сети и подчиненным интеллектуальным устройством, решающим какую-либо локальную задачу, производится достаточно легко. Более того, благодаря наличию в составе микросхемы DS2404 дополнительного узла часов реального времени и календаря, возможно снабжение данных, сохраняемых процессором в общем массиве памяти, индивидуальными временными метками.

На базе узла часов реального времени кристалла DS2404 кампанией Dallas Semiconductor Corp. выпускается еще два компонента, весьма полезных для создания однопроводных систем автоматизации. Это устройства DS2415 и DS2417. Применяя любой из этих приборов можно организовать дешевые часы/календарь с однопроводным сетевым интерфейсом. Кроме того, второе устройство благодаря наличию в его составе отдельного вывода прерывания, может также дополнительно управлять по времени переключением внешнего оборудования или обеспечивать синхронизацию работы других устройств с процессами, происходящими на 1-Wire-линии.

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

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

Некоторые компоненты 1-Wire-сетей содержат в своем составе массив постоянной (однократно заполняемой пользователем) или энергонезависимой памяти того или иного объема. Это позволяет хранить специальную служебную информацию, связанную с применением конкретного компонента и особенностями его использования (идентификатор, территориальное положение, калибровочные коэффициенты, размерность, значение уставок по умолчанию и т.д.), непосредственно в составе однопроводного прибора. Благодаря этому для организации работы каждой новой однопроводной сети не нужно готовить отдельное специальное программное обеспечение, достаточно иметь одну стандартную программу, которая переконфигурируется в зависимости от специфики конкретной системы (конечно, если память всех компонентов 1-Wire-системы заполнена в соответствии с определенными, заранее оговоренными правилами). Если же в процессе работы системы требуется хранить дополнительные объемы информации, в распоряжении разработчика имеются специальные однопроводные приборы, содержащие как постоянную (DS2502/ DS2505/ DS2506), так и энергонезависимую (DS2430A/ DS2432/ DS2433) память различных объемов.

Целый ряд компонентов семейства iButton в корпусах MicroCAN также может быть использован в составе 1-Wire-сетей в качестве ведомых однопроводных устройств, которые решают специфические задачи идентификации, накопления, хранения и переноса информации. Например, для реализации процедуры идентификации в системах промышленной автоматизации обычно достаточно применения распространенных носимых электронных меток DS1990A. А многоточечный температурный мониторинг легко может быть выполнен сетью из нескольких приборов DS1921# или иначе устройств ТЕРМОХРОН, каждое из которых регистрирует температурные значения, измеренные через определённые, заранее заданные, промежутки времени и сохраняет полученную информацию в собственной энергонезависимой памяти, по существу, являясь программируемым "температурным магнитофоном". Для решения проблемы переноса данных, накопленных автономной 1-Wire-системой, к персональному компьютеру выпускаются разнообразные приборы iButton, которые в этом случае играют роль, так называемых, "транспортных таблеток". К подобным устройствам, прежде всего, относятся приборы энергонезависимой памяти, включающие в состав своей конструкции литиевый элемент питания. Это целый ряд "таблеток" начиная с DS1992 (1Кбит) до DS1996 (64Кбита), и среди них, конечно, модификация DS1994 (4Кбита), содержащая дополнительно узел часов реального времени, удобный для генерации временных меток сохраняемых данных или для организации автономных логгеров ресурса.

Кроме того, для этих же целей могут быть использованы приборы с электрически стираемой памятью типа EEPROM модификаций DS1971(32байта), DS1973(512байт) и DS1977(32Кбайта). При перемещении больших массивов информации "транспортную таблетку" удобно использовать совместно с адаптером USB-порта типа DS9490B, который обеспечивает высокую скорость передачи при обмене данными между устройством iButton и персональным компьютером. Если же речь идет только о решении задачи накопления и хранения данных в 1-Wire-сети, любая из перечисленных выше "транспортных таблеток" может быть легко включена в состав подобной сети. При этом для подключения приборов в корпусах MicroCAN к проводникам однопроводной линии используют специальные защелки типа DS9100 или DS9098P, или же более простые зажимы типа DS9094.

С точки зрения схемотехнической реализации однопроводного интерфейса и устойчивости работы на проблемных линиях все ведомые однопроводные компоненты исторически отличаются друг от друга, делясь при этом на группы:
1. DS2401, DS2405 - первые приборы с 1-Wire-интерфейсом в пластиковых корпусах, полностью аналогичны по схемотехнике первым моделям приборов iButton, которые были ориентированные для работы на коротких шинах (до 1994 года),
2. DS1820, DS2407P, DS2450, DS2404, DS2415, DS2417, DS1920 и т.д. - вторая версия, специально ориентированная для работы на длинных линиях (до 2000 года сейчас эти компоненты в основном снимаются с производства),
3. DS18S20, DS18B20, DS1822, DS2438, DS2406P, DS2409, DS2890, DS1973 и т.д. - третий вариант, более устойчивый к коллизиям на 1-Wire-магистрали по сравнению с предыдущим (с 2000 года),
4. DS2411, DS2408, DS1921#, DS1977 и т.д. - последний вариант, наиболее удачной по надежности схемотехники 1-Wire-интерфейса (c 2003 года).

Линия связи и топология

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

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

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

Применения

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

Наиболее последовательно отстаивает линию на использование технологии 1-Wire-сетей в области автоматизации американская фирма Embedded Data Systems, LLC (приемница PointSix, Inc.). Можно сказать, что эта кампания сделала себе имя на внедрение и пропаганде достижений однопроводной шины в области автоматизации. И это, не смотря на то, что основной областью ее деятельности является не автоматизация оранжерей и не создание систем пожарной сигнализации, а разработка средств и систем для обслуживания высокотехнологичных отраслей машиностроения и химической промышленности, и даже создание уникального экспериментального и научного оборудования. Подтверждением этому служит широчайший спектр продукции, который выпускается фирмой (разнообразные зонды для измерения высоких и низких температур, датчики влажности, давления и кислотности с особыми функциями, специальные оптические сенсоры, платы сбора информации, устройства сопряжения с различным аналитическим оборудованием и многое другое), причем каждый из приборов содержит элементы однопроводной технологии.

К перспективным примерам в области применения 1-Wire-технологии для автоматизации, несомненно, можно отнести деятельность таких известных мировых производителей как SYSTRONIX или AAG Electronica. LLC.

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

Другим примером, наглядно демонстрирующим на практике возможности технологии однопроводной шины, является проект построения полностью автоматических метеорологических станций (1-Wire Weather Station), который разрабатывался совместно фирмами PointSix, Inc., AAG Electronica LLC, Dallas Semiconductor Corp. и Texas Weather Instruments, Inc. Вначале (еще в середине 90-х годов) было создано несколько экспериментальных систем, построенных на базе ведущего персонального компьютера с адаптером DS9097U, который является сердцем комплекса, из трех термометров DS18S20, выполняющих контроль температуры, микросхемы DS2438 для обслуживания датчика влажности воздуха, компонента DS2423 для определения скорости ветра и 16-ти электронных меток DS2401 определяющих его направление. Эти первые метеосистемы были установлены и успешно испытаны в процессе длительной эксплуатации в штате Техас. Причем отдельные из них комплектовались дополнительными однопроводными решениями, которые обеспечивали контроль сигналов от датчиков: барометрического давления, разрядов молнии, количества осадков на поверхности, солнечной активности, влажности почвы и т.д. Данные со всех сенсоров, регистрируемые каждой из подобных систем, поступали в персональный компьютер и через Интернет транслировались в режиме реального времени на центральный операторский пульт, где выполнялся прием и архивация данных о погоде региона, получаемый благодаря анализу информации от нескольких территориально рассредоточенных станций. После успешного завершения проекта Texas Weather Instruments Inc. уже на протяжении нескольких лет успешно торгует готовыми полностью автоматическими метеостанциями, не требующими обслуживания человеком. Причем популярность подобных устройств настолько велика по всему миру, что фирма Dallas Semiconductor Corp. была вынуждена начать производство специализированного набора микросхем WS-1, который включает комплект однопроводных компонентов, минимально необходимый для построения подобной станции. А полную комплектацию подобных систем для многочисленных пользователей со всего мира, включая платы для самостоятельной сборки, сертифицированные механические и конструкционные элементы, выполняет фирма AAG Electronica LLC.

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

В настоящее время кампания Dallas Semiconductor Corp. выпускает целый ряд прецизионный кристаллов для мониторинга, менеджмента, защиты и управления восстановлением заряда автономных источников питания самых различных типов и назначений (DS2720, DS2740, DS2751, DS2770 и т.д.). К ним, в том числе, относятся кристаллы семейства DS276#, которые в отличие от иных модификаций подобных устройств, требующих внешней обвязки с использованием прецизионных и стабильных пассивных компонентов, обеспечивают более высокую точность при контроле тока, расходуемого контролируемой батареей. Это достигается, в том числе, за счет встроенной калиброванной резистивной схемы (шунта), выполненной по специальной полупроводниковой технологии, а также благодаря наличию в составе подобных приборов специального аппаратно-программного механизма предварительной калибровки.

Ограничения и сопряжение с промышленными сетями

Безусловно, 1-Wire-сети имеют свою нишу для применения при построении систем автоматизации. Бессмысленно всерьез использовать их для передачи больших массивов информации, при построении, к примеру, систем видео-наблюдения или скоростного обмена, связанных с обслуживанием быстрых процессов, или же сравнивать возможности однопроводных сетей с такими мощными сетевыми промышленными интерфейсами, как ProfiBus, FeldBus, LonWorks, CAN, Industrial Internet и т.д. Можно даже сформулировать основные на сегодняшний день ограничения для применения систем на базе однопроводных 1-Wire-сетей в области автоматизации:

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

Как видно из замечаний приведенных в скобках, даже эти очевидные для 1-Wire-сетей, трудности не являются непреодолимыми. Более того, существуют подходы, позволяющие органично интегрировать медленные однопроводные территориально рассредоточенные структуры в состав таких производительных сетей как CAN и Industrial Internet. Это достижимо благодаря применению специальных аппаратно-программных решений, реализуемых на базе современных микроконтроллеров, а так же уникального инструмента кампании Dallas Semiconductor Corp. - устройства TINI (Tiny InterNet Interface ).

TINI400 - это целая микросистема, основой которой является центральный процессор, реализованный на высокопроизводительном сетевом микроконтроллере DS80С400, который объединяет ресурсы целого ряда наиболее распространенных сетевых интерфейсов, как-то: RS232, 1-Wire, CAN 2.0B, Ethernet, не говоря о возможности использования параллельной шестнадцатиразрядной синхронной магистрали, а также автономных узлов для организации стандартных локальных последовательных интерфейсов I2C и SPI. Кроме того, плата TINI400 содержит 1Мбайт программной Flash-памяти, 1Мбайт статического ОЗУ, узел часов реального времени, литиевую батарею и кремниевый идентификационный номер. Работает TINI400 под управлением мощной операционной среды, которая включает в себя поддержку TCP/IP и виртуальной машины Java, которая тщательно отработана и испытана еще на модели TINI предыдущего поколения - плате TINI390. Последнее определяется тем фактом, что технология программной поддержки для TINI390 на протяжении нескольких лет развивалась специалистами Dallas Semiconductor Corp. совместно с сотрудниками компании Sun Microsystems, Inc., являясь при этом полностью открытым проектом. Такой подход позволил иметь максимально эффективную обратную связь с конечными пользователями, что помогло выявить и устранить большинство недостатков программного обеспечения. И сейчас на сайте Dallas Semiconductor Corp. можно найти всю необходимую документацию и средства разработки программного обеспечения, что значительно облегчает построение на базе устройства TINI локальных однопроводных систем удаленного контроля и управления, объединяющих достоинства быстрых и производительных, но дорогих, и медленных, но дешевых и эффективных интерфейсов.

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

Интерфейс 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 (но это может нарушить нормальную работу некоторых устройств).
Просмотров: 12942

Моргания лампочки и замыкание контактов - дело интересное и полезное для первых шагов. Но, как все мы помним со школы, чем нагляднее эксперимент, тем он интереснее. Я продолжу развивать проект из предыдущих серий, и сегодня мы прикрутим термодатчик 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

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

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

Оборудование с доступом по 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

Технология достаточно старая и широко употребляемая

Изначально, выведена на рынок компанией Dallas - Все помнят таблетки для домофонов iButton- это оно

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

Я провел массу экспериментов с данным стандартом. Изначально, предполагая очень широко использовать его для управления Умным Домом

Хуже всего, если для управления 1-wire шиной не использовать никаких специализированных контроллеров (подключение напрямую к PIN у Arduino устройств) - в этом случае, проблемы возникают уже при длине кабеля более 3-х метров

Для моих целей такое расстояние не подходило, поэтому я использовал I2C to 1-wire мост DS2482-100

Стоимость чипа на Aliexpress менее 100 руб, чип имеет аппаратный драйвер шины с режимом strong-pullup, что в разы увеличивает надежность работы системы.

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

У себя я использую шлейф длиной около 150 м.

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

Контроллер опрашивает датчики циклично, поэтому, единичные сбои не влияют на функционирование.

Кроме термометров, я пробовал использовать самую разнообразную перефирию, вооружившись Datasheet - ами написав множество процедур для управления следующими чипами и устройствами на их базе:

Если коротко - себя это не оправдало

Основная проблема - все же не очень хорошая помехозащищенность

Борьба с помехами в сети 1-Wire

Это, пожалуй, самое непростое в данной технологии. Описываю свой опыт:

  • Шину 1-Wire прокладывайте на расстоянии от высоковольтных проводов, трансформаторов LED освещения и проводов LED освешения (провода дают сильную помеху за счет того, что сила тока велика и используется ШИМ модулирование)
  • Не надо использовать экранированную витую пару. Я проложил STP 5-й категории, но при попытке заземлить экран - связь полностью теряется. Предполагаю, что это связано с увеличением емкости проводника.
  • По отзывам, невитая пара (самый дешевый двужильный провод) дает лучший результат.
  • Хороший опыт - подтягивать дальний конец провода через резистор 3-4 КОм к стабилизированному фильтрованному источнику питания 5Вольт.
  • Отводы от шины в 2-3 метра, в целом, не ухудшают качества работы системы, но прилично упрощают монтаж.
Понравилась статья? Поделитесь с друзьями!
Была ли эта статья полезной?
Да
Нет
Спасибо, за Ваш отзыв!
Что-то пошло не так и Ваш голос не был учтен.
Спасибо. Ваше сообщение отправлено
Нашли в тексте ошибку?
Выделите её, нажмите Ctrl + Enter и мы всё исправим!