Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Прерывания В ATtiny13 |
Автор: interesuuwiysia 25.10.2007, 14:43 |
Доброго времени суток! Работаю с Тини13. Выставляю прерывания Pin Change Interrupt на 3й пин. Установку делаю на срабатывание по фронту прямоугольного импульса. На пин завожу прямоугольные импульсы с частотой 50гц, которые получились путем обработки сигнала от сети в 220В. Контроллер прерывания обрабатывает, время срабатывания не плавает, тк решается задача синхронизации. Вот только есть одна проблема: контроллер срабатывает как на фронт, так и на спад импульса... Когда настраиваю контроллер только на спад, он все-равно обрабатывает два события: по фронту и спаду... Привожу код настройки: .Macro Set_PCINT3 ; disable all interrupts to avoid MC corruption cli ;enables Pin Change interrupt and disables INT0 interrupt ldi r18, GIMSK ori r18, (1<<PCIE) ;;;;| (1<<INT0); andi r18, ~(1<<INT0); out GIMSK, r18 ;selects PB3 as Pin Change interrupt source and disables others ldi r19, PCMSK ori r19, (1<<PCINT3) andi r19, ~((1<<PCINT5) | (1<<PCINT4) | (1<<PCINT2) | (1<<PCINT1) | (1<<PCINT0)) out PCMSK, r19 ;sets the event affecting an interrupt ldi r20, MCUCR ;andi r20, ~((1<<ISC01) | (1<<ISC00)) ori r20, (1<<ISC01) | (1<<ISC00) out MCUCR, r20 .EndMacro Никак не могу разобраться в чем же дело... Пробовал на двух контроллерах - оба работают одинаково. Значит ошибаюсь где-то у меня... Поделитесь пожалуйста опытом!!! Заранее благодарен! |
Автор: AVR32 25.10.2007, 17:25 |
И неудивительно, что получаете такой результат! ‘Pin Change Interrupt’ - прерывание по изменению состояния пина. Вот и получается, что прерывание будет и по положительному фронту, и по отрицательному. |
Автор: interesuuwiysia 25.10.2007, 17:42 |
Да, но в мануале в разделе прерываний вперемешку описаны прерывания Pin Change и INT0. И не совсем понятно, для кого из них можно устанавливать различные варианты срабатывания. Таблица с устновкой в регистре MCUCR битов ISC01 и ISC00 (которые и определяют событие для возникновения прерывания) дана без каких-либо дополнительных разъяснений. Таким образом получается, что только INT0 может работать с каждым фронтом поотдельности? |
Автор: Коляй 25.10.2007, 18:03 |
В этих Тинях с прерываниями вобще непонятки полные. У меня как только флаг поднимется, так постоянно и висит. Программа прыгает в прерывание TIMER1_COMP как только вернётся из него. Уже и АVR-студию поменял с 4 на 3,21 и всё равно. И порт делал на вход и на выход, и nop -ы лишние вставлял. Проц Тини-15L. А ещё в студии работало всё четко, а в протеусах (6 и 7) ни в какую. Уже думаю на ПИК перейти, там надеюсь нет таких глюков! |
Автор: interesuuwiysia 25.10.2007, 22:16 |
Ну я понимаю когда один контроллер некорректно работает... но когда уже второй кряду.... Атмел - серьезный вроде продукт. |
Автор: Willy 26.10.2007, 11:34 |
Заведи входной сигнал на ногу РВ0, включи прерывание INT0, а по изменению запрети(GIMSK = 0x40) по фронту на INT0 (MCUCR |= 0x03) и будет тебе счастье ![]() |
Автор: interesuuwiysia 26.10.2007, 12:53 |
Я уже так и сделал! Спасибо ![]() |
Автор: AVR32 27.10.2007, 02:21 |
Добавлю, что в 'Pin Change Interrupt' разрулить ситуацию с фронтами можно анализируя текущее состояние портов. А вообще, да, как уже было замечено, выбор фронта только по int0. В корне несогласен с этим утверждением: Ну я понимаю когда один контроллер некорректно работает... но когда уже второй кряду.... Атмел - серьезный вроде продукт. В этом случае, без обид, 'ручёнки кривые'. |
Автор: Коляй 27.10.2007, 13:59 | ||
Ручонки то мож и кривые, не спорю. Но софт ещё кривее. Непонятно почему глюки качуют из версии в версию той же авр-студии. Ну а про систему команд вобще молчу! Не, ну на СИ то конечно нет разницы, что там и как присходит, а вот в Тини-15 нет ОЗУ и ИАР с ним просто не работает. И вот на асме уже вторую неделю мучаюсь! То регистр не тот (не старший), то команда не такая, то ещё чего не так! Сил нет уже никаких. А кстати когда с Мегой8535 работал на СИ, всё четко было и в авр-студии и в Протеусе и LCD всё отображал корректно (кроме русского шрифта конечно) и меню работало. Видимо писаки софта не заинтересованы в корректной поддержке старых моделей. А зачем? Надо же вперёд! К светлому будущему на АРМ-ах! |