http://poradumo.pp.ua

Online Журнал-Світ порад.
Головна сторінка

Електронне намисто

Електронне намисто


Ідея робити прикраси з електронних компонентів не нова. Особливо приємно, якщо це не просто гарна купка деталей, а працююча схема, яка світиться, миготить і переливається Розповім про свій досвід конструювання подарунка на 8 березня.

«Він живий і світиться»

Дрібничка являє собою намисто, кожна ланка якого забезпечене світлодіодами. Запалюючи і гасячи їх у певному порядку, можна буде реалізувати різні красиві світлові ефекти. Проблема полягає в тому, як керувати ланками незалежно і не перетворити прикраса у моток проводів. Як не можна краще підійде шина 1-Wire, так як вона дозволяє використовувати всього 2 провідника і для передачі сигналів, і для харчування.

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

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

Електронне намисто


Ведені схеми

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


Електронне намисто


Конструктивно все це уміщається на платі розміром менше нігтя, світлодіоди на лицьовій стороні, мікросхема - на зворотному.

Провідна схема

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

Електронне намисто


Живиться пристрій від ионистора - конденсатора величезної ємності (1 фарад). Порівняно з батарейками і акумуляторами у нього купа переваг:


Він майже вічний, сотні тисяч циклів заряд-розряд.




Йому не потрібні складні зарядні пристрої, досить обмежувального резистора.




Він не боїться короткого замикання.




Він не боїться перепадів температури.



Ємність ионистора, звичайно, на порядок нижче, ніж навіть у годинникової батарейки, але наша схема так мало споживає (10 мА в імпульсі, 7 мкА в режимі очікування), що заряду повинно вистачати годин на п'ять.

Ще кілька коментарів з схемою. Конденсатор С2 можна не ставити, він був потрібен у попередній версії проекту, на контролері Tiny12 для генерації випадкових чисел. Tiny13 дозволяє робити це програмно. Кнопка RESET, в принципі, теж не потрібна, але краще поставити, навіщо - описано в розділі «Обережно, граблі». Діод D1 захищає від переполюсовки при заряді ионистора, і просто гарно виглядає - кольорова скляна трубочка :)

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

Руки - з піхов!

Від слів до справи, для виготовлення всієї цієї краси знадобляться:


Дві срібні ланцюжки. Краще брати не звичайні, з кілець, а круглі в перерізі, схожі на канатик (господа ювеліри, підкажіть, як таке плетіння називається?).




Трохи срібною (або посрібленою) дроту, діаметр 05 - 10 мм.




Текстоліт фольгований двосторонній, 15 мм завтовшки. Годяться навіть обрізки.




Лазерний принтер, праска і хлорне залізо. Якщо вам ближче технологія з фоторезистом - ви знаєте, що робити.




Контролер ATTiny13V, в корпусі СПК. Саме з літерою V, звичайні не працюють при низькій напрузі. Ще краще Tiny13A, це більш пізня модель.




DS241310 штук. Можна взяти більше чи менше, не принципово.




Світлодіоди SMD, двох різних кольорів. У мене використані зелені та помаранчеві. Білі й сині брати не рекомендую, для їх роботи потрібна більш високу напругу (до 4 вольт), іоністор трохи сяде, і вони вже перестануть світити. Краще брати з запасом по кількості, світлодіоди люблять згоряти від статики в самий невідповідний момент.




Іоністор 1Ф 55В.




Резистори, конденсатори SMD в асортименті. Можна не купувати, а взяти будь-яку стару плату (наприклад, від CD-Rom), і випаяти звідти.




Малогабаритний роз'єм. Годяться, наприклад, роз'єми, якими в деяких мобільниках до плати підключений динамік. Ще можна взяти микроразъем для антени від якого-небудь WiFi/Bluetooth/GSM пристрої.




Виготовлення намистин

Всі плати виготовлені лазерно-утюговим методом. Плату друкуємо на глянцевому папері, малюнок праскою переводимо на текстоліт, потім труїмо хлорним залізом, тонер змиваємо ацетоном, луди плату, свердлимо отвори.

Намистини виготовляються відразу по 8 штук на одній платі. Потім ріжемо плату на шматочки, відбраковуємо невдалі, залишилися надфілем надаємо бажану форму. Фото з заготовками на різних стадіях:

Електронне намисто


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

Електронне намисто


Перш ніж нанизувати намистини на ланцюжок, потрібно перевірити їх працездатність і (УВАГА!) вважати адреси, зашиті в кожній мікросхемі, бо після підключення всіх модулів до однієї шині зробити це буде складніше. Якщо у вас є адаптер 1-Wire - відмінно. Якщо ні - потрібно взяти контролер, запрограмувати на зчитування адрес і підключити по черзі до кожної бусинці. Докладніше про зчитуванні буде сказано у другій частині.

Виготовлення провідного модуля

Плата провідного модуля робиться аналогічно, методом лазера і праски. Після відмивання тонера і перед лужением потрібно перевести на плату контури, за яким її будемо вирізати. Друкуємо контур на глянцевому папері, прикладаємо до плати, поєднуючи по мітках, пропрасовуємо праскою, відмиваємо папір водою. Потім акуратно насверливаем по контуру отвору:

Електронне намисто


Зайве обламиваем кусачками:

Електронне намисто


Допрацьовуємо надфілями:

Електронне намисто


Готова плата після розпаювання компонентів, зверху:

Електронне намисто


і знизу:

Електронне намисто


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

Збірка

Намистини кріпляться до ланцюжків наступним чином: робимо з срібного дроту дужки і припаюємо до ланцюжку в заздалегідь зазначених місцях. Використовуємо для цього відносно тугоплавкий припій, я брав бессвинцовий (Sn 95 Ag 5).

Електронне намисто

Електронне намисто


Аналогічно готується нижня ланцюжок, тільки інтервали між дужками повинні бути трохи більше, щоб після складання вийшов півколо.

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

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

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

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

Електронне намисто

Електронне намисто


Зарядний пристрій

Ну, пристрій - це голосно сказано. Схема заряджається від USB порту через резистор 47 Ом, обмежує початковий імпульс струму. До 3 вольт іоністор заряджається за п'ять хвилин, повністю - близько півгодини.

Електронне намисто


Обережно, граблі!

В ході складання та налагодження виявлено два неприємні обставини. По-перше, ланцюжок, хоч і срібна, струм проводить дуже погано, позначається наявність десятків зчленувань. До крайніх намистин сигнал вже не доходить. Довелося взяти тонку (015 мм) посріблену дротик, акуратно обвити навколо ланцюжка і припаяти до кожного модуля. З відстані в метр ця дріт вже непомітна.

Граблі другі: при дуже повільному підвищенні напруги живлення контролер відмовляється стартувати. Не знаю, це особливість всіх AVR-ок або тільки мого екземпляра. Виявилося це в самий останній момент, коли все вже було зібрано, прошито і розпаяно. Довелося із зворотного боку плати поставити микрокнопку, яка замикає іоністор накоротко. При короткочасному натисканні розрядитися він не встигає з-за свого внутрішнього опору, зате з'являється імпульс у ланцюгу живлення, якого достатньо для запуску контролера. Якщо хто буде збирати подібну конструкцію, не повторюйте моїх помилок, відразу ставте кнопку RESET.


Наостанок відео роботи. Це тестова прошивка, яка перевіряє всі світлодіоди. Остаточний варіант буде трохи з іншими ефектами.



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

Робота 1-Wire

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

Кожен акт взаємодії з 1-wire починається з скидання.

Електронне намисто


Провідне пристрій видає імпульс низького рівня тривалістю від 480 мкс до нескінченності. Таким чином, включення живлення теж розглядається як скидання. Після цього ведучий відпускає лінію і через 200 мкс перевіряє напруга на ній. Будь ведений пристрій, якщо воно є на шині, в цей час має дати відповідь імпульс, званий Presence (присутність). Якщо Presence прийнятий, можна вважати, що ведені пристрої виявлені і готові до прийому команд.

Передача даних розбита по часу на тайм-слоти, тривалістю від 67 мкс. У межах одного тайм-слота передається один біт, таким чином швидкість передачі може сягати 149 кбіт/с. Деякі мікросхеми підтримують ще режим 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 станів, чого вистачить на годину неповторним роботи пристрою.

Але це ще не все, для ініціалізації генератора випадкових чисел потрібний джерело ентропії, інакше при кожному включенні буде генеруватися одна і та ж послідовність. В якості такого джерела може виступати:


АЦП. Можна оцифрувати напруга живлення і взяти кілька молодших біт.




RC-ланцюг. З великою дискретністю вимірюється час заряду/розряду конденсатора, беруться молодші біти.




Два несинхронізованих таймера. Обчислюється відношення періодів.




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

Кожні 2 секунди генерується 2 8-бітних псевдовипадкових чисел, біти яких використовуються наступним чином:
4 старших біта першого числа - вибір поточного ефекту. Це може бути:


«Біжить вогонь» в одному з двох напрямків. Ймовірність 2/16.




Спалах одного, двох або трьох світлодіодів. Ймовірності - по 1/16.




Відсутність ефекту. З імовірністю 11/16 в даний момент нічого не загориться.




Старший біт другого числа - колір (зелений або помаранчевий).
Решта біти кодують номера першого, другого і третього світлодіода для поодиноких спалахів (групами по 3 біти). Так як 3 біта кодують номери від 0 до 7 а всього ланок 10 для другого спалаху номер збільшується на 1 для третьої - на 2. Таким чином охоплюється весь діапазон, і це простіше, ніж брати четирехбитние номери і контролювати кордону.

Тактування

Контролер Tiny13 має два вбудованих джерела тактового сигналу - 96 і 48 МГц, крім того, можна включити дільник тактової частоти. Чим нижче частота, тим нижче енергоспоживання контролера. З іншого боку, занадто низька частота не дозволить поставити тимчасові інтервали для протоколу 1-wire. При написанні прошивки на асемблері вдалося досягти роботи на частоті 12 МГц, при цьому найкоротший отмеряемий інтервал склав всього три такти. Для прошивки на C швидкодії такого досягти не вийшло, мінімальна тактова частота - 48 МГц.

Велику частину часу контролер знаходиться в режимі PowerDown, при цьому працює тільки сторожовий таймер, який викликає переривання кожні 2 секунди.

Fuse-біти

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

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


Прошивати контролер потрібно до установки на плату, підключивши його безпосередньо до програматора. Якщо немає панельки для СПК-корпусів, можна акуратно підключити проводами. Після прошивки і перевірки працездатності контролер можна розпаювати остаточно.

Повні вихідні коди основної прошивки


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


Висновок

На даний момент зайнято трохи більше половини пам'яті контролера, так що є величезний простір для фантазії. Можна реалізувати нові ефекти, можна злегка доопрацювати схему пристрою і додати датчик температури, освітленості, акселлерометр, мікрофон, детектор НЛО або ІЧ-приймач. Можна організувати завантаження нової прошивки, скажімо, через послідовний інтерфейс (Tiny13 підтримує самопрограмування). Природно, для усіх можливостей одночасно не вистачить ні ніг, ні пам'яті контролера, але одну-дві фічі додати можна.

Джерело: habrahabr.ru
of your page -->

Популярні поради

загрузка...