Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (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) и будет тебе счастье  smile 


Автор: interesuuwiysia 26.10.2007, 12:53
Я уже так и сделал! Спасибо smile

Автор: AVR32 27.10.2007, 02:21
Добавлю, что в 'Pin Change Interrupt' разрулить ситуацию с фронтами можно анализируя текущее состояние портов. А вообще, да, как уже было замечено, выбор фронта только по int0.
В корне несогласен с этим утверждением:
Ну я понимаю когда один контроллер некорректно работает... но когда уже второй кряду.... Атмел - серьезный вроде продукт.
В этом случае, без обид, 'ручёнки кривые'.

Автор: Коляй 27.10.2007, 13:59
Цитата(AVR32 @ 27.10.2007,  02:21)
Добавлю, что в 'Pin Change Interrupt' разрулить ситуацию с фронтами можно анализируя текущее состояние портов. А вообще, да, как уже было замечено, выбор фронта только по int0.
В корне несогласен с этим утверждением:
Ну я понимаю когда один контроллер некорректно работает... но когда уже второй кряду.... Атмел - серьезный вроде продукт.
В этом случае, без обид, 'ручёнки кривые'.

Ручонки то мож и кривые, не спорю. Но софт ещё кривее. Непонятно почему глюки качуют из версии в версию той же авр-студии. Ну а про систему команд вобще молчу! Не, ну на СИ то конечно нет разницы, что там и как присходит, а вот в Тини-15 нет ОЗУ и ИАР с ним просто не работает. И вот на асме уже вторую неделю мучаюсь! То регистр не тот (не старший), то команда не такая, то ещё чего не так! Сил нет уже никаких.
 А кстати когда с Мегой8535 работал на СИ, всё четко было и в авр-студии и в Протеусе и LCD всё отображал корректно (кроме русского шрифта конечно) и меню работало. Видимо писаки софта не заинтересованы в корректной поддержке старых моделей. А зачем? Надо же вперёд! К светлому будущему на АРМ-ах! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)