Антон Белкин

Антон Белкин

21 марта 2012

Электронное ожерелье

Электронное ожерелье

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

«Он живой и светится»

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

Кратко о принципе работы 1-Wire

Как уже было сказано, шина состоит из двух проводов: сигнального и заземленного. На шине может быть одно ведущее устройство и множество ведомых. Каждое ведомое устройство имеет свой уникальный 64-битный адрес (в микросхемы 1-wire адрес зашивается при изготовлении, гарантируется отсутствие двух чипов с одинаковыми адресами). Сигнальный провод шины подтянут к «плюсу» питания через резистор, от него питаются ведомые устройства в режиме ожидания. Передача данных осуществляется кратковременным замыканием сигнального проводника на землю: на 15 мкс для передачи «1», на 60 мкс — для «0». Во время импульса низкого уровная ведомые устройства питаются от накопительных конденсаторов, которые обычно встроены прямо в микросхему.

Электронное ожерелье

Ведомые схемы

Каждая бусина будет состоять из микросхемы приемника 1-wire и двух светодиодов разных цветов. В качестве приемника берем DS2413 — двухканальный ключ с выходным током до 20 мА, что для наших целей более чем достаточно. Вот схема подключения, ничего лишнего:

Электронное ожерелье

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

Ведущая схема

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

Электронное ожерелье

Питается устройство от ионистора — конденсатора огромной емкости (1 фарад). По сравнению с батарейками и аккумуляторами у него куча преимуществ:


Емкость ионистора, конечно, на порядок ниже, даже чем у часовой батарейки, но наша схема так мало потребляет (10 мА в импульсе, 7 мкА в режиме ожидания), что заряда должно хватать часов на пять.

Еще несколько комментариев по схеме. Конденсатор С2 можно не ставить, он был нужен в предыдущей версии проекта, на контроллере Tiny12, для генерации случайных чисел. Tiny13 позволяет делать это программно. Кнопка RESET, в принципе, тоже не нужна, но лучше её поставить, зачем — описано в разделе «Осторожно, грабли». Диод D1 защищает от переполюсовки при заряде ионистора, и просто красиво смотрится — цветная стеклянная трубочка 🙂

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

Руки — из ножен!

От слов к делу, для изготовления всей этой красоты понадобятся:

Изготовление бусин

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

Бусины изготовляются сразу по 8 штук на одной плате. Затем режем плату на кусочки, отбраковываем неудачные, оставшимся надфилем придаем желаемую форму. Фото с заготовками на разных стадиях:

Электронное ожерелье

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

Электронное ожерелье

Прежде чем нанизывать бусины на цепочку, нужно проверить их работоспособность и (ВНИМАНИЕ!) считать адреса, зашитые в каждой микросхеме, ибо после подключения всех модулей к одной шине сделать это будет сложнее. Если у вас есть адаптер 1-Wire — отлично. Если нет — нужно взять контроллер, запрограммировать на считывание адресов и подключить по очереди к каждой бусине. Подробнее о считывании будет сказано во второй части.

Изготовление ведущего модуля

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

Электронное ожерелье

Лишнее обламываем кусачками:

Электронное ожерелье

Дорабатываем надфилями:

Электронное ожерелье

Готовая плата после распайки компонентов, сверху:

Электронное ожерелье

и снизу:

Электронное ожерелье

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

Сборка

Бусины крепятся к цепочкам следующим образом: делаем из серебряной проволоки скобки и припаиваем к цепочке в заранее отмеченных местах. Используем для этого относительно тугоплавкий припой, я брал бессвинцовый (Sn 95 Ag 5).

Электронное ожерелье

Электронное ожерелье

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

Бусины припаиваем уже к скобкам, причем используя более легкоплавкий припой (можно обычный ПОС-60) и паяльник с терморегулятором, чтобы вся конструкция не отпаялась от цепи. Контакт должен быть как с лицевой стороны платы, так и с изнаночной. Важно не перепутать верх и низ. Контакт, куда идут аноды светодиодов — это верх, припаивается к длинной цепочке.

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

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

Все собрали, проверили еще раз, промыли спиртом от остатков флюса.

Электронное ожерелье

Электронное ожерелье

Зарядное устройство

Ну, устройство — это громко сказано. Схема заряжается от USB порта через резистор 47 Ом, ограничивающий начальный импульс тока. До 3 вольт ионистор заряжается за пять минут, полностью — около получаса.

Электронное ожерелье

Осторожно, грабли!

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

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

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

Програмитвание контролера:

Работа 1-Wire

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

Каждый акт взаимодействия по 1-wire начинается со сброса.

Электронное ожерелье

Ведущее устройство выдает импульс низкого уровня длительностью от 480 мкс до бесконечности. Таким образом, включение питания тоже рассматривается как сброс. После этого ведущий отпускает линию и через 200 мкс проверяет напряжение на ней. Любое ведомое устройство, если оно есть на шине, в это время должно дать ответный импульс, называемый Presence (присутствие). Если Presence принят, можно считать, что ведомые устройства обнаружены и готовы к принятию команд.

Передача данных разбита по времени на тайм-слоты, длительностью от 67 мкс. В пределах одного тайм-слота передается один бит, таким образом скорость передачи может достигать 14,9 кбит/с. Некоторые микросхемы поддерживают еще режим Overdrive, в котором слоты укорачиваются до 10 мкс, а скорость возрастает до 100 кбит/с, но мы этот режим рассматривать не будем, стандартной скорости более чем хватает.

Для передачи единицы ведущий выдает короткий импульс (5 мкс) и до конца тайм-слота отпускает линию. Для передачи ноля импульс длиннее — 60 мкс.

Электронное ожерелье

Прием данных от ведомых устройств также синхронизируется ведущим. В начале тайм-слота он дает импульс длительностью 5 мкс. Если ведомое устройство передает единицу, оно не вмешивается в процесс. Если передает ноль — удерживает линию на низком уровне в течение 20 мкс. От ведущего требуется проверить уровень напряжения через некоторое время после подачи импульса.

Электронное ожерелье

Обратите внимание! Некоторые временные параметры передачи для микросхемы DS2413 отличаются от стандартных, в datasheet’е они выделены желтым.

Адресация

Каждое ведомое устройство должно иметь свой уникальный адрес. В микросхемы, предназначенные для работы с 1-wire адреса прошиваются в процессе производства. Адрес состоит из 64 бит (8 байт), причем младший байт представляет собой код семейства микросхем (для DS2413 — 0x3A), а старший — контрольную сумму. После выбора устройства по адресу все остальные устройства не реагируют на команды до следующего сброса.

Электронное ожерелье

Команды

Устройства 1-wire управляются однобайтными командами. Существуют команды общие для всех, а также специфичные для определенных микросхем.

Общие команды:

0x33 — Read ROM. После этой команды могут быть приняты 64 бита адреса устройства. Команда работает, только если устройство на шине одно.
0x55 — Match ROM. После команды требуется передать адрес. Устройство, чей адрес совпал с переданным, продолжает отвечать на команды, остальные молчат.
0xF0 — Search ROM. Позволяет узнать адреса всех устройств на шине. Алгоритм поиска довольно сложный, желающие могут ознакомиться здесь
0xCC — Skip ROM. Выбирает все устройства на шине.
Дополнение от ploop: часто используется, если на шине есть одно единственное устройство, и передавать адрес нет смысла.
0xA5 — Resume. Выбирает устройство, выбранное в прошлый раз. Полезно при многократных обращениях к одному устройству.

Команды, специфичные для DS2413, их всего две:

0x5A — PIO Write. Управление ключами. После команды должен быть передан байт, в котором младшие два бита отвечают за состояние двух каналов. Например, 0x01 — включить первый канал, 0x02 — второй, 0x00 — все выключить. Затем нужно передать тот же байт, но в инвертированном виде (было 0x02 — стало 0xFE) для защиты от ошибок.
0xF5 — PIO Read. DS2413 может не только управлять выходными портами, но и считывать с них значения. Подробности — в документации, мы эту команду использовать не будем.

Определение адресов микросхем

Как было упомянуто в первой части статьи, перед сборкой не худо считать адреса, зашитые в купленных микросхемах, иначе мы не сможем ими управлять. Для этого предназначена специальная прошивка-считыватель. Она позволяет прочитать адрес DS2413 и записать в EEPROM контроллера, откуда его можно достать программатором.

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

Наконец, можно взять адаптер 1-wire/COM (например, такой) и считать микросхемы на компьютере.

Элементы программы
Генератор псевдослучайных чисел

Однообразно мигающее украшение очень быстро надоест, поэтому нужно воспроизводить случайные световые эффекты через случайные промежутки времени. В качестве генератора псевдослучайных чисел выбран сдвиговой регистр с обратными связями (Linear feedback shift register) как наиболее просто реализующийся на AVR. Алгоритм не содержит операций умножения, только XOR и сдвиги. Регистр разрядности 15 бит обеспечивает 32767 состояний, чего хватит на час неповторяющейся работы устройства.

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

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

Каждые 2 секунды генерируется 2 8-битных псевдослучайных числа, биты которых используются следующим образом:
4 старших бита первого числа — выбор текущего эффекта. Это может быть:

Старший бит второго числа — цвет (зеленый или оранжевый).
Оставшиеся биты кодируют номера первого, второго и третьего светодиода для одиночных вспышек (группами по 3 бита). Так как 3 бита кодируют номера от 0 до 7, а всего звеньев 10, для второй вспышки номер увеличивается на 1, для третьей — на 2. Таким образом охватывается весь диапазон, и это проще, чем брать четырехбитные номера и контролировать границы.

Тактирование

Контроллер Tiny13 имеет два встроенных источника тактового сигнала — 9,6 и 4,8 МГц, кроме того, можно включить делитель тактовой частоты. Чем частота ниже, тем ниже энергопотребление контроллера. С другой стороны, слишком низкая частота не позволит задать временные интервалы для протокола 1-wire. При написании прошивки на ассемблере удалось добиться работы на частоте 1,2 МГц, при этом самый короткий отмеряемый интервал составил всего три такта. Для прошивки на C такого быстродействия достичь не получилось, минимальная тактовая частота — 4,8 МГц.

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

Fuse-биты

Для конфигурирования контроллера служит набор так называемых fuse-битов (фьюзов). Их значения нужно установить один раз перед прошивкой. Значения фьюзов для данного проекта (значения, отличные от заводских, выделены):

SELFPRGEN = 1 // самопрограммирование запрещено
DWEN = 1 // debugWire отключен
BODLEVEL1:0 = 10 //brown-out detector настроен на 1,8 В.
RSTDISBL = 1 // вывод RESET не отключен
SPIEN = 0 // SPI разрешен
EESAVE = 1 // защита EEPROM отключена
WDTON = 1 // отключение сторожевого таймера разрешено
CKDIV8 = 1 // делитель тактовой частоты на 8 отключен
SUT1:0 = 00 // время старта 64 clk
CKSEL1:0 = 01 // тактовая частота 4,8 МГц

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

Полные исходники основной прошивки

Прошивка для считывателя адресов 1-wire

Заключение

На данный момент занято чуть больше половины памяти контроллера, так что есть огромный простор для фантазии. Можно реализовать новые эффекты, можно слегка доработать схему устройства и добавить датчик температуры, освещенности, акселлерометр, микрофон, детектор НЛО или ИК-приемник. Можно организовать загрузку новой прошивки, скажем, через последовательный интерфейс (Tiny13 поддерживает самопрограммирование). Естественно, для всех возможностей одновременно не хватит ни ног, ни памяти контроллера, но одну-две фичи добавить можно.

Источник: habrahabr.ru

Электронное ожерелье
4.1/5 - Оценок: 69

Оставь свое мнение