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

Внешнее прерывание

03.03.2011, 23:54. Просмотров 6070. Ответов 14
Метки нет (Все метки)

Привет всем!

Столкнулся с проблемой - при использовании внешнего прерывания по переднему фронту оно срабатывает самопроизвольно (особенно при приближении к девайсу руки). Видимо наводки? Попробовал повесить на INT1 кондюк на 22 pF (прижал тупо рукой) вроде все стало на место. Припаял - опять тоже самое. Чувствую мой вопрос совсем "чайниковский":), но поиском на форуме ответ найти не смог. Так что же нужно сделать, чтобы прерывание само не срабатывало?

P.S. Девайс - самопальные часы, внешнее прерывание используется для обработки нажатия кнопки. При нажатии на INT1 подается лог 1. RisingEdge.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2011, 23:54
Ответы с готовыми решениями:

Внешнее прерывание на ATmega328p
Такой вот не замысловатый текст. Но ни INT0 ни INT1 не срабатывает. В AVR Studio на PORTD (если...

Не срабатывает внешнее прерывание
.divice atmega8 .nolist .include "m8def.yms" .list ;===================== .def temp= r16...

внешнее прерывание на tiny15
Проблема в следующем: На тини15 к выводу Int0 подключаю кнопку без фиксатора, через которую...

Внешнее прерывание ATmega2560 в ASM
Добрый день! Не могу настроить прерывание по кнопке на INT0 у МК ATmega2560. Посмотрите...

Внешнее прерывание Mega16 - [РЕШЕНО]
Код#include <avr/io.h> #include <avr/interrupt.h> ISR(INT0_vect) { DDRB = 0xFF; PORTB =...

14
Joit.Dosi
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 433
03.03.2011, 23:58 2
Можно прижать ногу резистором килоом на 10. Правда не знаю насколько это правильно, возможно есть вариант красивее.
0
Vodx
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 68
04.03.2011, 00:01 3
Цитата Сообщение от Joit.Dosi
Можно прижать ногу резистором килоом на 10. Правда не знаю насколько это правильно, возможно есть вариант красивее.
Тоже кстати думал про это, но почему-то решил, что кондюк самое то будет. Попробую завтра мож и прокатит.
0
Joit.Dosi
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 433
04.03.2011, 00:06 4
Можно попробовать программно. В обработчике прерывания через несколько микросекунд проверить состояние кнопки (можно несколько раз). Если наводка, то высокое состояние будет не долго держаться.
0
04.03.2011, 00:06
Vodx
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 68
04.03.2011, 00:08 5
Цитата Сообщение от Joit.Dosi
Можно попробовать программно. В обработчике прерывания через несколько микросекунд проверить состояние кнопки (можно несколько раз). Если наводка, то высокое состояние будет не долго держаться.
О, а это идея! Спасибо, попробую
0
hixFF
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 641
04.03.2011, 00:18 6
подтяни резистором. когда ты держал конденсатор пальцем он играл эту роль.
0
Vodx
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 68
04.03.2011, 00:21 7
Цитата Сообщение от hixFF
подтяни резистором. когда ты держал конденсатор пальцем он играл эту роль.
Ага, попробую завтра.
0
Vodx
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 68
07.03.2011, 21:53 8
Подтянул резистором на 10К как советовали - помогло (внешнее прерывание перестало срабатывать само). Зато появилась проблема дребезга - при нажати кнопки - с этим делом справился легко:

При срабатывании внешнего прерывания:

1) в обработчике прерывания запрещаю это самое прерывание
2) через 266 мксек после срабатывания обнуляю флаг прерывания и разрешаю само прерывание

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

Вот и все. Всем спасибо за ответы. Попозже выложу фотки и прошиву, если кому будет интересно.
0
hixFF
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 641
07.03.2011, 22:07 9
ждем
0
Vodx
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 68
08.03.2011, 19:41 10
Насчет 266 мксек - описался, конечно же 266 мсек.
0
vrr
0 / 0 / 0
Регистрация: 24.11.2009
Сообщений: 4
10.03.2011, 18:35 11
Мне помог кондер на 0.1мкф на земелю
0
Vodx
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 68
12.03.2011, 13:32 12
Фотки того, что получилось.



0
Vodx
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 68
12.03.2011, 13:36 13
Схема

0
mosmk
0 / 0 / 0
Регистрация: 10.03.2011
Сообщений: 1
14.03.2011, 10:50 14
А отрезок кода можно посмотреть, где прерывание обрабатывается?
0
Vodx
0 / 0 / 0
Регистрация: 15.04.2010
Сообщений: 68
17.03.2011, 19:22 15
Цитата Сообщение от mosmk
А отрезок кода можно посмотреть, где прерывание обрабатывается?
Код
GICR=0; // запрещаем прерывания INT0 и INT1
h++; // увеличиваем часы на 1
if (h==24) h=0;
flag=1; // флаг нужен для того, чтобы таймер узнал о прерывании
Далее в обработчике прерывания таймера через 266 млсек пишем:

Код
GIFR=$C0; // сбрасываем флаги прерываний
GICR=$C0; // разрешаем прерывания INT0 и INT1
0
17.03.2011, 19:22
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2011, 19:22

Внешнее прерывание INT0. ATmega8
Я считаю что код правильный, но он не работает )))) Симуляция в Proteus показывает что прерывание...

внешнее прерывание INT0 ATtiny2313
Как изобразить прерывание в AtmelStdio7 ну хоть какое то хоть блин любое.... Сначала пробовал на...

Использую внешнее прерывание, где глюк?
Соображаю тут на tiny13 программную обработку обмена по COM. Сделал следующим образом, по фронту...


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

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

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