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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Прерывания от кнопок
over
сообщение Jan 20 2005, 16:39
Сообщение #1





Группа: Новичок
Сообщений: 11
Регистрация: 20-01-05
Пользователь №: 2 086



Есть в семействе AVR чип которого можно разбудить изменением лог. уровня на входе порта? Реально есть 4 кнопки, нужно чтобы контроллер впадал в спячку при отпускании кнопки и завершении операции и соотв. будился при нажатии любой кнопки. В 2313 есть только два входа внешнего прерывания что маловато. Можно подвесить что-нибудь снаружи, но теряется кайф использования микроконтроллера.
Go to the top of the page
 
+Quote Post
RayDen
сообщение Jan 20 2005, 17:05
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 21-12-04
Из: С-Петербург
Пользователь №: 1 584



Обычные четырехногие кнопки для пайки на плату имеют
2 замыкаемых/размыкаемых по нажатию контакта.
Используй одну пару ног, как определение нажатой кнопки на любой вход.
Другую пару контактов соедини впослед у всех кнопок и заведи на вход
прерывания.
Можешь разбить кнопки на две группы и подключить к двум ногам прерываний.
Удачи.


--------------------
"Лучше один хороший гвоздь, чем десять плохих микросхем..."
Go to the top of the page
 
+Quote Post
over
сообщение Jan 20 2005, 17:21
Сообщение #3





Группа: Новичок
Сообщений: 11
Регистрация: 20-01-05
Пользователь №: 2 086



Цитата(RayDen @ Jan 20 2005, 20:05)
Обычные четырехногие кнопки для пайки на плату имеют
2 замыкаемых/размыкаемых по нажатию контакта.
Используй одну пару ног, как определение нажатой кнопки на любой вход.
Другую пару контактов соедини впослед у всех кнопок и заведи на вход
прерывания.
Можешь разбить кнопки на две группы и подключить к двум ногам прерываний.
Удачи.
*

Об этом я думал. Но ситуация такая, что неизвестно какие попадутся кнопки (устройство будет в автомобиле пыхтеть, затем и sleep, чтобы greenpeace не возмущался smile.gif). Вариант - поставить элемент 4ИЛИ, но имхо некрасиво.
Группы кнопок это хорошо, понатыкать диодов для шифратора, но опять-таки некрасиво. А вот прерывание непосредственно от кнопки с порта - вот это было бы изящно. Есть среди AVR-ов такой контроллер.
Go to the top of the page
 
+Quote Post
nml
сообщение Jan 20 2005, 20:24
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 86
Регистрация: 13-06-04
Из: Minsk
Пользователь №: 29



Цитата(over @ Jan 20 2005, 19:39)
Есть в семействе AVR чип которого можно разбудить изменением лог. уровня на входе порта? Реально есть 4 кнопки, нужно чтобы контроллер впадал в спячку при отпускании кнопки и завершении операции и соотв. будился при нажатии любой кнопки. В 2313 есть только два входа внешнего прерывания что маловато. Можно подвесить что-нибудь снаружи, но теряется кайф использования микроконтроллера.
*

Такая возможность есть у ... ну, скажем так, чипов поновее. Например, Tiny26 и все меги. И даже заказать - по фронту, спаду или изменению.
Go to the top of the page
 
+Quote Post
halfdoom
сообщение Jan 21 2005, 08:42
Сообщение #5


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

Группа: Свой
Сообщений: 1 003
Регистрация: 20-01-05
Пользователь №: 2 072



Цитата(over @ Jan 20 2005, 20:39)
Есть в семействе AVR чип которого можно разбудить изменением лог. уровня на входе порта?.
*

Конечно есть, самый маленький tiny11/12, как раз на четыре кнопки.
Go to the top of the page
 
+Quote Post
-Tумблер-
сообщение Jan 21 2005, 12:05
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040



Цитата(over @ Jan 20 2005, 20:21)
Но ситуация такая, что ..устройство будет в автомобиле пыхтеть....
*


Для автомобиля, с его помехами, предложение пустить
кучу кнопок на прерывания представляется мне
не слишком удачным.
Уж лучше использовать одно прерывание от таймера
и от него опрашивать кнопки. Полагаю, ~10 мСек вполне
подойдет.
smile.gif


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post
KRS
сообщение Jan 21 2005, 13:33
Сообщение #7


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



В Atiny2313 есть же Pin Change Interrupt
Go to the top of the page
 
+Quote Post
-Tумблер-
сообщение Jan 21 2005, 14:56
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040



Цитата(over @ Jan 20 2005, 19:39)
Реально есть 4 кнопки...  прерывания ..
*


А, чуть не забыл !
Повесить "дребезг контактов" на прерывание - это КРУТО !
А четыре дребезга на четыре прерывания - это вообще "до отказа КРУТО" !!!
biggrin.gif


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post
sseett
сообщение Jan 22 2005, 04:47
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 165
Регистрация: 14-01-05
Из: РФ Приморский край (рег.25)
Пользователь №: 1 939



Как вариант - использовать АЦП (всего 1 вывод), а клаву сделать виде делителя напряжения. Фильтровать от автомобильных помех RC (или LC) цепью на входе АЦП и/или программно.
Камень из осьминогов: Tiny13 или15 . Если надо больше ног: Tiny26, mega48/8/88…
Удачи!
Go to the top of the page
 
+Quote Post
halfdoom
сообщение Jan 24 2005, 04:34
Сообщение #10


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

Группа: Свой
Сообщений: 1 003
Регистрация: 20-01-05
Пользователь №: 2 072



Цитата(-Tумблер- @ Jan 21 2005, 18:56)
Повесить "дребезг контактов" на прерывание - это КРУТО !
А четыре дребезга на четыре прерывания - это вообще "до отказа КРУТО" !!!
biggrin.gif
*

Да оно не так страшно как кажется, ведь по прерыванию нужно только
разбудить контроллер, а затем идет стандартный опрос по таймеру.
Go to the top of the page
 
+Quote Post
TriD
сообщение Jan 24 2005, 14:19
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 29-12-04
Пользователь №: 1 728



Цитата(over @ Jan 20 2005, 20:39)
Есть в семействе AVR чип которого можно разбудить изменением лог. уровня на входе порта? Реально есть 4 кнопки, нужно чтобы контроллер впадал в спячку при отпускании кнопки и завершении операции и соотв. будился при нажатии любой кнопки. В 2313 есть только два входа внешнего прерывания что маловато. Можно подвесить что-нибудь снаружи, но теряется кайф использования микроконтроллера.
*


На самом деле все очень просто:
Одну из двух ног всех 4-х или более кнопок цепляешь на какие-нибудь свободные ноги микроконтроллера и подтягиваешь эти ноги к плюсу через резисторы (лучше внешние). Оставшиеся ноги кнопок цепляешь к земле. На выводах кнопок, которые подключены к микроконтроллеру, делаешь "логическое и" (диод от кажной кнопки анодом к выводу прерывания MCU, вывод прерывания подтягиваешь к единице)
Вход внешнего прерывания программируешь для срабатывания по уровню логического нуля.
Подобная схема включения позволит, кроме всего прочего, отслеживать нажатие нескольких кнопок одновременно.
По поводу дребезга:
после пробуждения опрашивай состояние кнопок, скажем, через 100 или 200 мс и всего делов smile.gif
По поводу применения 2313 в автоэлектроннике (из личного опыта):
абсолютно неблагодарное занятие - схема будет самопроизвольно перезапускаться от любой помехи (даже от разряда статики на корпус авто). Причем это полностью не исключить никакими схемотехническими ухищрениями (ну, если только будешь использовать гальваническую развязку по питанию и по всем входам-выходам). Все это определяется особенностями реализации самого MCU.
Благоразумнее использовать последние версии чипов, например, мегу8.
Go to the top of the page
 
+Quote Post
over
сообщение Jan 28 2005, 20:18
Сообщение #12





Группа: Новичок
Сообщений: 11
Регистрация: 20-01-05
Пользователь №: 2 086



Всё прочитал. Благодарю. Особенно Trid. Попробую отчитаюсь.
Go to the top of the page
 
+Quote Post
over
сообщение Jan 29 2005, 18:01
Сообщение #13





Группа: Новичок
Сообщений: 11
Регистрация: 20-01-05
Пользователь №: 2 086



Есть вопрос по алгоритму защиты от дребезга контактов.
Я поразмыслил и вижу два варианта:
Начинается с выводом МК из спячки нажатием на любую кнопку. Дребезг контактов в цифре представляет собой последовательность нулей и единиц с преобладанием первых (активный уровень у нас нуль).
1. Запускаем таймер, выдаются прерывания каждые, скажем 50 мс, поверяем все 4 кнопки, как только находим на какой-то из них нуль делаем вывод о нажатии.
2. Запускаем таймер как и в предыдущем пункте, проводим 50 итераций. Для каждой кнопки считаем общее количество нулей и единиц отдельно. Затем подытоживаем. При превышении количества нулей над единицами, скажем в три раза, делаем вывод о нажатии.
На практике кто какой алгоритм использовал? Есть какие-то другие варианты?
Go to the top of the page
 
+Quote Post
Stas
сообщение Jan 29 2005, 18:29
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 464
Регистрация: 1-10-04
Из: Челябинск
Пользователь №: 751



Я делаю так. По внешнему прерыванию от нажатия кнопки проц просыпается и считывает код нажатой клавиши, снимает внешнее прерывание и запускает таймер на 250мс и производит какие то действия по обработке реакции на однократное нажатие, по прерыванию переполнения таймера считываем код нажатой клавиши, если код тот же - то считаю вторым нажатием (чтоб пользователь не мацал клаву и не портил себе нервы) и опять заряжаем таймер на 250 мс производим соответствующие действия по обработке 2 - х кратного нажатия и т.д. - считаем все многократным нажатием. Если при очередном переполнении таймера код считанной кнопки изменился то это идет как первое нажатие другой клавиши. Если же при прерывании таймера нет нажатой клавиши, то опять производим какие то действия (засыпаем, обрабатываем что вызвалось нажатием клавиши и т.п.). Все просто. А 250 мс - это засело со времен института, вроде как оптимальное время сканирования клавиатуры. Если устройство критично к потреблению, то можно сделать чтоб проц сам себе управлял питанием. Т.е. - нажали кнопку - подали питание - по прерыванию RESET он оживился и обработал клаву как написано выше, после чего сам себе отрубил питание.. При работе с ЖКИ и клавиатурой бывает удобна идея системного таймера, когда один таймер формирует сетку частот на сканирование клавы и на вывод в ЖКИ (если использовать порт с ЖКИ только на вывод, не считывая его бит состояния).
Go to the top of the page
 
+Quote Post
over
сообщение Jan 29 2005, 19:03
Сообщение #15





Группа: Новичок
Сообщений: 11
Регистрация: 20-01-05
Пользователь №: 2 086



[q]проц просыпается и считывает код нажатой клавиши[/q]
А может так оказаться, что мы считываем уровень, а вместо нуля получится единица из-за дребезга и тогда облом, кнопка не будет воспринята сразу, и через 250 мс, с меньшей вероятностью, но также может считаться единица вместо нуля, полсекунды холостого простоя многовато. Может время поменьше установить.
Кстати, ATTiny 2313 точно имеет режим пробуждения по изменению уровня в порту. Может на нём и сделаю. Хотя у меня завалялся один 2313 из старой серии. И ATTiny13 также имеет этот режим. ATTiny11/12 в документации без подробностей по прерываниям.
Go to the top of the page
 
+Quote Post

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

 


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


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