Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/23: Рейтинг темы: голосов - 23, средняя оценка - 4.70
29 / 13 / 0
Регистрация: 08.08.2011
Сообщений: 190

Необходимость прерываний для опроса кнопок при реализации меню

16.10.2012, 12:48. Показов 4945. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день всем! Помогите разобраться с прерываниями, не могу понять критичность их использования, ведь получать информацию о нажатии можно и без прерываний, а для реализации прерываний - специальные пины, 2 из которых я уже занял часовым кварцем, таймером, переполянющемся раз в секунду.
Так как мне поступить?
Вешать кнопки на эти пины для прерываний(извините если глупость сказал)?
Писать "ожидатель" нажатия кнопки в теле прерывания таймера часового кварца?
Или писать "ожидатили" в wile(1)? - тут тоже вопрос: до или после проверки 3х бит ASSR?
Мне бы хотелось применить 4 кнопки, и использовать их в устройстве, а не только при отладке, поэтому хотелось бы узнать про грамотный вариант, приемлемый по сложности для начинающего. Кнопки эти будут водить по меню и давать управлять значением переменных.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.10.2012, 12:48
Ответы с готовыми решениями:

Иерархическое меню из четырёх кнопок. Как продумать логику реализации
Есть иерархическое меню из четырёх кнопок, одна кнопка активирует ещё две, т.е. всего шесть. Нажатие каждой из них записывает в...

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

Необходимость реализации виртуальнй функции
Добрый день. Возник следующий вопрос. class A { virtual void foo() = 0; //чисто виртуальная функция }

15
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
16.10.2012, 13:37
...можно повесить опрос клавиатуры на прерывание таймера, т.е. в нем опрашивать, декодировать, реализовать антидребезг. В то же время, никто не мешает в основном цикле тела опрашивать состояние кнопок с тем же антидребезгом (задержкой). Недостатком последнего способа является рост длительности выполнения основного цикла программы от количества опрашиваемых таким образом кнопок.

Так что, решать вам, в зависимости от критичности времени исполнения.
1
29 / 13 / 0
Регистрация: 08.08.2011
Сообщений: 190
16.10.2012, 14:11  [ТС]
А антидребезг это ведь не только задержка, еще и конденсатор надо ставить?
То-есть в принципе, прерывание используется для как бы оптимизации(нет в каждомом цикле проверки кнопки, а возникает прерывание при нажатии)?
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
16.10.2012, 15:41
- конденсатор вешают, когда программно нет возможности ввести задержку
- в принципе, да, но не заморачивайтесь с этим
1
29 / 13 / 0
Регистрация: 08.08.2011
Сообщений: 190
16.10.2012, 15:47  [ТС]
Цитата Сообщение от raxp Посмотреть сообщение
не заморачивайтесь с этим
Понял, спасибо
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
16.10.2012, 15:57
...скажем так, по прерыванию можно будить МК из спящего режима, для экономии энергии, если источник питания автономный и цикл работы гаджета предполагается по-большей части неактивный ...сбор медленно изменяющихся значений, системы контроля и охраны и т.п.
1
29 / 13 / 0
Регистрация: 08.08.2011
Сообщений: 190
16.10.2012, 16:15  [ТС]
Цитата Сообщение от raxp Посмотреть сообщение
по прерыванию можно будить МК из спящего режима
У меня используются прерывания, так как я использую часовой кварц, я ввожу МК в спящий режим в перерывах между прерываниями. Значит ли это что я не должен его вводить в спящий режим чтобы помимо событий прерываний(тиканья часов) входить в меню, задавать время, ставить будильник?
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
16.10.2012, 16:33
...так никто не мешает будить его на время ввода данных, по отдельному прерыванию.
1
29 / 13 / 0
Регистрация: 08.08.2011
Сообщений: 190
16.10.2012, 17:04  [ТС]
Сделать 1 кнопку через прерывание или не использовать спящий режим, таков выбор?
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
16.10.2012, 19:08
...как позволяют ресурсы.
1
29 / 13 / 0
Регистрация: 08.08.2011
Сообщений: 190
18.10.2012, 19:33  [ТС]
Вот, пытаюсь сделать меню на 4 кнопках. Подключил все кнопки на землю/к пинам МК, включил подтягивающие резисторы внутри МК, сами пины на вход. Код пишу в основной программе, хотя и по прерыванию тот же еффект. Почему то срабатывает кнопка вниз - сама по себе, может я проверяю неправильно?
C
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
if (!(PINC & (1<<PINC0)))//Если 0 уровень на PC0               1кнопка Esc
        {
            _delay_ms(10);
            if (!(PINC & (1<<PINC0)))//Если 0 уровень на PC0 
            {
                    while (PINC & (1<<PINC0));//Ждем отжатия клавиши
                    if (menu==0)
                    {
                        menu = 10;  
                    } else
                    if (menu==11||menu==12||menu==13)
                    {
                        menu=10;
                    } else
                    if (menu==21||menu==22||menu==23)
                    {
                        menu=20;
                    } else
                    if (menu==31||menu==32||menu==33)
                    {
                        menu=30;
                    } else
                    if (menu==41||menu==42||menu==43)
                    {
                        menu=40;
                    } else
                    if (menu>100)
                    {
                        menu =menu/10;
                    } else
                    if (menu==10||menu==20||menu==30||menu==40)
                    {
                        menu=0;
                    }
            }
        
        } else  if (!(PINC & (1<<PINC3)))//Если 0 уровень на PC2       3кнопка down
        {
            _delay_ms(10);
            if (!(PINC & (1<<PINC3)))//Если 0 уровень на PC2 
            {
                while ((PINC & (1<<PINC3)));//Ждем отжатия клавиши
                if (menu==10||menu==20||menu==30)
                {
                    menu+=10;
                } else
                if (menu==11||menu==12)
                {
                    menu++;
                } else
                if (menu==21||menu==22)
                {
                    menu++;
                } else
                if (menu==31||menu==32)
                {
                    menu++;
                } else
                if (menu==41||menu==42)
                {
                    menu++;
                }                                               
            }
        }
Рисуется на экране слово в зависимости от переменной menu, так вот, этот код для кнопки открытия меню срабатывает при нажатии на кнопку "меню", но при добавлении этого же по сути алгоритма на кнопку "вниз", она срабатывает без перерыва, как будто ее кто то сидит и постоянно нажимает. Поднять меню при этом можно кнопкой вверх(обработчик не описан тут, но есть), но если ее отпустить, меню снова полетит вниз. Кнопки пробовал разные, пины, эффект один. В чем я ошибся, подскажите пожалуйста.
0
29 / 13 / 0
Регистрация: 08.08.2011
Сообщений: 190
20.10.2012, 15:03  [ТС]
Я потдключил свои кнопки на порт D и все заработало, я похоже сжег несколько ножек на С
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
20.10.2012, 22:05
...схему того, как вы подключали.
0
29 / 13 / 0
Регистрация: 08.08.2011
Сообщений: 190
21.10.2012, 00:02  [ТС]
Цитата Сообщение от raxp Посмотреть сообщение
...схему того, как вы подключали.

Кнопки потом так же подключил на Д7-Д4
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
21.10.2012, 07:36
...не должны были сгореть при наличии подтягивающих.
1
29 / 13 / 0
Регистрация: 08.08.2011
Сообщений: 190
21.10.2012, 14:58  [ТС]
Цитата Сообщение от raxp Посмотреть сообщение
...не должны были сгореть при наличии подтягивающих.
А порт С по умолчанию весь включен, его фьюзами открыть не надо?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2012, 14:58
Помогаю со студенческими работами здесь

Необходимость реализации контроля тока в управл. двигателем
Хочу сделать управление коллекторным двигателем постоянного тока с использованием ШИМа, и со стабилизацией скорости с использованием ПИД. ...

Ошибка при реализации меню
Всем привет ! Необходимо организовать меню для этой программы,а у меня при выводе функции выдаёт ошибку...:( #include...

Модуль для реализации меню
Здравствуйте, в общем требуется помощь в подборе модуля. Требуется сделать меню полностью состоящее из картинок и что бы оно работало таким...

При реализации меню как сделать подменю и переход в другой пункт?
есть вот такой кусочек примерного кода меню: #!/bin/bash while 1 do echo...

При наведении на какую либо из кнопок в меню, издавалась мелодия
Здравствуйте, я хотел бы сделать так, чтоб при наведении на какую либо из кнопок в меню, издавалась мелодия(sound, audio), помогите...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru