Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Прерывание INTx по изменению


Прерывание INTx по изменению

Сообщений 1 страница 12 из 12

1

Есть контроллер m8 в котором настроено  прерывание INTx по изменению логического уровня. Т. е. прерывание может произойти в двух случаях. Или переход с 0 на 1, или наоборот, переход с 1 на 0. Как узнать в подпрограмме прерываний какой логический уровень его вызвал? Считывание с порта не вариант, т. к. логический уровень к тому моменту может изменится.

0

2

Про объединение INT0 и INT1 тоже думал, но это только в случае если других вариантов не будет. Таймеры заняты под другие задачи...

0

3

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

0

4

Если это кнопка, то время будет сильно разница на одном и том же образце, всё будет зависеть от человеческого фактора...или её нажимать будет механический палец?

0

5

Я написал что это типа кнопка.  :D  На самом деле это контактный датчик, но сути это не меняет. :)

0

6

Пётр написал(а):

Я написал что это типа кнопка.  :D  На самом деле это контактный датчик, но сути это не меняет. :)

Поставьте обычный одновибратор и не парьтесь. Можно даже на инверторе.

0

7

Если бы все было так просто.

Пётр написал(а):

Периодичность замкнутого и разомкнутого состояния может меняться в широких пределах. Нужно определять длительность замкнутого и разомкнутого состояния и ни разу не ошибаться.

Одновибратор не позволит измерить  длительность замкнутого и разомкнутого состояния.

0

8

От дребезга можно избавиться аппаратно:

http://electrik.info/98280202.jpg

Если в "кнопке" одно положение.
А дальше можно обмереть задержку между срабатыванием.
Правда непонятна вообще какая минимальная скорость срабатывания и вообще, вы там тестите процентность именно дребезга или что?

0

9

Пётр написал(а):

Считывание с порта не вариант, т. к. логический уровень к тому моменту может изменится.


Не ужели скорость МК меньше дребезга контактов? :confused:

0

10

Mrshilov написал(а):

Видимо началом "замыкания" нужно считать нарастающий фронт первого импульса после длительного состояния 0. И наоборот для "размыкания".

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

kip написал(а):

Не ужели скорость МК меньше дребезга контактов?

Кроме INTx есть другие обработчики прерываний и в коде на небольшие промежутки времени прерывания будут запрещаться. Теоретически возможна ситуация когда с момента возникновения прерывания и до считывания с порта, логический уровень может изменится...

0

11

По моему все намного проще. Нужно было вместо изменения настроить прерывание например на спад импульса и после антидребезговой проверки, перенастроить его на фронт сигнала. Тогда не потребуется определять логический уровень на входе.

0

12

Запоминать последнее состояние.
Изначально 0 на входе,
если А=0 то А = 1 (нарастающий фронт),
если А=1 то  А = 0 (спад).

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Прерывание INTx по изменению