Стробоскопическая открытка с 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