Spkb-optics.ru

СПКБ Оптик
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

1 wire выключатель света

  • Home
  • Форум
  • Вики
  • Твиттер

Сеть 1-Wire в «полевых условиях»

  • Скачать проект платы-подавителя помех в формате Eagle.

12 комментариев:

Большое спасибо за такую познавательную статью!
У меня возник вопрос. Есть микроконтроллер (какой нить Atmega) и датчик DS18B20, можно ли их соединить кабелем 100м без всяких усилителей (на транзисторах и т.д.), тоесть просто подключить к какому нить пину микроконтроллера. Питание не паразитное.

Да, вполне возможно! Именно такое подключение я и описывал. 100м — «серьезная дистанция» для нежной ножки MCU, посему очень рекомендую, использовать экранированный 3-х проводный кабель сечением 0,75мм и как минимум — два диода Шотки между GND, Data и VCC.

спасибо за ответ!
Еще вопрос: я хочу подключить датчик к одной ноге так как мне надо сделать сеть типа «звезда» в которой будет 10 датчиков (на каждой ветви по одному). Я решил к 10 ножкам микроконтроллера подключить по 1 датчику проводом 100м. Но может вы знаете более подходящее решение? Подключение звездой обязательно

а автор не экспереметировал с датчиками попроще ? то есть цифровыми и БЕЗ 1-WIRE

а то роюсь по прайсам местных магазинов и ничего кроме датчиков от 10 уе (без 1-wire) и DS18B20 не могу найти

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

Прошу прощения, что встреваю: а о каких таких датчиках «цифровыми, но не 1-Wire» идет речь?

DS18B20 в своем классе точности и диапазоне — самое удачное решение среди полупроводниковых термодатчиков, 1-Wire позволяет для подключения N датчиков использовать всего один DIO MCU. Мнимая сложность программирования компенсируется многочисленными примерами кода и библиотеками в свободном доступе.

Ну а цена его — 2-3 USD, и если речь про экземпляры за 10 у.е. — это скорее всего не полупроводниковый или лучшая точность (диапазон у полупроводникового шире быть не может).

да действительно порылся на предмет датчиков подешевле — ничего нет 🙁 подороже с более высоким классом точности или в более сложным исполнением

и еще вопросик вы опрашиваете все подряд или или каждый по отдельности

если каждый по отдельности поделитесь или скетчем или куском кода а то роюсь уже несколько часов ничкго путного найти не могу 🙁

А чем Вас стандартный пример из библиотеки oneWire не устраивает?

Там вполне все вполне прозрачно, лишнее просто выкидывается (или комментируется),а остаток оформляется как своя функция.

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

Проблема решается когда cat5 используется в качестве 4х проводной линии с внешним дополнительным питанием: GND, DATA, +12В, +18В.

Схема немного усложняется, добавляется 5В стабилизатор на шину +12В (для питания датчиков), и 12В стабилизатор на шину +18В (для питания относительно слаботочных исполнительных устройств если это необходимо)

Здравствуйте! Прислали из Китая сотню SMD-чипов, написали что это фербиды BLM21AG221. Маркировки на них никакой нет, тестер показывает почти нулевое сопротивление. Это похоже на правду? Есть ли какие-то другие способы проверить что это действительно они?

перезалейте картинки, не видно

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

Работа устройства.

Работа с устройством осществляется посредством чтением или записью данных в его адресное пространство, все адресное пространство составляет 128 байт. Начало адресного пространство носит дополнительную функциональность (Смотрите таблицу), после адреса 0x20 обычная EEPROM и ее можно использовать по своему усмотрению.

Коммуникации с устройством осуществляются по шине 1-wire, поддерживаются следующие команды.

  • 0xF0 : Поиск устройств на шине.
  • 0x33 : Устройство выдаст 8 байтный адрес.
  • 0x55 : Читает с шины адрес, и если он соответствует адресу устройства, переходит в режим приема команд.
  • 0xCC : Выбор устройства без использование адреса. Пойдет если устройство одно на шине, либо надо выполнить широковещательную команду.

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

Процесс чтения/записи состоит в передаче мастером 1-ым байтом комманды чтения(READ_BYTE:0x20) или записи(WRITE_BYTE:0x1F) и вторым байтом адреса ячейки, далее в зависимости от комманды. При чтении: устройство передает последовательно 2 байта, из которых первый байт значение ячейки, а второй это контрольная сумма (crc8) двух байт — адреса ячейки и его значения. При записи в устройство, все тоже самое, только мастер ничего не читает, а передает 2 байта: значение и контрольную сумму.

Внимание: Для работы с шиной 1-wire, она должна быть притянута к +5V резистором, величина которого обычнно равна 4.7К, но если у вас длинная шина — величину надо взять поменьше.

Распределение адресного пространства

Адресное пространство устройства

0x000x010x020x030x040x050x060x070x080x090x0A0x0B0x0C0x0D0x0E0x0F
0x00Serial numberPORTDDRPINPWRRESTRACTIONРезерв
0x10Резерв
0x20EEPROM Общего назначения
0x30
0x40
0x50
0x60
0x70
Read/WriteRead OnlyWrite OnlyНе определено

(0x00 — 0x04) — это проекция части серийного номера, та часть что отличается у разных изделий. смотрите рисунок.

(0x05 — 0x07) — PORT/DDR/PIN, три регистра отвечающие за восьмиразрядный порт ВВ, более подробно можно ознакомится напрмер здесь

  • PORT — регистр отвечает за состояние выводов порта.
  • DDR — регистра направления.
  • PIN — регистр чтения из порта.

(0x08) — Порт реле, запись в этот порт числа отличного от нуля, включит реле, ноль соответсвенно отключит.

(0x09-0x0A) — RESTR/ACTION. Регистр RESTR отвечает за восстановление состояния портов ввода-вывода при перезагрузке (включении питания), данный регистр можно записывать в любой момент времени. если бит установлен то при перезагрузке состояние порта будет восстановлено.

Назначение битов конфигурационного байта RESTR (0x09)

0x000x010x020x030x040x050x060x07
SPWRSPRTРезерв

Портов всего два, это восьмибитный порт ввода/вывода (бит 0x01), и порт реле установленного на устройстве (бит 0x00). Состотяние же которое будет восстановлено, предварительно необходимо сохранить, делается это при помощи записи тех же битов в регистр ACTION, при записи в этот регистр (соответствующего бита) в память EEPROM будет сохранено текущее состояние порта ввода/вывода. В случае сохранения восьмибитного порта сохранено будет состояние всех трех регистров (PORT/DDR/PIN) отвечающих за работу порта.

В качестве примера простой скетч для Ардуино

Для работы данного скетча необходимо скачать и установить прилагаемую библиотеку dg2313w, также потребуются библиотека OneWire из стандартных библиотек.

Можно ли поставить Wi-Fi-выключатель вместо обычного

Многие Wi-Fi-выключатели имеют такие же установочные габариты, как и у обычных. Логично предположить, что их специально проектируют так, чтобы можно было обычный вытащить, Wi-Fi поставить. Но взглянем на классическую схему подключения обычного выключателя:

Схема подключения настенного выключателя

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

Этот Wi-Fi-выключатель ставится вместо обычного без доработок

Полезно! Если подвести в установочную коробку нулевой провод от ближайшей розетки, то на место обычного можно поставить и Wi-Fi-выключатель, требующий нуля. Это неудобно, но реально.

Технические характеристики

Напряжение питания 3 В, элемент питания CR2450

Расчетное время работы без замены элемента питания до 14 лет

Частота передачи 868 мГц

Максимальная дальность передачи 250 метров в прямой видимости

Температурный диапазон эксплуатации от 0°C до +50°C

Габаритные размеры 80x80x11 мм

Не забудьте заказать одноканальное выносное радиореле к сенсорному радиопульту

О товаре


Управление нагрузкой (освещением). Подключение радиореле к нагрузке (освещению)

Подключение сети 220 вольт:
Коричневый провод:
L фаза 220 вольт.
Синий провод: N нейтраль.

Подключение нагрузки (освещения):
Красный провод:
L1 фаза 220 вольт.
Синий провод: N нейтраль.

Режим ознакомления (регистрации) с одноканальным сенсорным радиопультом.

Нажмите и удерживайте кнопку SET/RESET на 1-2 секунды до момента, когда загорится красный светодиод. Радиореле готово к приему команды от радиопульта

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

ВНИМАНИЕ! Режим ознакомления включается автоматически, если в памяти радиореде нет ни одного зарегистрированного радиопульта, либо после выполнения режима RESET и индицируется попеременным свечением красного и зеленого светодиода. Если в режиме ознакомления будет передана команда от уже ранее зарегистрированного радиопульта, никаких действий по ознакомлению не происходит. Зеленый светодиод произведет индикацию его порядкового номера. Далее автоматически включится дежурный режим. Сама команда управления при ознакомлении не выполняется. При завершении процесса ознакомления красный светодиод на радиореле моргнет несколько раз. Количество вспышек светодиода соответствует записанному в память радиореле порядковому номеру радиопульта.

Пример размещения радиореле

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

Закрепите на стене специальную пластиковую рамку с помощью двух саморезов в отверстия (А) или приклейте ее на ровную поверхность с помощью двухстороннего скотча. ВНИМАНИЕ. Монтировать рамку к стене нужно так, чтобы прорези на рамке были направлены вниз. Вставьте корпус панели в специальную пластиковую рамку (3). Нажмите на панель до щелчка (4).

Снятие сенсорной панели радиопульта

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


Протокол связи

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

Сеть 1-Wire представляет собой одиночный провод с открытым стоком и одним подтягивающим резистором . Подтягивающий резистор протягивает провод до 3 или 5 вольт. Главное устройство и все подчиненные устройства имеют одно соединение с открытым стоком для управления проводом и способ определения состояния провода. Несмотря на название «1-Wire», все устройства также должны иметь второй провод, соединение с землей, чтобы позволить обратному току течь через провод данных. Связь происходит, когда ведущее или ведомое устройство ненадолго переводит шину в низкий уровень, т. Е. Подключает подтягивающий резистор к земле через свой выходной МОП-транзистор. Провод данных находится под высоким напряжением в режиме ожидания, поэтому он также может питать ограниченное количество ведомых устройств. Может быть достигнута скорость передачи данных 16,3 кбит / с. Также есть режим овердрайва, который ускоряет связь в 10 раз.

Короткая шина 1-Wire может управляться одним цифровым выводом ввода / вывода микроконтроллера. Универсальный асинхронный приемопередатчик (УАПП) , также могут быть использованы. Доступны специальные микросхемы драйверов и мостов 1-Wire . Также доступны «мостовые» микросхемы универсальной последовательной шины . Мостовые микросхемы особенно полезны для прокладки кабелей длиной более 100 м. Изготовителем протестированы витые пары длиной до 300 метров , то есть телефонные кабели. Эти экстремальные длины требуют регулировки сопротивления подтягивания от 5 до 1 кОм .

Мастер начинает передачу импульсом сброса , который подтягивает провод к 0 вольт в течение не менее 480 мкс . Это сбрасывает все ведомые устройства на шине. После этого любое подчиненное устройство, если оно присутствует, показывает, что оно существует, с помощью импульса «присутствия»: оно удерживает на шине низкий уровень в течение не менее 60 мкс после того, как мастер освобождает шину.

Чтобы отправить двоичное число «1», мастер шины отправляет очень короткий ( 1–15 мкс ) импульс низкого уровня. Чтобы отправить двоичное число «0», мастер отправляет низкий импульс 60 мкс. Спадающий (отрицательный) фронт импульса используется для запуска моностабильного мультивибратора в ведомом устройстве. Мультивибратор в ведомом устройстве считывает строку данных примерно через 30 мкс после спада. Внутренний таймер ведомого устройства представляет собой недорогой аналоговый таймер. Он имеет аналоговые допуски, которые влияют на его точность синхронизации. Следовательно, импульсы рассчитываются с учетом допустимых пределов. Следовательно, импульсы «0» должны быть длительностью 60 мкс, а импульсы «1» не могут быть длиннее 15 мкс.

При получении данных мастер посылает импульс 0 В длительностью 1–15 мкс для запуска каждого бита. Если передающее ведомое устройство хочет отправить «1», оно ничего не делает, и шина переходит на повышенное напряжение. Если передающее ведомое устройство хочет отправить «0», оно подтягивает линию данных к земле на 60 мкс .

Основная последовательность — это импульс сброса, за которым следует 8-битная команда, а затем данные отправляются или принимаются группами по 8 бит.

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

Многие устройства могут использовать одну и ту же шину. Каждое устройство на шине имеет 64-битный серийный номер, 8 битов которого используются в качестве контрольной суммы, что позволяет создать «совокупность» из 2 56 (более 7,2 × 10 16 ) уникальных идентификаторов устройств. Младший байт серийного номера представляет собой 8-битовое число , которое указывает тип устройства. Старший байт является стандартным (для шины 1-Wire) 8-битовый ЦИК.

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

Протокол перечисления шины 1-Wire, как и другие протоколы сингуляции , представляет собой алгоритм, который мастер использует для чтения адреса каждого устройства на шине. Поскольку адрес включает в себя тип устройства и CRC, восстановление списка адресов также обеспечивает надежную инвентаризацию устройств на шине. Чтобы найти устройства, мастер передает команду перечисления , а затем адрес, «прослушивая» каждый бит адреса. Если адрес ведомого устройства совпадает со всеми переданными адресными битами, он возвращает 0. Ведущее устройство использует это простое поведение для систематического поиска действительных последовательностей адресных битов. Этот процесс намного быстрее, чем перебор всех возможных 56-битных чисел, потому что, как только обнаруживается недопустимый бит, все последующие биты адреса становятся недействительными. 56-битное адресное пространство просматривается как двоичное дерево, что позволяет обнаруживать до 75 устройств в секунду. Порядок, в котором адреса устройств обнаруживаются этим протоколом перечисления, детерминирован и зависит только от типа и серийного номера устройства. Инверсия этих 56 бит дает порядок обнаружения для устройств, использующих опубликованный алгоритм Maxim (алгоритм, определенный в примечаниях к применению 187). Алгоритм поиска может быть реализован в альтернативной форме, первоначально поиск путей с адресными битами, равными 1, а не 0. В этом случае инвертирование 56 адресных битов, а затем их реверсирование дает порядок обнаружения.

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

Теоретическая часть

Везде в Интернете в описаниях шины 1-Wire и поддерживающих ее устройств написано, что процедура поиска устройств SEARCH_ROM (0xF0) сложна и непонятна. На самом деле, не так уж она и сложна, если понять принцип. А принцип я сейчас попытаюсь доступно изложить.

Подробно устройство шины 1-Wire я описывать не буду. Желающих узнать подробности могу отослать к хорошей статье, поясняющей ее работу как на низком, так и на высоком уровне: http://radiokot.ru/articles/13/

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

Соответственно то, что получает микроконтроллер из шины, является логическим «И» ответов всех устройств. Т.е. если все устройства отвечают в линию логической «1», то 1 AND 1 AND 1 и т.д. дает в результате ту же «1». Если же одно или несколько устройств отвечают «0», то вся шина просаживается в «0» даже если другие устройства ответили «1». Собственно, с точки зрения шины, для передачи «1» устройству вообще ничего не нужно делать, т.к. она итак подтянута к «1» резистором.

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

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

После того, как PRESENCE получен, ведущее устройство начинает поиск, отправляя в шину либо команду 0xF0 (SEARCH ROM) либо 0xEC (ALARM SEARCH). Команду 0xEC мы рассматривать не будем, т.к. она является частным случаем команды SEARCH ROM и предназначена для поиска устройств в состоянии ALARM. Подробнее об этом можно почитать в даташитах к устройствам.

Получив команду SEARCH ROM, каждое устройство передает первый бит своего кода ПЗУ и дополнение этого бита (грубо говоря — его инверсию). Приняв от устройства первый бит и его дополнение, мы должны в подтверждение отправить этот первый бит назад, в шину. Но! Все устройства делают это одновременно, так что контроллер получает логическое «И» первых битов кодов и логическое «И» их дополнений. Что именно передавать в шину в качестве подтверждения? А вот что: на основании бита и его дополнения производится анализ:

  • Если бит = дополнение = «1», это значит, что на линии нет готовых устройств, т.е. никто не ответил. В этом случае поиск прекращается.
  • Если биты не равны, т.е. бит = 0, а дополнение = 1 или наоборот — это значит, что у всех устройств этот бит совпадает. Этот случай простой — мы просто записываем к себе этот бит и переходим к следующим операциям
  • Если бит = дополнение = «0» — это значит, что у устройств первый бит кода ПЗУ не совпадает, т.е. у кого-то «1» а у кого-то «0», это сложный случай, в аппноуте он называется «Discrepancy», что можно перевести как «Различие»

Первый случай, когда бит/дополнение = «1» рассматривать нет смысла — активных устройств больше нет, поиск прекращаем.

Когда бит/дополнение не равны — тут тоже все просто, этот бит одинаков у всех устройств, так что просто запоминаем его в качестве первого бита кода ПЗУ.

Если же есть различие, т.е. бит/дополнение равны «0», тогда и начинается самое интересное. Смысл поиска в том, что приняв от устройства бит, мы должны в подтверждение отправить его назад, в шину. Поскольку в данном случае текущий бит у устройств не совпадает, мы отправляем в шину «0». Это дает нам вот что: все устройства, у которых этот первый бит был равен «1» отключаются от шины и больше не реагируют ни на что до следующего сброса! Т.е. не участвуют больше в поиске. Остаются те, у которых первый бит был равен «0». Они продолжают участвовать в поиске и готовы выслать нам второй бит своего кода, а мы записываем «0» в качестве первого бита кода ПЗУ.

Позицию, где случилось последнее различие, мы запоминаем. Она понадобится нам при следующем поиске, когда мы дойдем до этого места. Т.е. при следующем поиске в этом месте мы увидим, что направление «0» мы уже выбирали и вместо нуля пойдем другим путем: выдадим на шину «1», тем самым, отметая предыдущие устройства, которые мы уже сканировали. Направление меняется именно на последнем различии, в предыдущие различия выбираем тот же направление что и раньше. Это нужно, для того, чтобы не упустить ни одного устройства.

Итак, весь поиск сводится к последовательности:

  • 1) Принять бит кода ПЗУ и его дополнение
  • 2) На основании этих битов и последнего различия предыдущего поиска принять решение и выдать в шину направление поиска
  • 3) Запомнить полученный бит или выбранное направление в коде ПЗУ
  • 4) Если было различие — запомнить его позицию
  • 5) Перейти к приему следующего бита

Повторяется эта последовательность для каждого из 64 бит. В результате мы получим код ПЗУ одного из устройств. Затем, начинаем поиск еще раз, выбрав другое направление, в случае если встретилось последнее различие. Получим еще один номер ПЗУ. И так до тех пор, пока на шине не останется неизвестных нам устройств.

Чтобы было понятно привожу переведенную блок-схему алгоритма:

Вот в общем виде и весь принцип поиска. Здесь описан именно принцип, а не детальный план. Главное знать, как это делается. Тем, кто решит написать программу поиска самостоятельно я рекомендую изучить Application Note 187. 1-Wire Search Algorithm в первоисточнике. Если с английским туго — могу предложить свой вольный перевод этого аппноута. А теперь, перейдем от теории к практике.

Как подключить?

Гаджет с ВиФи подключается как самый обычный переключатель. Он может быть установлен вместо старого. Правда здесь есть один нюанс, на котором остановимся ниже.

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

На картинке приведена схема установки.

Необходим нейтральный провод. Эти устройства нельзя просто поставить в разрыв фазы, как обычные. Встроенный Wi-Fi модуль нуждается в постоянном питании. Поэтому, возможно придется тянуть дополнительный кабель.

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

После монтажа переключатель следует подключить к сети Wi-Fi, установить мобильное приложение и добавить новый девайс. Нужно отметить, что большинством Wi-Fi выключателей, к сожалению, нельзя управлять дистанционно без подключения к сети Интернет. Для некоторых моделей, например, Sonoff, существуют альтернативные прошивки, которые позволяют с помощью телефона управлять освещением напрямую, а не через китайские сервера.

Wi-Fi выключатель – штука очень интересная и полезная. Для тех, кому нравится идея внедрения технологий автоматизации личного жилья в свою жизнь, есть возможность начать движение по этому пути – обзавестись «умным светом». Это сделать несложно и недорого.

голоса
Рейтинг статьи
Читать еще:  Где ставят выключатель для подсветки кухни
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector