Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.85/114: Рейтинг темы: голосов - 114, средняя оценка - 4.85
Momstir
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 120
1

Изменение приоритетов прерываний в Atmega328p

02.01.2013, 14:46. Просмотров 20704. Ответов 55
Метки нет (Все метки)

Столкнулся с проблемой которая требует чтобы текущий обработчик прерывания отработал без прерывания своей работы более высокоприоритетным прерыванием.
Т.е. если в процессе обработки прерывания INT1, и частичного выполнения кода обработчика оного, внезапно произойдет прерывание INT0 (приоритет которого выше), то, насколько я знаю, обработчик INT1 будет прерван, запущен обработчик INT0, и только после выполнения кода оного, обработчик INT1 будет вызван для завершения вычислений.
Вызов cli() / sei() внутри текущего обработчика приводит к пропускам прерываний, а надо чтобы все прерывания обрабатывались без потерь после выполнения уже начатого. Иными словами нужен механизм, позволяющий задать нескольким (в моем случае 4) прерываниям либо равный приоритет, либо нечто, ставящее их в очередь в порядке появления.
Будьте добры, посоветуйте как решить данную задачу?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2013, 14:46
Ответы с готовыми решениями:

Изменение прерываний в AtMega48
Добрый день : Такой код в кратце ISR (INT0_vect) { z=0; PORTB = 0xFF;...

ATmega328P
Добрый день! Тщетно пытаюсь настроить UART в Proteus 7.0. #include <avr/io.h>...

Уровни приоритетов, как правильно расставить?
В проекте, на F205, у меня задействованы: TIM2,3,4 CAN2TX, CAN2RX USORT2,...

atmega328p и bootloader
Переделал boottooder, работающий с AvrProk, который был тут в уроках по avr под...

Atmega328p + WT11i
Добрый день! Работаю над проектом по созданию устройств, общающихся между собой...

55
Momstir
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 120
07.01.2013, 21:15 41
Спасибо, обработчики сократил до:
Код
ISR(INT1_vect)
{
PL_State=!PL_State;
if (PL_State)
{
PL_Timing_=PL_Timing;
PL_Timing=micros();
}
}
Пересчет параметров, зависимых от моментов возникновения событий - в главном цикле с частотой около 100 Гц (таймер кидает флаг, а флаг уже обрабатывается в гл. цикле).
0
stt
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
08.01.2013, 13:23 42
Цитата Сообщение от Momstir
... В случае с пропуском события период (и частота) будет отличаться примерно в 2 раза - это беда...
Нет. Пропустишь один импульс на оборот колеса- точность не будет отличаться в 2 раза))
Даже если предположить, что сигналы со всех колес приходят одновременно с фантастической частотой в 3 кГц, у МК будет почти 7000(!) тактов, чтобы обработать эти 4 события (до прихода следующей пачки). А с учетом того, что у передних и задних венцов разное количество зубьев... В общем, проблема ничтожна.
0
Momstir
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 120
08.01.2013, 18:10 43
Цитата Сообщение от STT
Цитата Сообщение от Momstir
... В случае с пропуском события период (и частота) будет отличаться примерно в 2 раза - это беда...
Пропустишь один импульс на оборот колеса- точность не будет отличаться в 2 раза))Пропуск одного зуба = вдвое больший период...
0
_moysi
0 / 0 / 0
Регистрация: 19.11.2010
Сообщений: 790
09.01.2013, 06:40 44
Я извиняюсь за наглость и назойливость и что вообще не в своё дело и чужую беседу лезу с поучениями, но автором задачи мой предыдущий высер замечен хотя бы?
Не требуя его читать и уж тем более не смея принудить к обдумыванию, просто интересуюсь: замечен или нет?

Что такое "микрос", никто не знает и знать не хочет. Погнали дальше, третья страница.
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
09.01.2013, 09:59 45
Пропуск одного зуба = вдвое больший период...
Никак не врублюсь , Вы каждый зуб считаете в системе или всё таки обороты колеса.
Конечно Вы можете все зубья считать, но решение принимать по полному обороту колеса. (Сумма всех отсчётов зубьев/Tобор.) Поэтому пропуск одного зуба , практически не скажется на качестве употребления пищи.
А датчики нельзя ли сместить относительно друг друга по дуге?
0
oordvork
0 / 0 / 0
Регистрация: 24.06.2012
Сообщений: 9
09.01.2013, 10:45 46
Цитата Сообщение от Momstir
Пропуск одного зуба = вдвое больший период...
Ну так поделите на 2.
Цитата Сообщение от YTYOUT
А датчики нельзя ли сместить относительно друг друга по дуге?
Можно.
Но через пару поворотов (или просто нескольких сот метров ... пары километров) у них есть возможность снова встать (на некоторое время) в одну линию. Колеса у автомобиля проходят отматывают несколько отличающиеся расстояния.
0
Momstir
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 120
10.01.2013, 13:53 47
Цитата Сообщение от _moysi
Я извиняюсь за наглость и назойливость и что вообще не в своё дело и чужую беседу лезу с поучениями, но автором задачи мой предыдущий высер замечен хотя бы?
Не требуя его читать и уж тем более не смея принудить к обдумыванию, просто интересуюсь: замечен или нет?

Что такое "микрос", никто не знает и знать не хочет. Погнали дальше, третья страница.
Замечен, микрос() возвращает время в мкс с точностью до 4мкс от начала включения МК (точнее после инициализации оного). Точности, реализуемой данной функцией достаточно для дичайших условий эксплуатации, в которых ездят 0.00001% машин.
0
Momstir
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 120
10.01.2013, 14:02 48
[QUOTE="YTYOUT"][QUOTE="Цитата:[/QUOTE]
Пропуск одного зуба = вдвое больший период...
Никак не врублюсь , Вы каждый зуб считаете в системе или всё таки обороты колеса.
Конечно Вы можете все зубья считать, но решение принимать по полному обороту колеса. (Сумма всех отсчётов зубьев/Tобор.) Поэтому пропуск одного зуба , практически не скажется на качестве употребления пищи.Длительность/период считается каждый зуб. Расчет скорости и ускорения - раз в 10мс (100Гц).
Определение параметров (скорость/ускорение) за один оборот уменьшит точность мгновенных данных в N раз (где N - кол-во зубьев репера). А это приведет к дичайшим лагам, что в рамках подобных систем абсолютно недопустимо.
0
Momstir
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 120
10.01.2013, 14:03 49
Цитата Сообщение от oordvork
Но через пару поворотов (или просто нескольких сот метров ... пары километров) у них есть возможность снова встать (на некоторое время) в одну линию. Колеса у автомобиля проходят отматывают несколько отличающиеся расстояния.
Ну наконец-то появляется понимание деталей задачи.
Если интересуют еще каких-то моменты - буду рад дать ответы на вопросы.
0
_moysi
0 / 0 / 0
Регистрация: 19.11.2010
Сообщений: 790
12.01.2013, 03:48 50
Ну а если тогда над уже замеченным высером подумать? Нет, я не принуждаю, но если?

Определение периода между событиями даже не через измерение интервала между, а как разность между связанными с ними дискретными четырёхмикросекундными временнЫми отметками (которая разность обещает никогда не превысить значение ХХХ) - это...
... это даже не "в лоб" подход, а "в лоб через жопу армейским способом".

Главное словом было "количество" в высере.

Цитированием сверх необходимого и достаточного засираешь "свою" же тему.
0
Momstir
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 120
12.01.2013, 19:30 51
Мисье, я слабо ориентируюсь в разного рода расстройствах ЖКТ.
Если можно - коротко и человеческим языком, без лютого "кулхацкирскава слэнга". Если такое вообще возможно... ;)
0
_moysi
0 / 0 / 0
Регистрация: 19.11.2010
Сообщений: 790
16.01.2013, 02:24 52
Продуктом расстройства ЖКТ является обсуждаемая программа. Точнее: подход к её написанию. Ещё точнее: к построению алгоритма.
Слабая ориентация в области усугубляет.

Четвёртая попытка:
Цитата Сообщение от _moysi
а). период в секундах = разница между моментами (с точностью до ХХХ), в которые события произошли.
б). период в секундах = 3600 / количество событий за час.
в). частота в герцах = 1 / количество событий за секунду.
Я даже не отказываюсь разьяснить смысл какого-нибудь конкретного слова из всего этого лютого "кулхацкирскава слэнга", но КАКОЕ слово непонятно? Или "коротко и человеческим языком" = "написать программу за её автора"? Писать программу за автора вообще не возможно.

Период между конкретно вот этим вот событием №(n) и следующим за ним событием №(n+1) интересует никого.
И уж тем более никого не интересует момент времени, в который произошло событие №(n). Особенно с точностью 4 мкс.

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

... поэтому делаем вывод "многобукв не аси я слабо ориентируюсь в разного рода расстройствах ЖКТ" и начинаем изучать модуль захвата. Которым потом продолжаем ту же самую дрочню на тему "измерение периода между конкретно вот этим вот событием №(n) и следующим за ним событием №(n+1)" с тем же самым кулхацканием механизма прерываний либо без такового, но уже в другой позе.
И микросхему покупаем более другую, да. В соответствии с прынципом "не тратьте силы - возьмите молоток побольше!".

Если это ардуина так мозги форматирует, то понятен смысл цель причина ругательств в её адрес. И не видно смысла в обсуждании.
0
инкер
0 / 0 / 0
Регистрация: 28.10.2010
Сообщений: 893
16.01.2013, 04:56 53
Momstir, вы загрузили контроллер работой как злая мачеха Золушку.
Нет никакой необходимости следить за каждым зубом и на всех четырех колесах одновременно, потому, что даже при решении этой задачи пришлось бы загрублять результат из-за высокой шумовой составляющей, а самое главное - исполнительный механизм не переварит такую частоту управляющих воздействий.

Сделайте проще - циклическое измерение периода группы зубьев на каждом колесе, вычисление и принятие решения по управлению, переход на начало.
0
Momstir
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 120
16.01.2013, 13:06 54
Загрубление на периоде из нескольких событий даст задержку по времени при реакции на изменения. Смысл конечного результата при этом нулевой (т.е. делать девайс тогда вообще не имеет смысла).
0
_moysi
0 / 0 / 0
Регистрация: 19.11.2010
Сообщений: 790
17.01.2013, 12:02 55
На предыдущей странице.

Я понимаю, что читать приятнее то, которое нравится, привычное и с которым согласен. Чем то, которое новое, непонятное и другое.
То есть что читателем сознательно и/или на уровне инстинктов выбирается: это читаем, а это пропускаем. Потому что всё подряд читать невыгодно.

Но задача-то как стояла, так и стоит раком на месте...
0
Momstir
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 120
17.01.2013, 13:34 56
Цитата Сообщение от _moysi
Но задача-то как стояла, так и стоит раком на месте...
Ну значит Вы знаете о ее состоянии больше меня. Это хорошо. :)
0
17.01.2013, 13:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2013, 13:34

Внешнее прерывание на ATmega328p
Такой вот не замысловатый текст. Но ни INT0 ни INT1 не срабатывает. В AVR...

Тактовый генератор и ATMEGA328P-PU
Здравствуйте! Есть микроконтроллер ATMEGA328P-PU и некоторые вопросы, а именно:...

Проблема с прерываниями на ATMega328P-PU
Код пишется в Atmel studyo. Плата Arduino UNO c ATMiko328P-PU. Заливаю hex файл...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
56
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru