Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
JeXLiN
0 / 0 / 1
Регистрация: 25.03.2013
Сообщений: 21
1

Удерживание кнопки и PowerDown на Atmega8515

14.05.2014, 15:43. Просмотров 1182. Ответов 5
Метки нет (Все метки)

Нарисовал простую схемку в Proteus с использованием МК Atmega8515.
Удерживание кнопки и PowerDown на Atmega8515


при нажатии на кнопку switch led загорается led-green и разрешается прерывание int1, тоесть если нажать на кнопку sound то воспроизведется музыка... и если же опять нажать switch led то блокируется прерывание int1 и начинает мигать leg-blue (типа режим ожидания). Теперь как реализовать powerdown МК? ну типа изначально устройство выключено при удержании кнопки switch led 1 сек например устройство включается и начинает мигать led-blue ну и кратковременные нажатия switch led переключают режимы led'ов если опять нажать и удерживать switch led то устройство выключается (МК переходит в powerdown)
код к схеме на bascom-avr:
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
$regfile = "m8515.dat"
$crystal = 8000000                                          
 
' PB0 dynamic
' PB1 r1 led
' PB2 r2 led
' PD2 button - switch led
' PD3 button - sound
 
Config Portb.0 = OUTPUT ' speaker  
Config Portb.1 = OUTPUT : Set Portd.2 ' r1 led-green, button  portd.2                      
Config Portb.2 = OUTPUT  ' r2 led-blue                                  
Config portd.2 = INPUT ' button - led switch
Config portd.3 = INPUT ' button - sound
Config Debounce = 40
 
Speaker ALIAS Pinb.0
 
SOUND Speaker , 120 , 600
 
Config Int1 = Falling
ON Int1 music
Enable Interrupts
 
DO
   Debounce Pind.2 , 0 , En , SUB
   
   IF Pinb.1 = 0 THEN
   Pinb.2 = 1
   Waitms 40 '400
   Pinb.2 = 0    
   ELSE                                                
   Pinb.2 = 0    
   END IF  
       
LOOP
 
En:
SOUND Speaker, 80, 400
Toggle Portb.1
IF portb.1 = 1 THEN
enable int1
ELSE
disable int1
END IF
RETURN
 
music:
'...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2014, 15:43
Ответы с готовыми решениями:

Tiny13 powerdown [РЕШЕНО]
Всем привет, народ, помогите разобраться плиз, не увести тиню в powirdown,...

ATMega8515. ШИМ
Срочно завтар экзамен, сдавать нужно, программа для микро контроллера...

Генератор на ATmega8515
Народ может кто делал НЧ генератор на этом контроллере. Меня больше интересует...

ATmega8515 + SRAM
Доброго всем время суток ! Ковыряю/ремонтирую древний промышленный девайс....

Фьюзы Atmega8515
Собираю эту схему http://g-a-v.pisem.net/cdplr.htm и там написано : "При...

5
raxp
10188 / 6571 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
14.05.2014, 21:11 2
powerdown
подать питание на МК через ключ самоблокировки с управлением от МК. Обсасывалось Контроль сервопривода в конце темы.

Или спящий режим, тут поднимаем даташит как и что.

и удерживать switch led то устройство выключается
при нажатии запускать счетчик, превышение которым определенного количества будет означать удержание кнопы клиентом. При отпускании кнопы счетчик (глобальная переменная) сбрасывать в ноль.

p.s.: а чего одну кнопу подтянули к шине, а вторая в воздухе? Нехорошо.
0
JeXLiN
0 / 0 / 1
Регистрация: 25.03.2013
Сообщений: 21
15.05.2014, 10:14  [ТС] 3
p.s.: а чего одну кнопу подтянули к шине, а вторая в воздухе? Нехорошо.
Исправил...

при нажатии запускать счетчик, превышение которым определенного количества будет означать удержание кнопы клиентом. При отпускании кнопы счетчик (глобальная переменная) сбрасывать в ноль.
Пока на выключение такой костыль написал
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
En:
IF pind.2 = 0 THEN
FOR temp = 0 TO 220
incr temp2
IF temp2 > 210 THEN
portb.1 = 0
portb.2 = 0
enable int0
powerdown
END IF
IF pind.2 = 1 THEN EXIT FOR
waitms 10
NEXT
 
IF temp2 < 200 THEN
 
SOUND Speaker, 80, 400
Toggle Portb.1
IF portb.1 = 1 THEN
enable int1
ELSE
disable int1                                               
END IF
 
temp2 = 0
temp = 0
 
 
END IF
 
END IF
RETURN
а вот как аналогично включить все же не как не могу разобраться
0
raxp
10188 / 6571 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
15.05.2014, 15:27 4
...в спящем режиме только по внешнему прерыванию. Что говорит даташит?
1
JeXLiN
0 / 0 / 1
Регистрация: 25.03.2013
Сообщений: 21
15.05.2014, 21:34  [ТС] 5
Даташит толком не понял с англ. туго... буду пытаться пробудить через int0

config int0 = low level
on int0 pusk
...
0
JeXLiN
0 / 0 / 1
Регистрация: 25.03.2013
Сообщений: 21
17.05.2014, 15:45  [ТС] 6
В общем написал так:
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
$regfile = "m8515.dat"
$crystal = 8000000                                          
 
' PB0 dynamic
' PB1 r1 led
' PB2 r2 led
' PD2 button - switch led
' PD3 button - sound
  
Config Portb.0 = OUTPUT ' speaker  
Config Portb.1 = OUTPUT : Set Portd.2 ' r1 led-green, button                        
Config Portb.2 = OUTPUT  ' r2 led-blue                                   
Config portd.2 = INPUT ' button
Config portd.3 = INPUT ' button
Config Debounce = 50
 
Speaker ALIAS Pinb.0
 
Config Int1 = Falling
ON Int1 music
 
Config Int0 = Low Level
ON Int0 Pusk
 
Enable Interrupts
 
SOUND Speaker , 120 , 600
 
DIM Temp AS byte
DIM Temp2 AS byte
 
DIM RUN AS bit
 
 
DO
IF RUN = 0 THEN
Enable Int0
portb.0 = 0
portb.1 = 0
portb.2 = 0
Powerdown 
 
ELSE
 
Disable Int0 
 
Debounce Pind.2 , 0 , En , SUB
 
IF Pinb.1 = 0 THEN 
Pinb.2 = 1
Waitms 40 '400
Pinb.2 = 0     
ELSE                                                 
Pinb.2 = 0    
END IF 
 
END IF
 
LOOP
 
Pusk:
waitms 500
RUN = 1
GIFR = 64
RETURN
 
En:
IF pind.2 = 0 THEN
waitms 50
FOR temp = 0 TO 220
incr temp2
IF temp2 > 210 THEN
 
portb.1 = 0
portb.2 = 0
enable int0
Powerdown 
 
END IF
IF pind.2 = 1 THEN EXIT FOR
waitms 10
NEXT
 
IF temp2 < 100 THEN
 
SOUND Speaker, 80, 400
Toggle Portb.1
 
IF portb.1 = 1 THEN
enable int1
ELSE
disable int1                                               
END IF
 
END IF
 
temp2 = 0
temp = 0
 
END IF
RETURN
 
 
music:
...
Теперь все работает. Не совсем так как первоначально хотел, но пойдет...
При коротком нажатии PD2 button устройство включается, а при следующих коротких нажатиях переключ. режимы LED'ов... При длинном же нажатии устройство выключается
0
17.05.2014, 15:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2014, 15:45

ATMega8515 и обучение
Здравствуйте! Решил я заняться изучением микроконтроллеров. надыбал...

AVR ATmega8515
Здравствуйте! Может кто нибудь работал с этим микроконтроллером. Удобно ли с...

АЦП на atmega8515
Здравствуйте, я начинающий программист. совсем ещё как бы чайник, разобрал пока...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru