Radiohobby Forum

Интернет конференция журнала "Радиохобби"

Вы не вошли.

Объявление

Подписка на новые материалы от Николая Сухова - ролики, схемы, модели, онлайн конференции, консультации, чат.

Внимание! Почта в доменах Яндекс и Mail.ru не будет работать в профилях форумчан, из-за введённых правительством Украины санкций против этих компаний. Всем, кто ранее использовал подобную почту, для сохранения прежней функциональности форума, рекомендуется её поменять.

Огромная просьба, заливать тематические картинки и файлы в личные файловые каталоги на форуме, чтобы они не потерялись, со временем!

Ссылка "Загрузки" находится справа внизу формы набора сообщения.

Подписка на журнал "Радиохобби" прекращена. Подробности. Форум же - продолжает свою работу.

#131 23.09.2006 10:31:58

Dmitry
Забанен
Откуда: Запорожье
Здесь с 03.02.2004
Сообщений: 3,105
Сайт

Re: AVR для "чайников"

Liv пишет:

... это всего лишь запрос. В AVR эти флаги сбрасываются автоматически при осуществлении перехода на обработчик прерывания.

То есть, для каждогоиз прерываний есть СВОЙ СОБСТВЕННЫЙ вектор?

Liv пишет:

В AVR ..... существуют биты разрешения отдельных прерываний и еще бит глобального разрешения прерываний. Обработка прерывания может произойти только в том случае, если оба они установлены.

Ну сорри! Не написал, что в ПИК-е есть GIE (Global), PIE (Peripherial) (эт "колхозные" (в смысле общие)) и биты хххE(nable) для каждого из прерываний в отдельности.

Кроме того, функция приоритетов тоже может быть включена/выключена по желанию писателя.


Почему когда мы нарушаем, нас штрафуют, а когда всё делаем правильно, с нас берут налоги?....

Вне форума

#132 23.09.2006 10:46:44

Матроскин
Ветеран
Откуда: Краснодар
Здесь с 06.02.2006
Сообщений: 2,022

Re: AVR для "чайников"

2 Liv

Леонид Иванович, вы мое письмо получили??


......There is someone in my head, but it's not me.......

Вне форума

#133 23.09.2006 15:59:13

Liv
Ветеран
Откуда: Минск
Здесь с 08.02.2004
Сообщений: 1,233

Re: AVR для "чайников"

Dmitry пишет:

То есть, для каждого из прерываний есть СВОЙ СОБСТВЕННЫЙ вектор?

Да. Так и в AVR, и в MCS-51.

Матроскин пишет:

мое письмо получили?

Плучил исходник программы. А что с ним надо сделать?

Вне форума

#134 24.09.2006 06:10:15

Murka
Участник
Здесь с 22.07.2005
Сообщений: 28

Re: AVR для "чайников"

В AVR при получении прерывания снимается маска данного прерывания (дабы второй раз не пойти на это-же прерывание) и флаг глобального разрешения прерываний (это делается для того чтобы не переполнить стек там где его нет), но если у вас есть стек и вы уверены что до переполнения вам "не дожить" вы можете установить флаг глобального разрешения прерываний записью бита ( не используйте sei если передней небыло cli, обращайтесь именно к биту, и будет вам полноценный контроллер прерываний и счастье ИМХО.


Смешно!!!, с всемирной тупостью бороться!!!

Вне форума

#135 24.09.2006 11:27:22

Матроскин
Ветеран
Откуда: Краснодар
Здесь с 06.02.2006
Сообщений: 2,022

Re: AVR для "чайников"

Liv пишет:

Плучил исходник программы. А что с ним надо сделать?

Если Вам не трудно, его надо проверить. Особенно на предмет правильности описания прерывания по переполнению ТС0. Просто я написал, вроде все правильно (на мой взгляд), а оно не работает. Ваша программа со светодиодом (там же все аналогично) работает. Что-то там не то...


......There is someone in my head, but it's not me.......

Вне форума

#136 24.09.2006 12:29:51

Liv
Ветеран
Откуда: Минск
Здесь с 08.02.2004
Сообщений: 1,233

Re: AVR для "чайников"

Murka пишет:

В AVR при получении прерывания снимается маска данного прерывания (дабы второй раз не пойти на это-же прерывание)

Это неправильно. Когда происходит обработка прерывания, сбрасывается всего лишь флаг данного прерывания и бит I. А бит разрешения данного прерывания (его еще называют маской прерывания) остается установленным. По этой причине можно поиметь проблемы в виде многократных вызовов обработчика одного и того же прерывания при разрешении вложенных прерываний (например, в случае внешнего прерывания по уровню). Такие ситуации нужно разруливать вручную.

Murka пишет:

не используйте sei если передней небыло cli

Какие глупости. Команды SEI и CLI только то и делают, что устанавливают или сбрасывают бит I соответственно. Это ничем не отличается от установки или сброса бита I другими способами. Так и команда RETI представляет собой RET + SEI и больше не делает ничего особенного. Её можно использовать в любом месте программы для замены этих двух команд (но не нужно, так как это дурной стиль).

Вне форума

#137 25.09.2006 02:00:56

Murka
Участник
Здесь с 22.07.2005
Сообщений: 28

Re: AVR для "чайников"

всё выше сказанное вполне возможно и в то же время если всё предусмотреть (а я не могу сказать слежу ли я за этим тщательно или нет, просто такой стиль) то всё работает нормально, и даже создаётся впечатление нормального арбитража прерываний

RE> Так и команда RETI представляет собой RET + SEI и...
не просто дурной стиль а попытка переполнения стека прерываний!!!
Я понимаеш институтов не кончал и может чего не знаю но на собственной шкуре всё проверил


Смешно!!!, с всемирной тупостью бороться!!!

Вне форума

#138 25.09.2006 10:01:43

Liv
Ветеран
Откуда: Минск
Здесь с 08.02.2004
Сообщений: 1,233

Re: AVR для "чайников"

Murka пишет:

RE> Так и команда RETI представляет собой RET + SEI и...
не просто дурной стиль а попытка переполнения стека прерываний!!!

Что такое "стек прерываний"? Стек - он один, что для обработчиков прерываний, что для вызова подпрограмм. Там хранятся адреса возврата. Если Вы вызвали подпрограмму, то можете её завершить как командой RET, так и командой RETI. Во втором случае дополнительно будут разрешены прерывания, если они были до этого запрещены. Но если следовать хорошему стилю, то команду RETI нужно применять только для выхода из обработчиков прерывания.

Вне форума

#139 25.09.2006 18:40:47

Матроскин
Ветеран
Откуда: Краснодар
Здесь с 06.02.2006
Сообщений: 2,022

Re: AVR для "чайников"

2 Liv
Вы мне писали про то, как подавить дребезг кнопки:

1. Опрашивается состояние кнопки.
2. Если состояние не изменилось, то переход на 1.
3. Если состояние изменилось, запоминаем его.
4. Формируем задержку ~20 мс.
5. Опять опрашиваем кнопку.
6. Если состояние изменилось, запоминаем его и
возвращаемся на 1.
7. Если состояние не изменилось и состояние
соответствует нажатому, делаем действие (on/off) и
возвращаемся на 1.

В 6-м пункте "состояние изменилось" относительно чего? Того, что запомнили в пункте 3 ? Т.е. тут ситуация: опрашиваем, если изменилось сотояние, ждем 20 мс и смотрим, не изменилось ли оно снова. Если нет (юзер кнопку держит нажатой, и контакты замкнулись) то все ок, работаем дальше. Если да, то делаем вывод, что она дребезжит, и все повторяем до тех пор, пока она не не закончит дребезжать. Так?
А нельзя проще? Просто дать задержку 20 мс,  и выполнять дальнейшее действие. Не будет же она вечно дребезжать. У Вас в статье про РА-9000 (кажется) был график процессов, происходящих при срабатывание реле. Там дребезг контактов длился намного меньше, чем 20мс. Я думаю, для кнопок похожая ситуация...


......There is someone in my head, but it's not me.......

Вне форума

#140 26.09.2006 00:03:22

Liv
Ветеран
Откуда: Минск
Здесь с 08.02.2004
Сообщений: 1,233

Re: AVR для "чайников"

Всё верно. Окончанием дребезга можно считать неизменное состояние кнопки в течение 20 мс. Для разных типов кнопок время дребезга разное, экспериментально установлено, что 20 мс хватает всем. Можно установить меньше, 10 мс обычно тоже хватает.

Просто дать задержку нельзя, так как считанное состояние может быть вызвано дребезгом и отличаться от установившегося. Нужно убедиться, что состояние кнопки не меняется некоторое время, и только после этого можно производить действие.

Вне форума

Сейчас в этой теме пользователей: 0, гостей: 1
[Bot] ClaudeBot

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.058 сек, 8 запросов выполнено - Использовано памяти: 621.7 Кбайт (Пик: 672.07 Кбайт) ]