Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Удаленная работа
Помощь проекту

Электронное ожерелье на микроконтроллере и светодиодах

Идея делать украшения из электронных компонентов не нова. Особенно приятно, если это не просто красивая кучка деталек, а работающая схема, которая светится, мигает и переливается… Расскажу о своем опыте конструирования подарка на 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 защищает от переполюсовки при заряде ионистора, и просто красиво смотрится — цветная стеклянная трубочка :)

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

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

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

  • Две серебряные цепочки. Лучше брать не обычные, из колец, а круглые в сечении, похожие на канатик (господа ювелиры, подскажите, как такое плетение называется?).
  • Текстолит фольгированный двусторонний, 1,5 мм толщиной. Годятся даже обрезки.
  • Немного серебряной (или посеребренной) проволоки, диаметр 0,5 — 1,0 мм.
  • Лазерный принтер, утюг и хлорное железо. Если вам ближе технология с фоторезистом — вы знаете, что делать.
  • Контроллер ATTiny13V, в корпусе SOIC. Именно с буквой V, обычные не работают при низком напряжении. Еще лучше Tiny13A, это более поздняя модель.
  • DS2413, 10 штук. Можно взять больше или меньше, не принципиально.
  • Светодиоды SMD, двух разных цветов. У меня использованы зеленые и оранжевые. Белые и синие брать не рекомендую, для их работы требуется более высокое напряжение (до 4 вольт), ионистор чуть сядет, и они уже перестанут светить. Лучше брать с запасом по количеству, светодиоды любят сгорать от статики в самый неподходящий момент.
  • Ионистор 1Ф 5,5В.
  • Резисторы, конденсаторы SMD в ассортименте. Можно не покупать, а взять любую старую плату (например, от CD-ROMа), и выпаять оттуда.
  • Малогабаритный разъем. Годятся, например, разъемы, которыми в некоторых мобильниках к плате подключен динамик. Еще можно взять микроразъем для антенны от какого-нибудь WiFi/Bluetooth/GSM устройства.


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

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

Бусины изготовляются сразу по 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. Выбирает все устройства на шине (часто используется, если на шине всего одно устройство и передавать адрес нету смысла).
  • 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 состояний, чего хватит на час неповторяющейся работы устройства.

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

  • АЦП. Можно оцифровать напряжение питания и взять несколько младших бит.
  • RC-цепь. С большой дискретностью измеряется время заряда/разряда конденсатора, берутся младшие биты.
  • Два несинхронизированных таймера. Вычисляется отношение периодов.


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

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

  • «Бегущий огонь» в одном из двух направлений. Вероятность 2/16.
  • Вспышка одного, двух или трех светодиодов. Вероятности — по 1/16.
  • Отсутствие эффекта. С вероятностью 11/16 в данный момент ничего не загорится.


Старший бит второго числа — цвет (зеленый или оранжевый). Оставшиеся биты кодируют номера первого, второго и третьего светодиода для одиночных вспышек (группами по 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-корпусов, можно аккуратно подключить проводами. После прошивки и проверки работоспособности контроллер можно распаивать окончательно.

Полные исходники основной прошивки: pastebin.com/CEKvhYVt

Прошивка для считывателя адресов 1-wire: pastebin.com/tQ7AqmfN

Видео, показывающее работу прошивки:

 

Заключение

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

Поздравляю прекрасную половину с наступающим 8 марта!

Источник: www.habrahabr.ru
Автор: www.habrahabr.ru/users/Ocelot/


C этой схемой также часто просматривают:

Генератор видеосигнала на микроконтроллере PIC16F84
ЭЛЕКТРОННОЕ "УХО"
Малогабаритный детектор поля с индикацией на двух светодиодах
Детектор поля с логарифмической шкалой на 12 светодиодах и звуковой индикацией
ЭЛЕКТРОННОЕ ЗАЖИГАНИЕ №1
RGB-лампа настроения без микроконтроллера
Корзинка с цветами на светодиодах
4-канальный логический анализатор на PIC микроконтроллере
Самодельный MP3 плеер своими руками на PIC микроконтроллере

Главные категории

Arduino


Аудио


В Вашу мастерскую


Видео


Для автомобиля


Для дома и быта


Для начинающих


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


Измерительные приборы


Источники питания


Компьютер


Медицина и здоровье


Микроконтроллеры


Музыкантам


Опасные, но интересные конструкции


Охранные устройства


Программаторы


Радио и связь


Радиоуправление моделями


Световые эффекты


Связь по проводам и не только...


Телевидение


Телефония


Узлы цифровой электроники


Фототехника


Шпионская техника



Реклама на KAZUS.RU




Последние поступления

Контроллер RGB светодиодной ленты

Цветик-семецветик на PIC12F629

Плавное чередование яркости свечения светодиодов (лент)

RGB-лампа настроения без микроконтроллера

Корзинка с цветами на светодиодах

Световые эффекты на основе цифрового генератора шума

Мигающий светодиодный сигнализатор с низковольтным питанием

Брелок в форме сердца в техностиле

Схема ночника с оригинальным световым эффектом

Электронное светодиодное сердце на микроконтроллере



© 2003—2017 «KAZUS.RU - Электронный портал»