![]() |
Модераторы: PILOT, ManiaK, Mazzi |
![]() ![]() ![]() |
|
interesuuwiysia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.2.2006 Репутация: нет Всего: нет |
Доброго времени суток!
Работаю с Тини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 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 28.4.2007 Где: СПб Репутация: 1 Всего: 1 |
И неудивительно, что получаете такой результат! ‘Pin Change Interrupt’ - прерывание по изменению состояния пина. Вот и получается, что прерывание будет и по положительному фронту, и по отрицательному.
|
|||
|
||||
interesuuwiysia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.2.2006 Репутация: нет Всего: нет |
Да, но в мануале в разделе прерываний вперемешку описаны прерывания Pin Change и INT0. И не совсем понятно, для кого из них можно устанавливать различные варианты срабатывания. Таблица с устновкой в регистре MCUCR битов ISC01 и ISC00 (которые и определяют событие для возникновения прерывания) дана без каких-либо дополнительных разъяснений. Таким образом получается, что только INT0 может работать с каждым фронтом поотдельности?
|
|||
|
||||
Коляй |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 14.6.2006 Репутация: нет Всего: нет |
В этих Тинях с прерываниями вобще непонятки полные. У меня как только флаг поднимется, так постоянно и висит. Программа прыгает в прерывание TIMER1_COMP как только вернётся из него. Уже и АVR-студию поменял с 4 на 3,21 и всё равно. И порт делал на вход и на выход, и nop -ы лишние вставлял. Проц Тини-15L. А ещё в студии работало всё четко, а в протеусах (6 и 7) ни в какую. Уже думаю на ПИК перейти, там надеюсь нет таких глюков!
|
|||
|
||||
interesuuwiysia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.2.2006 Репутация: нет Всего: нет |
Ну я понимаю когда один контроллер некорректно работает... но когда уже второй кряду.... Атмел - серьезный вроде продукт.
|
|||
|
||||
Willy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 4.1.2007 Репутация: нет Всего: нет |
Заведи входной сигнал на ногу РВ0,
включи прерывание INT0, а по изменению запрети(GIMSK = 0x40) по фронту на INT0 (MCUCR |= 0x03) и будет тебе счастье ![]() |
|||
|
||||
interesuuwiysia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.2.2006 Репутация: нет Всего: нет |
Я уже так и сделал! Спасибо
![]() |
|||
|
||||
AVR32 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 28.4.2007 Где: СПб Репутация: 1 Всего: 1 |
Добавлю, что в 'Pin Change Interrupt' разрулить ситуацию с фронтами можно анализируя текущее состояние портов. А вообще, да, как уже было замечено, выбор фронта только по int0.
В корне несогласен с этим утверждением: Ну я понимаю когда один контроллер некорректно работает... но когда уже второй кряду.... Атмел - серьезный вроде продукт. В этом случае, без обид, 'ручёнки кривые'. |
|||
|
||||
Коляй |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 14.6.2006 Репутация: нет Всего: нет |
Ручонки то мож и кривые, не спорю. Но софт ещё кривее. Непонятно почему глюки качуют из версии в версию той же авр-студии. Ну а про систему команд вобще молчу! Не, ну на СИ то конечно нет разницы, что там и как присходит, а вот в Тини-15 нет ОЗУ и ИАР с ним просто не работает. И вот на асме уже вторую неделю мучаюсь! То регистр не тот (не старший), то команда не такая, то ещё чего не так! Сил нет уже никаких. А кстати когда с Мегой8535 работал на СИ, всё четко было и в авр-студии и в Протеусе и LCD всё отображал корректно (кроме русского шрифта конечно) и меню работало. Видимо писаки софта не заинтересованы в корректной поддержке старых моделей. А зачем? Надо же вперёд! К светлому будущему на АРМ-ах! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |