Обсуждаем контроллеры компании Atmel.
Ответить

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

Вс окт 10, 2021 21:14:28

Коллеги, напомните, плз, какие особенности у внешних прерываний AVR. Конкретно - ATmega328P. Я настроил INT0 на срабатывание по фронту (биты ISC01 и ISC00 регистра EICRA ставил и 10, и 11 - и по заднему и по переднему фронту), взвел бит 0 (INT0) регистра EIMSK и подал на вход INT0 (PORTD бит 2) меандр 1 Гц. По идее, все, прерывание должно срабатывать раз в секунду. Однако, изба фигвам, срабатывает один раз, и тишина. Как будто надо куда-то послать сигнал подтверждения. Но ведь ничего такого не требуется? Ставил контрольную выдачу прямо в ISR(INT0_vect) - по фиг, после сброса 1 раз сработает, и тишина.

Вопрос стандартный - что я делаю не так? Блин, с этими СТМ32 совсем забыл АВР-ки...

Re: Внешнее прерывание INT0

Вс окт 10, 2021 23:09:54

Да никаких особенностей.
Может, контрольная выдача - запись в PORT настроенного на вход канала?
The I-bit is cleared by hardware after an interrupt has occurred, and is set by the RETI instruction to enable subsequent interrupts.
Может, через RET, а не через RETI выходите из обработчика?

Re: Внешнее прерывание INT0

Пн окт 11, 2021 01:57:30

Конкретно - ATmega328P.

Для проверить МК… светик подключить к выводу РВ5. Если шильд ардуины, то светик уже есть на борту. :)
ATmega328.hex

Re: Внешнее прерывание INT0

Пн окт 11, 2021 03:14:49

Вопрос снят. Удалил.
Последний раз редактировалось akl Пн окт 11, 2021 10:51:20, всего редактировалось 2 раз(а).

Re: Внешнее прерывание INT0

Пн окт 11, 2021 08:51:14

Разобрался. Все оказалось гораздо проще. Поганая Ардуино Нано. Мелкая, земляных ноги всего две, да я еще и гребёнку к ней припаял ногами в сторону деталей, видимость никакая... В общем, земляной провод к индикатору я нечаянно, вместо ноги GND, напялил на ногу D2 (PD2, она же INT0), а провод с 1 Гц на ногу D3 (PD3, INT1). Земля у них все равно осталась общей, через USB, а вход INT0 оказался заземленным. Исправил, и все пошло.

Извините за беспокойство... :-)
Ответить