Купил своей девчонке сережки и задумался как их оформить?!! Наткнулся на тему механической развертки и решил попробовать с минимальными затратами сделать свой вариант. Нашел коробочку под украшения, взял мегу8 и 6 светодиодов. Получилось 6 строк. Нарисовал рисунок сердца, замерял расстояния до начала горения и погасания светодиодов, и написал простенькую программу под это дело. При закрывании коробочки светодиоды начинают мигать примерно пол минуты, после чего в процессоре останавливается генератор и он ничего не потребляет. В качестве батарейки - разломал обычную 9вольтовую крону ( там 6 элементов) отрезал половинку элементов - получилось на вольтметре 4,7 вольта. Схема работает и от 3х вольт, но более тускло. фузы установил на внутренний генератор 8 мегагерц.

Для желающих подарить своим возлюбленным оригинальный подарок, который сделан своими руками, могу посоветовать более сложную, но и более зрелищную конструкцию:

Код:
'8е марта (сердечко с механической разверткой)
'при размахивании светодиодами будет виден рисунок в виде сердечка
'_____**______**
'____*____**____*
'_____*________*
'______*_____*
'________*__*
'_________*
'PashaCompany@yandex.ru
$regfile = "m8def.dat" ' говорим компилятору что у нас микропроцессор Atmega 8
$crystal = 8000000 ' говорим компилятору что процессор тактируется от генератора с частотой 8, 000 000 мегагерц
Config Timer0 = Timer , Prescale = 8 ' конфигурируем таймер0 с делителем 8
On Timer0 Pulse : ' выполнять подпрограмму pulse: от таймера
' конфигурируем порты, куда подключаем светодиоды ( плюсы )
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portb.7 = Output
Config Portd.7 = Output
' минусы
Config Portc.4 = Output
Config Portc.3 = Output
Config Portc.1 = Output
Config Portc.0 = Output
Config Portb.5 = Output
Config Portb.2 = Output
'устанавливаем порты в ноль
Reset Portc.4
Reset Portc.3
Reset Portc.1
Reset Portc.0
Reset Portb.5
Reset Portb.2
' называем порты (плюсовые)
Led1 Alias Portd.0
Led2 Alias Portd.1
Led3 Alias Portd.3
Led4 Alias Portd.4
Led5 Alias Portb.7
Led6 Alias Portd.7
' задаем переменные
Dim T As Word
Dim I As Byte
Dim S As Integer
Enable Interrupts 'разрешить прерывания
Enable Timer0 ' разрешить таймер 0
' начинаем главный цикл программы
Do
Disable Interrupts ' запрещаем прерывания, чтобы не проскочить значения счетчика
' сравниваем переменную s с расчитанными параметрами времени загорания и погасания светодиодов
Select Case S
Case 0 : ' если s = 0 то
Set Led3 ' зажечь светодиод led3
Case 1:
Set Led2
Case 13 :
Set Led4
Case 24 :
Set Led1
Case 33 :
Set Led5
Case 35 :
Set Led1
Case 45 :
Set Led2
Case 49 :
Set Led6
Case 54 :
Set Led2
Case 64 :
Set Led1
Case 66 :
Set Led5
Case 75:
Set Led1
Case 66 :
Set Led4
Case 98 :
Set Led2
Case 100 :
Set Led1
Case 5 :
Reset Led3 ' погасить светодиод led3
Case 6 :
Reset Led2
Case 18 :
Reset Led4
Case 29 :
Reset Led1
Case 38 :
Reset Led5
Case 40 :
Reset Led1
Case 50 :
Reset Led2
Case 54 :
Reset Led6
Case 55 :
Reset Led6
Case 59:
Reset Led2
Case 69 :
Reset Led1
Case 71:
Reset Led5
Case 80 :
Reset Led1
Case 91 :
Reset Led4
Case 103 :
Reset Led2
Case 104 :
Reset Led1
End Select ' конец проверки
Enable Interrupts ' разрешить прерывания
Loop ' конец основного цикла
End
' подпрограмма прерываний
Pulse:
Incr I 'увеличить переменную I на единицу
If I = 2 Then ' если i = 2 то
Incr S ' увеличить s на единицу
If S > 208 Then S = 0
I = 0
Incr T ' увеличить переменную Т на единицу. Переменная задает время работы схемы после подачи питания
If T > 60000 Then ' Т=60000 примерно 30 секунд
T = 0
' выключаем все светодиоды
Reset Led1 ' если
Reset Led2
Reset Led3
Reset Led4
Reset Led5
Reset Led6
Powerdown ' выключаем полностью процессор и задающий генератор. Последующее включение возможно временным разрывом цепи питания или сбросом reset
End If
End If
Return 'вернутся в основной цикл
|