Страница 1 из 1

ATMega48 внешние прерывания

Добавлено: Вт июл 24, 2012 07:58:47
BCluster
Всем привет. Собственно вопрос такой. Есть у меги48 куча ног которые могут вызвать прерывания PCINTx. Мне нужно знать какая собственно нога и его и вызвала. Нужно ловить как передний так и задний фронты, причем знать какой был пойман (но это не проблема если знать какая ножка вызвала прерывание). В даташите я чет не нашел ничего. Всем спасибо заранее, удачи.

Re: ATMega48 внешние прерывания

Добавлено: Вт июл 24, 2012 09:37:51
luxin
Считываете состояние портов. А какой, Вы можете определить по прерыванию, точнее можно в нем и считывать.

Re: ATMega48 внешние прерывания

Добавлено: Вт июл 24, 2012 09:45:35
BCluster
Считывать состояние портов это понятно, однако это достаточно сложно ввиду того, что мне нужны прерывания по обоим фронтам.
Думал может есть какой-то регистр в котором содержится эта инфа, а я его проглядел

Re: ATMega48 внешние прерывания

Добавлено: Вт июл 24, 2012 10:17:07
luxin
Для этого придется хранить предыдущее состояние портов.

Re: ATMega48 внешние прерывания

Добавлено: Вт июл 24, 2012 11:16:05
BCluster
Понял, спасибо, думал может что-то проглядел, ан нет, придется мучаться)))

Re: ATMega48 внешние прерывания

Добавлено: Вт июл 24, 2012 11:21:33
luxin
Почему мучатся? У Вас вместо регистров будут ячейки памяти, а для определения пина используете логические операции. Пара строчек ничего не усложняет.

Re: ATMega48 внешние прерывания

Добавлено: Вт июл 24, 2012 11:34:20
zero648
Если прерывания вызываются по переднему и заднему фронтам, так вроде все логично получается, в обработчике проверяем состояние пинов и сравниваем с предыдущим их состоянием, так и можно узнать на какой ноге случилось изменение логического уровня. :)))

Re: ATMega48 внешние прерывания

Добавлено: Вт июл 24, 2012 11:36:52
zero648
Можно также векторы указать на один обработчик, и в одном обработчике все делать.

Re: ATMega48 внешние прерывания

Добавлено: Вт июл 24, 2012 11:46:51
luxin
zero648 писал(а):... в обработчике проверяем состояние пинов и сравниваем с предыдущим их состоянием, так и можно узнать на какой ноге случилось изменение логического уровня. :)))
Так о чем и речь, накладные раходы мизерные.

Re: ATMega48 внешние прерывания

Добавлено: Вт июл 24, 2012 12:19:06
BCluster
Обработчик на передний и задний фронт в любом случае один, ибо вектор один.
Ну не проблема - просто думал мож че есть ) Просто у мя оперативки мало шоппц, думал мож съэкономить на переменных )))

Re: ATMega48 внешние прерывания

Добавлено: Вт июл 24, 2012 12:19:38
zero648
+100% :beer:

Re: ATMega48 внешние прерывания

Добавлено: Вт июл 24, 2012 12:22:14
zero648
Я просто думал на разных ногах будут прерывания по разным векторам, просто с 48 не сталкивался :tea:

Re: ATMega48 внешние прерывания

Добавлено: Вт июл 24, 2012 12:30:57
luxin
BCluster писал(а):Ну не проблема - просто думал мож че есть ) Просто у мя оперативки мало шоппц, думал мож съэкономить на переменных )))
Ну, в принципе тем и хорош 48, что если не хватит, то можно заменить на 88 или 168. Удачи в реализации проекта.

Re: ATMega48 внешние прерывания

Добавлено: Вт июл 24, 2012 12:36:45
BCluster
Можно, но за ними надо ехать на рынок, а мну влом :D
Спасибо )

Re: ATMega48 внешние прерывания

Добавлено: Вт июл 24, 2012 12:44:07
luxin
BCluster писал(а):Спасибо )
Пожалуйста.

Re: ATMega48 внешние прерывания

Добавлено: Вт июл 24, 2012 16:50:56
Frogfot
BCluster писал(а):Есть у меги48 куча ног которые могут вызвать прерывания PCINTx.

См. раздел 13.2.4 даташита

Re: ATMega48 внешние прерывания

Добавлено: Вт июл 24, 2012 17:03:47
luxin
Frogfot, вроде все уже выяснили.