реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Разъясните, как организовать кнопку на прерывании, Mega8, CodeVision
Alex K
сообщение Jul 19 2009, 05:04
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 19-07-09
Пользователь №: 51 371



камень - ATMega8, компилятор - CodeVision 1.24.8.
девайс считает импульсы со входа INT0 и выводит на светодиодный семисегментный индикатор. для расчета кол-ва импульсов задействован таймер_2, для динамической индикации - таймер_0. дополнительно используется ШИМ (для регулировки цвета светодиодного индикатора) - юзается таймер_1. на вход INT1 подвешена кнопка. собственно при нажатии на нее должна вызываться процедура, в которой задаются различные коэффициенты пересчета, цвет индикатора и т.п.
собственно проблема: при нажатии на эту кнопку возникает прерывание INT1, входим в процедуру настройки, но пропадает индикация (т.к. таймер_0 останавливается). я так понимаю, что после нажатия на кнопку (или после перехода в процедуру настройки) нужно запретить реагировать на возникновение этого прерывания? т.е. чтобы все остальные прерывания (кроме int1) вновь заработали... так? какие директивы прописать? ткните носом, если уже разжевывалось, найти не получилось...
Go to the top of the page
 
+Quote Post
stells
сообщение Jul 19 2009, 05:22
Сообщение #2


внештатный сотрудник
******

Группа: Участник
Сообщений: 2 458
Регистрация: 10-05-08
Из: МО, Медвежьи озера
Пользователь №: 37 401



мне кажется лучше в цикле динамической индикации сделать просто опрос кнопки со счетчиком времени ее нажатия для устранения дребезга контактов (нажата 2 цикла - есть нажатие). тогда с и прерываниями ничего дополнительно делать не надо. по прерыванию обрабатывают какие-то быстрые события или когда нужна быстрая реакция
Go to the top of the page
 
+Quote Post
INT1
сообщение Jul 19 2009, 05:50
Сообщение #3


deleted
****

Группа: Свой
Сообщений: 555
Регистрация: 28-08-05
Пользователь №: 8 024



Установите MCUCR так, чтобы INT1 происходило по перепаду, а то он у вас похоже из обработчика в основной цикл вылезть не может. Да и другие прерывания не могут быть обработаны, пока вы кнопку держите.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jul 19 2009, 07:32
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Самы простой вариант как вам посоветовали перенести опрос кнопки в обработчик прервыния от ТС который обеспечивает динамическую мндикацию (там подходящий период). Обязательно нужно сделать антидребезг.
Если же вы хотите использовать именно INT1 то позаботьтесь чтобы у вас небыло многократного повторного вхождения в прерывание - при первом нажатии кнопки когда вызывается обработчик прерывания INT1 установите некоторый таймер на 50-100 мС и запретите прерывание INT1. В прерывани от ТС декрементируйте этот таймер до 0 и когда он достигнет нуля разрешайте INT1. Так можно избавиться от дребезга. Ну и настройте само прерывание INT1 на срабатывание по фронту (по какому это зависит от включения вашей кнопочки)
Go to the top of the page
 
+Quote Post
Alex K
сообщение Jul 19 2009, 09:37
Сообщение #5





Группа: Новичок
Сообщений: 4
Регистрация: 19-07-09
Пользователь №: 51 371



Цитата(INT1 @ Jul 19 2009, 11:50) *
Установите MCUCR так, чтобы INT1 происходило по перепаду
уже -)
Цитата(mempfis_ @ Jul 19 2009, 13:32) *
...и запретите прерывание INT1.
вот это как раз и не знаю, как сделать -(...
пожалуй, сделаю как и советовали, счетчик в процедуре динамической индикации на появление нулика на выходе D3.
Go to the top of the page
 
+Quote Post
stells
сообщение Jul 19 2009, 10:35
Сообщение #6


внештатный сотрудник
******

Группа: Участник
Сообщений: 2 458
Регистрация: 10-05-08
Из: МО, Медвежьи озера
Пользователь №: 37 401



Цитата(Alex K @ Jul 19 2009, 13:37) *
пожалуй, сделаю как и советовали, счетчик в процедуре динамической индикации на появление нулика на выходе D3.

и это будет правильно
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jul 19 2009, 10:59
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Эх вы smile.gif как настроить прерывание разобрались а как разрешать/запрещать его нет.

Код
General Interrupt Control Register – GICR
Bit 7 – INT1: External Interrupt Request 1 Enable


Код
GICR |= (1<<INT1); //разрешить прерывание INT1
GICR &= ~(1<<INT1); //запретить прерывание INT1


А вообще развивайте вариант со сканирование кнопки в обработчике прерывания динамической индикации.
По ссылке я приводил свой вариант антидребезга которым пользуюсь во многих проектах.
http://electronix.ru/forum/index.php?showtopic=65048
Go to the top of the page
 
+Quote Post
Alex K
сообщение Jul 19 2009, 11:40
Сообщение #8





Группа: Новичок
Сообщений: 4
Регистрация: 19-07-09
Пользователь №: 51 371



спасибо, сейчас пытаюсь придумать систему меню, чтобы при помощи одной кнопки вводить 4 числовых параметра...
Go to the top of the page
 
+Quote Post
stells
сообщение Jul 19 2009, 12:16
Сообщение #9


внештатный сотрудник
******

Группа: Участник
Сообщений: 2 458
Регистрация: 10-05-08
Из: МО, Медвежьи озера
Пользователь №: 37 401



Цитата(Alex K @ Jul 19 2009, 15:40) *
спасибо, сейчас пытаюсь придумать систему меню, чтобы при помощи одной кнопки вводить 4 числовых параметра...

тут в общем-то можно кой-чего посоветовать, но наверное не стоит прерывать Ваш творческий процесс rolleyes.gif
Go to the top of the page
 
+Quote Post
XVR
сообщение Jul 21 2009, 08:13
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Alex K @ Jul 19 2009, 15:40) *
спасибо, сейчас пытаюсь придумать систему меню, чтобы при помощи одной кнопки вводить 4 числовых параметра...
Совет - не делайте этого. С такой 'системой меню' смогут нормально работать только потомственные радисты, как минимум в 3м поколении smile3046.gif
У меня была попытка сделать нечто такое, в наличии была 1 кнопка и 2 светодиода (один из них 2х цветный). На это нужно было повесить около 3х задаваемых пользователем режимов работы и в каждом из них нужно было показывать текущий статус (то же около 2-3 булевских параметров).
Это было сделано с помощью длинных и коротких нажатий кнопки (в разное время) и разными характеристиками мигания светодиодами.
После непродолжытельной практики все было выкинуто и оставленно 2 основных режима с минимум индикации. Пользователи оказались не в состоянии воспользоваться всеми наворотами, даже имея перед глазами подробнейшую инструкцию cranky.gif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 21 2009, 09:08
Сообщение #11


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Пользователи бывают разныеsmile.gif Некоторые даже умудряются автомобильную сигнализацию программироватьsmile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
stells
сообщение Jul 21 2009, 09:28
Сообщение #12


внештатный сотрудник
******

Группа: Участник
Сообщений: 2 458
Регистрация: 10-05-08
Из: МО, Медвежьи озера
Пользователь №: 37 401



Цитата(XVR @ Jul 21 2009, 12:13) *
У меня была попытка сделать нечто такое, в наличии была 1 кнопка и 2 светодиода (один из них 2х цветный). На это нужно было повесить около 3х задаваемых пользователем режимов работы и в каждом из них нужно было показывать текущий статус (то же около 2-3 булевских параметров).
Это было сделано с помощью длинных и коротких нажатий кнопки (в разное время) и разными характеристиками мигания светодиодами.

у меня тоже был опыт сделать более-менее понятный пользовательский интерфейс на 2-х кнопках и 2-х светодиодах, регулировать нужно было 4 параметра. текстовое объяснение алгоритма работы воспринималось действительно очень трудно, тогда в техописание было добавлено графическое представление интерфейса - почти все вопросы были сняты:
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
Alex K
сообщение Jul 22 2009, 05:26
Сообщение #13





Группа: Новичок
Сообщений: 4
Регистрация: 19-07-09
Пользователь №: 51 371



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


p.s. кнопка пострадала из-за неаккуратного обращения -)
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jul 22 2009, 06:46
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



С одной кнопкой много не сделаеш. Но у вас есть индикация. Нажимаете и удерживаете кнопку - переход в меню настройки, например начинает мигать номер меню и по одиночному нажатию перелистываете номера. Ещё раз нажатие и удержание переход в выбранное меню, по одиночным нажатиям меняете параметр, нажимаете и удерживаете кнопку - изменённый параметр сохраняется и переходит на уровень вверх. Ещё раз нажать и удержать выход из меню настройки. Немного запутанно но вполне реализуемо smile.gif
Ещё лучше предусмотреть выход с уарта (там пару проводков) на внешний преобразователь ttl-rs232 и настраивать через com-порт smile.gif
Go to the top of the page
 
+Quote Post
KvKv
сообщение Aug 8 2009, 07:06
Сообщение #15





Группа: Новичок
Сообщений: 2
Регистрация: 14-10-08
Из: E-burg
Пользователь №: 40 930



С одной кнопкой можно использовать, например, двойные нажатия.
Короткое одиночное, двойное, длинное одиночное - вот уже как-будто три кнопки. smile.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 16:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01511 секунд с 7
ELECTRONIX ©2004-2016