"Волшебная коробка"

Решил сделать для любимой девушки оригинальный подарок своими руками. Это моя первая статься на блоге, так что не судите строго :))

Функционал устройства:

  • 7- программ миганния;
  • Переключенние между программами происходить по кнопке;
  • Переключенние между программами по таймеру, каждых 30с;
  • Отключение устройства по кнопке;
  • автоматичиское выключение при 5минутах неактивности.

Схема устройства очень простая — микроконтроллера ATmega8, красные светодиды, кнопки и батарейки питания (3 пальчика). Плату сделал двухслойной (не хотелось использовать перемычки).Разводил в Altium Designer, избыточно для такой прсотой платы использовать такую программу, но так как я с ней постоянно работаю — мне в ней удобно. Altium проект вконце статьи в архиве. Чтобы распечатать чертеж для ЛУТ сначала необходимо сгенерировать гербер, как сделать уже описано тут.

Вот так выглядит плата устройства в Altium Designer:



Визуализация платы в Altium Designer:



Плату поместил в сувенирную коробку:



Для программирования МК на плате есть разъем. Конечно он немного портыть выд устройства, но совсем не хотелось мучаться с проводами для прошивки. Я программировал через AVRISP mkII но можно использовать той что есть в у вас в наличии.
Прошивку писал в AVR Studio на язике С, не особо оптиммизировал. Частота работы МК 8MHz В программу очень легко вносить новые эффекты мигания. Кнопкой S2 включаеться устройство, S1 — переключючение программ мигания по кругу, после МК переходить в сон, и чтобы включить нужно нажать S2 (кнопка подключена к внешнему прерыванию). Если кнопка S1 не нажимаеться, через 30 секунд произойдет переключение на следующую программу мигания. Если нет активности пользователся, через 5хв устройство отключиться.

Программа огранизована в виде тасков. В прерывании таймера устанавливаеться флаг события, в главном идет обработка события и сбрасиваеться флаг:

volatile unsigned char BlinkMode = 0; //  какой ефект должен работать
volatile unsigned char  BlinkSpeed = 0; //скорость переключения
volatile unsigned char TaskFlag = 0; // переменная флагов для задачь

ISR(TIMER2_COMP_vect) // 1mS
{
	if (++count2 ==  BlinkSpeed)	
	{
		TaskFlag|= (1<<6); //set flag
		count2 = 0;
	}		
}

while(1)
{
    if (TaskFlag & (1<<6))
    {
        BlinkLedTask();
	TaskFlag&=~(1<<6); // clear flag
    }
}


Так происходить переключение программ мигания:

void BlinkLedTask(void)
{ 
	switch (BlinkMode)
	{
		case 0: Blink1(20);   break; 
		case 1: Blink2(50);   break; 
		case 2: Blink3(200);  break; 
		case 3: Blink4(255);  break;
		case 4: Blink5(150);  break;
		case 5: Blink6(90);   break;
		case 6: Blink7(250);  break;
		case 7: Sleep();      break;
	}	
}


Одна с функций мигания:
iBlinkSpeed
— параметр функции — скорость мигания.

EnableAll();
устанавливает лог «1» на аноды светодиодов.

PWM = 10;
минимальная яркость мигания светодиодов
PWM = 250;
максимальная яркость мигания светодиодов


void  Blink7(unsigned char iBlinkSpeed)
{
	static unsigned char num = 0;	
	
	BlinkSpeed = iBlinkSpeed;
	
	EnableAll();
	
	if (num == 0)
	{
		PWM = 10;
		num = 1;
	}
	else 
	{
		PWM = 250;
		num = 0;
	}
}


Для тех кто выдержал и дочитал:

Как работает устройство-видео

Файлы к статье:
we.easyelectronics.ru/attachments/get/1091
we.easyelectronics.ru/attachments/get/1092

Спасибо. Жду конструктивной критики и замечаний!)
  • +4
  • 08 сентября 2012, 00:05
  • Nemo
  • 2
Файлы в топике: ATmega8.zip, Plata.ZIP

Комментарии (31)

RSS свернуть / развернуть
То что девайс сделан на AVR не означает, что он должен быть в блоге AVR. Т.к. с таким же успехом его можно сделать и на PIC и на STM8 и на STM32. Перенесите в персональный блог.

Коробочка покупная?
0
Да, купил на рынке сувениров во Львове :)
0
Земляк, коробочка зачетная, молодец!
Если еще убрать остатки украинской грамматики (происходить, сбрасиваеться, светодыодов), то и статья хорошая.
0
Спасибо! А ошибки исправлю!)
0
А че бы платку не закрыть матовой стекляхой?
0
А по мне — так современнее :) Впрочем, девушка віскажет свое мнение. Оно будет единственно правильнім.
В видео немного насмешил режим, когда 2 половинки сердца по-очереди зажигаются. Похоже на уши :)
0
Девушке очень понравилось!) Самое трудное було поставить светодиодны по контуру сердца, а и с комбинациями пришлось напрягать фантазию ))
0
А зачем «современнее» запихивать в коробочку под ретро?
Да и красота исполнения платы сомнительная.
0
  • avatar
  • Vga
  • 08 сентября 2012, 01:14
А зачем «современнее» запихивать в коробочку под ретро?
чтобы придать оригинальности. А как Вы бы запихнули плату? Изделие подарок, согласен заводское исполнение выглядить намного лучше.
Да и красота исполнения платы сомнительная.
а чем исполнение не понравилось?
0
А как Вы бы запихнули плату?
Я бы ее чем-нибудь накрыл. Проще всего — куском красной тонкой ткани. Для мягкости и некоторой защиты платы можно под нее положить кусок тонкого пенополиэтилена, правда, тогда нужны светодиоды хорошей яркости.
Не говоря уже о том, что я бы избавился от кнопок. S1 прекрасно заменяется на датчик тряски (пружинка в трубочке), S2 — на обычный геркон.
а чем исполнение не понравилось?
А что в нем красивого? Я бы постыдился такую плату за декоративное изделие выдавать.
0
  • avatar
  • Vga
  • 08 сентября 2012, 13:41
А что в нем красивого? Я бы постыдился такую плату за декоративное изделие выдавать.
А кто выдает плату за декоративное изделие? Я выбрал коробку — так мне было удобнее.
0
Ты. Иначе бы ты ее спрятал и оставил на виду только мигающие светодиоды.
0
  • avatar
  • Vga
  • 08 сентября 2012, 17:44
Согласен, если бы спрятал плату выглядело бы лучше.
0
Можно, но не так легко найти стекляху. Да и для кнопок нужно сделать ровные отверстия.
0
Жду конструктивной критики и замечаний!)
Да уж какая тут может быть критика. Главное, чтобы девушка оценила :)
0
  • avatar
  • e_mc2
  • 08 сентября 2012, 00:42
Девушке оценила!) Мне интересна критика по розводке платы, прошивке ))
0
Земляк привет.
Мой сосед делал похожее для своей девушки, точнее Мы делали ))
Там било около 150 сверх ярких светодиодов и оно кроме всяких ефектов еще и текст в виде бегущей строки выводило. Корпус тоже сами делали, из красного акрила, что было очень не просто. Клеили все токсичным дихлоретаном.
0
Приятно видеть земляков!)Интересно было бы посмотреть на Ваше творение. А как управляли 150-ми светодиодами?
0
Атмега32 всем рулили, увы сейчас проект не достану, не скорее понедельника, сосед не дома ))
0
Спасибо)
0
емнип он (или очень похожий по описанию) был тут или на хабре. поищите, весьма интересно.
0
Похожий был, но не он (в этом легко убедиться, глянув в послужной список Leon11t — там такой статьи нету). Да и похожий был исполнен не из оргстекла, а в виде пришитой к тряпичному сердечку платы с матрицей светодиодов в форме сердца.
0
  • avatar
  • Vga
  • 08 сентября 2012, 11:48
собственно вот www.youtube.com/watch?v=-J6r8hroSpk
0
Да, это тот проект который я грозился показать!
0
Коробочка зачёт :)
По моему стекло не надо, т.к ручная плата очень подходит под винтажность коробки.
DIHALT рассказывал в статье как использовать «штырьковое программирование» тогда разъём как таковой не нужен.
0
Тогда и винтажную разводу надо! как в ламповых телеках.
0
Угу, причем на коричневом гетинаксе)
0
  • avatar
  • Vga
  • 10 сентября 2012, 12:11
Мигающие по захардкоженному алгоритмы светодиодики — это скучно, оценить и отправить в шкаф. Лайф/тетрис/змейка — куда прикольнее, тогда коробочка может радовать очень долго)
0
«может радовать очень долго»
Ну, брат, эдак и до женитьбы недалеко!

А если серьезно, то такая вещь, которую нам показал уважаемый автор, вполне катит как память на долгие годы. В нашей семье есть музыкальная шкатулка, привезенная из Каира в далекие 60-е. Она сломалась очень давно. И все равно была ценным сувениром, с которым связано много воспоминаний. Настолько ценным, что мой сын (родившийся через много лет после египетского периода нашей жизни) выбрал именно эту поломанную шкатулку, как то, что он захотел оставить себе от бабушки. И племянница, представь, претендовала на нее же! Ну, конфликта не было, но вот факт показателен.
И, кстати, перед отправкой шкатулки к сыну мы таки сдали ее в ремонт. Да, теперь она играет известное произведение. Но не слишком-то часто (при мне — никогда) ее для этого и открывают. Это память, а не развлекаловка — ну куда ей до современных игрушек!
Так и в нашем случае. Никакие ухищрения поразить богатством функционала не продержат актуальность подарка дольше, чем те чувства, которые испытывают люди друг к другу и о которых всегда будет напоминать эта простая мигалка.
К автору: «простая мигалка» — это в полемическом задоре. На самом деле она у тебя вполне сложная :)
+1
Только кат желательно поставить
+1
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.