Перейти к содержанию

Обработка Нажатия Кнопок


Рекомендуемые сообщения

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

Тут использован внешний источник прерываний RB0/INT, в контроллере 16F84A он один(а может и не только в нем). Допустим мне надо обрабатывать нажатие двух и более клавиш, как это реализовать? (для каждой клавиши свой обработчик)

post-156072-0-15642000-1351191201_thumb.png

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Тут использован внешний источник прерываний RB0/INT,

в этой задаче он нахрен не нужен, вкючайте таймер и опрашивайте состояние кнопок через 5-10мс и будет вам счастье...

внешние прерывания для кнопок нужны только в случае использования режима SLEEP

Изменено пользователем IMXO
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Ну я думал это как-то не очень правильно, опрашивать постоянно кнопки, т.к. много в холостую работать будет контроллер.

Получается внешнее прерывание используется ТОЛЬКО для пробуждения контроллера? Или есть еще варианты?

Ссылка на комментарий
Поделиться на другие сайты

Секреты депассивации литиевых батареек FANSO EVE Energy

Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Ну я думал это как-то не очень правильно, опрашивать постоянно кнопки,

не постоянно , а один раз в 5-10мс ( один раз на 5-10 тыс инструкций МК при Fosc=4MHz) :rtfm:

Ссылка на комментарий
Поделиться на другие сайты

Ну я думал это как-то не очень правильно, опрашивать постоянно кнопки,

не постоянно , а один раз в 5-10мс ( один раз на 5-10 тыс инструкций МК при Fosc=4MHz) :rtfm:

Ну понятно, я это и имел ввиду, через такой коротки интервал, считай постоянно :)

Ну в общем так делают во все и это промышленное решение?

И еще по схеме. Т.е. в случае использования таймера, можно считывать нужные пины и смотреть, если на них высокий уровень - значит произошло нажатие. А как подать на них пысокий уровень, просто пин на плюс питания замкнуть кнопкой или через резистор?

Ссылка на комментарий
Поделиться на другие сайты

если на них высокий уровень - значит произошло нажатие. А как подать на них пысокий уровень, просто пин на плюс питания замкнуть кнопкой или через резистор?

на оборот : низкий уровень = нажатие , это более правильно :

1. в МК уже есть PULLUP (хотя внешний резистор надежней)

2. более высокая помехоустойчивость

Ссылка на комментарий
Поделиться на другие сайты

Т.е. через резистор замкнуть нужный пин на плюс, а кнопка в разрыв цепи в нормально замкнутом состоянии, правильно понял?

И какого номинала надо резистор?

Ссылка на комментарий
Поделиться на другие сайты

нет кнопка на массу , смотрим свою схему пост#1 там все правильно

если нет строгих условий по потреблению питания , резистор 5-10Ком

И еще по схеме. Т.е. в случае использования таймера, можно считывать нужные пины и смотреть, если на них ....

правильный алгоритм для МК 12 и 16 серии следующий:

1 прочитать порт

2 сохранить значение порта в темповскую переменную

3 провести обработку битов темповской переменной

не соблюдение этой последовательности может приводить к ошибкам в работе МК....

Изменено пользователем IMXO
Ссылка на комментарий
Поделиться на другие сайты

Реализовать без использования прерываний.

Помоему человек ясно сказал "Изучаю прерывания".

И для автора: в протеусе не обязательно MCLR тянуть к питанию.

Ссылка на комментарий
Поделиться на другие сайты

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

post-162786-0-59662100-1351230589_thumb.png

Изменено пользователем XeoN
Ссылка на комментарий
Поделиться на другие сайты

правильный алгоритм для МК 12 и 16 серии следующий:

1 прочитать порт

2 сохранить значение порта в темповскую переменную

3 провести обработку битов темповской переменной

не соблюдение этой последовательности может приводить к ошибкам в работе МК....

т.е.

1. Считать порт в рабочий регистр

2. Сохранить рабочий регистр в память данных

3. И тут понятно, работать с ячейкой памяти, проверять нужные биты

правильно понял?

П.С. почему этот алгоритм правильный для 12 и 16 пиков? Для 18 это не будет работать?

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

Сам уже думал, как бы один единственный источник внешних прерываний использовать для всех кнопок, чтобы когда на нем происходит прерывание, считывать кнопки. Я так понял, 4-ый пин у атмеги на этом ресунке - это и есть источник внешнего прерывания?

Ссылка на комментарий
Поделиться на другие сайты

INT для кнопок - жирно и через жо... задницу. Не такое уж и важное по времени событие, что бы так быстро реагировать на него.

Для этого Вам понадобится ещё один таймер, что бы отсчитывать время после прерывания, по которому разрешать прерывания по INT'у, для устранения дребезга. Лучше этот таймер задействовать для периодичного опроса кнопок, заодно и системные тики реализовать, которые понадобятся для формирования всяческих там задержек...

Так-же, Вы не сможете отлавливать отжатие кнопки и реализовать обработку длинного нажатия.

Ну и выводов и деталей используется больше. А спрашивается - нафига этот весь геморрой, если можно сделать по-нормальному ?

Ссылка на комментарий
Поделиться на другие сайты

не знаю что вы поняли , но написали ерунду

понятие рабочий регистр включает в себя все регистры МК и РОН(регистр общего назначения) и РСН(регистр специального назначения)

понятие память данных - флеш память МК

короче порт читаем в аккумулятор, аккумулятор сохраняем в РОН , работаем с битами РОН

для 18 серии работать будет , но это не актуально в ней есть дополнительный регистр LATB

Ссылка на комментарий
Поделиться на другие сайты

не знаю что вы поняли , но написали ерунду

понятие рабочий регистр включает в себя все регистры МК и РОН(регистр общего назначения) и РСН(регистр специального назначения)

понятие память данных - флеш память МК

короче порт читаем в аккумулятор, аккумулятор сохраняем в РОН , работаем с битами РОН

для 18 серии работать будет , но это не актуально в ней есть дополнительный регистр LATB

Рабочий регистр - это W, по крайней мере так написано в книге

Ссылка на комментарий
Поделиться на другие сайты

Читаю даташит к дедушке 84А, добрался до таймера.

Возникли воворосы:

1. Предделитель можно использовать ТОЛЬКО в режиме счетчика и ТОЛЬКО с внешним тактирующим сигналом на порту RA4/TOCKI ?

2. С использованием предделителя 1:256 и самого таймера 256, получается 256*256 = 65536 операций, одна операция 4 такта, итого 4*65536= 262144 такта, т.е. примерно 262мс ? Получается максимальный интервал таймера0 составляет 262мс ?

Или я не так все понял? :)

Изменено пользователем metallic
Ссылка на комментарий
Поделиться на другие сайты

ТОЛЬКО с внешним тактирующим сигналом на порту RA4/TOCKI ?
Нет, не только. Предделитель можно подключать и при тактировании от Fosc.

На сколько я помню, в этом чипе прескалер можно подключить либо перед WDT либо перед таймером. Минимальное соотношение перед WDT = 1:1, перед таймером = 1:2.

Получается максимальный интервал таймера0 составляет 262мс ?
Нет. Получается - 65536 микросекунд на частоте осцилятора, равной 4Мгц.

1 такт таймера = 1 машинному циклу = 4 тактам осцилятора.

Изменено пользователем Alex
Ссылка на комментарий
Поделиться на другие сайты

Нет, не только. Предделитель можно подключать и при тактировании от Fosc.

Т.е. по первому пункту(предделитель работает только в режиме счетчика) все верно?

А при тактировании от Fosc - это имеется ввиду от внутр. генератора? Т.е. с обычным внешним кварцем?

На сколько я помню, в этом чипе прескалер можно подключить либо перед WDT либо перед таймером. Минимальное соотношение перед WDT = 1:1, перед таймером = 1:2.

Так и есть, конфигурится это битом PSA, регистра OPTION_REG

Нет. Получается - 65565 микросекунд на частоте осцилятора, равной 4Мгц.

1 такт таймера = 1 машинному циклу = 4 тактам осцилятора.

Что-то не понял, получается на частоте 4Мгц один машинный цикл выполняется за 1 микросекунду? Как это рассчитывается?

Ссылка на комментарий
Поделиться на другие сайты

Т.е. по первому пункту(предделитель работает только в режиме счетчика) все верно?
Что за первый пункт ? Предделитель всегда работает в режиме счётчика, т.к. - это и есть счётчик, находящийся перед таймером.
А при тактировании от Fosc - это имеется ввиду от внутр. генератора? Т.е. с обычным внешним кварцем?
Не обязательно от внутреннего. От тактового генератора.

Кстати, в 84А нет внутреннего осцилятора, только внешние.

Что-то не понял, получается на частоте 4Мгц один машинный цикл выполняется за 1 микросекунду? Как это рассчитывается?
Да, так и получается. Тактовая частота = частота осцилятора / 4.
Ссылка на комментарий
Поделиться на другие сайты

Тактовая частота = частота осцилятора / 4.

Это я знаю, что 1 машинный цикл выполняется за 4 такта генератора.

Т.е. при 4Мгц:

4000000Гц / 4 = 1000000 тактовая частота, т.е. миллион операция в секунду

Но что-то не соображу, почему 65565 операций будут выполняться 65565мкС ?

А сколько времени будут выполняться 65565 операция на частоте 20МГц ?

Т.е. при 5.000.000 операций в сек (4МГц), одна операция выполняется 1.000.000/5.000.000 = 0.2мкС ?

Получается 65565 * 0,2 = 13113 мкС ?

Изменено пользователем metallic
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • @DownHouse , насчёт номинала затворного резистора вам уже сказали. Он образует RC-цепочку с ёмкостью затвора транзистора. На высоких частотах ШИМ работать не будет. Кроме того, у транзисторных оптопар есть такой параметр: Как видите, ток коллектора может быть даже меньше входного тока в светодиод. Быстро управлять затвором мощного полевика, у которого ёмкость под 10 нФ, таким маленьким током не получится. Так что и тут ограничение на частоту ШИМ. По закону Ома он считается. Какой ток коллектора сможет выдать транзистор оптопары, такое напряжение на R2 и получится. Естественно с "упором" в напряжение питания. Выше него не прыгнешь. Транзистор оптопары войдёт в насыщение, выходной ток оптопары станет меньше максимального, который может выдать её транзистор, ток будет ограничен значением сопротивления R2. Например, при коэффициенте передачи тока оптопары, равным единице, при напряжении питания 5 В, при токе в светодиод оптопары 10 мА и при сопротивлении резистора R2 500 Ом, напряжение на нём будет 10 мА * 0,5 кОм = 5 В. Но если оптрон посредственный, с коэффициентом передачи тока 0,5, то при тех же условиях, выходной ток коллектора транзистора оптрона будет не больше 5 мА, и напряжение выше 2,5 В на R2 не поднимется. Если пороговое напряжение открывания полевого транзистора выше, то он не откроется. Чтобы схема работала при установке любого экземпляра оптопары, без отбора, схема проектируется исходя из наихудших значений параметров. В вашем случае минимально-допустимое сопротивление R2 будет 1 кОм (10 мА/2 * 1 кОм = 5 В).  
    • Алексей, ну ты-то уже опытный в аудиотехнике волк и понимаешь, что все эти буквенные обозначения на латинице у производящих е-cap-ы контор по факту означают разные потребительские характеристики. А товарищ @Алексей Акулиничев в этом ещё новичок; натрёт в залобье мозолей, с опытом тоже начнёт разбираться в "who из где". 
    • Смотря для чего оптимальный. Если вы КПД блока под 99% вытягиваете, то нужен очень маленький. Но при этом будет сильное недоиспользование габаритной мощности "железа" сердечника. Если задача по-максимуму использовать возможности сердечника - то ограничивается только максимальной температурой сердечника, точкой Кюри...
    • Примерно так. НО! Если у этих динамиков НЧ реально от 40Гц, то кубики пенопласта будут тереться друг об друга , создавая заметные на слух "артефакты", поэтому надо бы запастись тонким поролоном, или плотной тканью прокладывая его/её между ними, или обворачивая их. ЗЫ. Чем дешевле динамик и чем проще кажется реализация на нём более-менее ровно играющей акустической системы,тем  больше возни с ним. Это уже не раз доказанный практикой факт.
    • Вот спасибо. Это прям для меня.  Я не про этот резистор. Про этот резистор я понял. Я не понимаю нужен ли резистор перед 4 выводом оптопары. Да я пока думаю нужен ли он будет (в смысле ШИМ). Точности большой по температуре не нужно будет. R1 будет от 150 - 200 Ом, а вот R2 не очень понимаю как считать (как я понимаю этот резистор будет затвор транзистора на землю сажать пока оптопара закрыта,  5-10 кОм думаю) Вот так сделал.
    • Тогда и ШИМ можно ещё медленнее сделать. Все что вам осталось - рассчитать параметры работы оптопары (R1, R2). 
×
×
  • Создать...