Стробоскопічна листівка з POV-ефектом на ATmega8
В цій статті я хочу представити проект листівки з механічним розгортанням (схоже на годинник Боба Блика, але тут потрібно махати рукою).
Така листівка відмінно підійде в ролі подарунка комусь, або її можна носити з собою як брелок. Подібні схеми відмінно підходять для тих, хто тільки почав вивчати мікроконтролери та освоювати smd-монтаж.
В основі стробоскопічного ефекту лежить персистенція (інерційність) людського зору — особливість зорового сприйняття дискретних послідовних подій, які здаються безперервними. Так, наприклад, коли крутять горючий факел, око бачить вогняне коло замість кількох положень одного й того ж горючого факела.
Таким чином, персистенція — це здатність ока з'єднувати швидко змінювані зображення в одне — нерухоме. Саме на цьому принципі влаштований кінематограф, оскільки будь-яке зображення (в кіно або на екрані монітора) представляє собою безліч швидко змінюваних зображень.
В нашому випадку змінюється порядок світіння світлодіодів. Але про все по порядку.
1. Хардварна частина.
1.1 Схема
УВАГА!!!
Номера виводів мікроконтролера підписані для ATmega8 в корпусі TQFP32. Якщо будете робити для DIP або на бредборді, то вам потрібно орієнтуватися на назви портів.
"Мозком" пристрою став восьмирозрядний мікроконтролер ATmega8 від AVR з 8КБайтами пам'яті на борту.
Мікроконтролер здатний працювати від низької напруги, відрізняється малим споживанням енергії.
Оскільки виводи МК мають високе вхідне опір, вони можуть працювати як антени та приймати наводки від зовнішніх джерел.
Найбільш критичним в цьому плані є вивід RESET. Коливання на цьому виводі можуть призводити до нестабільності виконання програми мікроконтролером. Для запобігання цього вивід RESET має підтяжку через резистор 10 кіломів до плюса живлення.
Індикція здійснюється 8 (по одному на біт) світлодіодами 0805 (можна ставити будь-які, головне, щоб це не призводило до перевищення максимального для мікроконтролера струму). Світлодіоди виснуть без резисторів, оскільки втручається внутрішнє опір батарейки + світлодіоди працюють в імпульсному режимі.
Запуск мікроконтролера відбувається при замиканні виводу RESET на мінус живлення. Програма виконується протягом 30 секунд (налаштовується програмно) і після цього мікроконтролер засинає.
Живлення від батарейки CR2023.
Про виготовлення плати та пайку smd-компонентів дивіться у відео в кінці статті.
2. Софтварна частина
Трохи розповім про реалізацію зображення на прикладі простого малюнка.
Поле можна уявити як сітку 8(кількість світлодіодів)х7(оптимальна кількість стовпців на 1 символ з урахуванням пробілу)
В прошивці призначено час роботи одного стовпця в 1мс.
#define LINETIME 1 //Час роботи лінії в мілісекундах
#define WORKTIME 30 //Час роботи в секундах
Тобто світлодіоди миготять наступним чином:
1мс - 678
2мс - 567
3мс - 456
4мс - 345
5мс - 234
6мс - 123
7мс - 12
Можна зробити свій малюнок, змінивши вихідні коди.
Пам'яті МК у ідеалі має вистачити на
65536 (біт в 8КБайтах)/7строк*8стовпців(біт)=1170 символів (але доведеться дуже широко розмахувати руками)
Правильність своєї прошивки можна перевірити в протеусі за допомогою віртуального осцилографа.
Якщо на це миготіння дивитися нерухомо, то миготіння в 150Гц буде ледь помітно. Але якщо зображення "розгорнути", то за рахунок інерційності зору зображення стане видимим.
3. Прошивка МК
1. Підпаюємо проводки до плати (в .lay-файлі вказані місця, де зручніше всього підпаюватися)
2. Підключаємо їх до програматора (у мене USBASP. Якщо у вас теж, то малюнок з розпайкою ISP10 вам на допомогу).
3. Підключаємо програматор + мікроконтролер до комп'ютера
4. Включаємо на своєму комп'ютері програму для прошивки
.
4.1 Вибираємо тип мікроконтролера (в даному випадку - ATmega8).
4.2 Знаходимо на комп'ютері .hex-файл. Якщо чіп раніше використовувався, то його необхідно очистити.
4.3 Встановлюємо фьюз-біти. Фьюз-би́ти стандартні.
УВАГА!!! Тут фьюз-біти прямі т.е. якщо галочки немає, то біт встановлений.
5. Натискаємо кнопку ПРОГРАМУВАННЯ.
І або отримуємо помилку (битий МК, поганий контакт МК і програматора, відключився джампер живлення (USBASP) замикання сигналу з програматора, непропай виводів МК та інше)
або все прошивається, і пристрій відразу починає миготіти.
Після цього від'єднуємо МК від програматора, ставимо батарейку (при цьому пристрій "прокинеться"), чекаємо 30 секунд (пристрій "засне"), натискаємо кнопку й махаємо. Якщо ваш малюнок видний повністю, без пропусків сегментів, то можете собі похлопати. Якщо ж пропуски є, то варто перевірити плату на наявність "соплів" - перемичок між доріжками - і усунути їх.
Якщо плата справна, але проблема не усунена, то потрібно перевірити спочатку проблемні світлодіоди (можливо, ви просто переплутали полярність), а потім тільки МК. Якщо проблем "заліза" не виявлено, то спробуйте перепрошити МК.
Список радіоелементів
Обозначення | Тип | Номінал | Кількість | Примітка |
---|---|---|---|---|
U1 | МК AVR 8-біт |
ATmega8A-AU
|
1 | |
HL1-HL8 | Світлодіод | ARL2-0805UBC | 8 | 0805 |
R1 | Резистор |
10 кОм
|
1 | 0805 |
Bat.1 | Батарейка | CR2032 | 1 | |
Батарейний відсік | BH1060 | 1 | ||
SA1 | Тактова кнопка | SWT-10 | 1 | |
C1, C2 | Конденсатор | 100 нФ | 2 | 0805 |
Прикріплені файли:
- Strobe.zip (55 Кб)