работа прерываний
- Войдите на сайт для отправки комментариев
Сб, 23/01/2021 - 11:58
Если установить прерывания от низкого уровня к высокому и подать постоянное напряжение на порт прерывания, сколько прерываний будет выдавать ардуина?
то есть, я различаю прерывания на слух, от звукового излучателя, но ардуина выдаёт это как одно прерывание, такое может быть, если уровень напряжения на порту остаётся выше уровня включения?
Одно в момент подачи напряжения.
Если установить прерывания от низкого уровня к высокому и подать постоянное напряжение на порт прерывания, сколько прерываний будет выдавать ардуина?
Хороший вопрос. Сами-то как думаете?
Если установить прерывания от низкого уровня к высокому и подать постоянное напряжение на порт прерывания, сколько прерываний будет выдавать ардуина?
Хороший вопрос. Сами-то как думаете?
Проверил, +3,3V на int0, молчит. Да плохо. А можно ли сказать ардуине чтобы она считала это прерывания с максимально возможной частотой?
Откройте даташит на МК, в разделе прерывания таблица условий срабатывания прерываний. В ваших условиях самый простой путь запустить таймер 1 или 2 на максимальную скорость и его выход соединить с ногой прерывания.
то есть, таймер включал поддяжку порта прерывания к нулю, тем самым вызывал срабатывания прерывания?
нет. Прерывание должно только запускать генератор с нужной частотой. А прерывание все равно будет одно.
Вообще, совет такой же как в соседней ветке - отложить пока ардуину в сторону и проштудировать учебник.
то есть, таймер включал поддяжку порта прерывания к нулю, тем самым вызывал срабатывания прерывания?
нет. Прерывание должно только запускать генератор с нужной частотой. А прерывание все равно будет одно.
То есть устанавливает прерывание в CHANGE, по первому вызову запускаем таймер и считаем, по второму вызову останавливаем таймер. А CHANGE по какому уровню работает? Или лучше переустанавливать с RISING на FALLING ?
Бессмыслица какая-то. В чем суть этого жонглирования?
Зачем? Сущность механизма прерывания вообще осознаёте?
Прерывание для этого не предназначено.
Если Вам кажется, что это нужно, значит, Вы что-то неверно спроектировали.
Вы сформулируйте, что именно Вы хотите сделать (а именно саму задачу, не прибегая к термину "прерывание" и подобным оборотам, характеризующим реализацию), возможно, Вам и посоветуют, как лучше быть в данном конкретном случае.
нужен беспрерывный вызов обработчика прерывания, пока уровень сигнала на пине прерывания высокий.
нужен беспрерывный вызов обработчика прерывания, пока уровень сигнала на пине прерывания высокий.
вы совсем тупой? вас спрашивают, ЗАЧЕМ это нужно
Задачу формулируйте. "Нужен беспрерывный вызов обработчика прерывания" - это не задача. Задача - это например " при уровне HIGH на входе Х формировать на выходе У сигнал частотой 1 МГц"
нужен беспрерывный вызов обработчика прерывания, пока уровень сигнала на пине прерывания высокий.
вы совсем тупой? вас спрашивают, ЗАЧЕМ это нужно
оу оу, полегче. не надо меня шатать как сосуд с водой ;)
разве я тупой? :) я повторяю одно и тоже в разных интерпретациях, но до некоторых не доходит. Поначалу мне хотелось, чтобы обработчик прерывания вызывался постоянно после прерывания пока на пине прерывания высокий уровень сигнала, но ардуине уно этого нет, поэтому мне было предложено крутить таймер пока на пине уровень напряжения не изменился, что я пытаюсь реализовать).
что я пытаюсь реализовать).
конечная цель этого - тайна?
я повторяю одно и тоже в разных интерпретациях, но до некоторых не доходит.
От того, что в наборе слов вы начинаете переставлять их местами, смысл во фразах не может появиться по определению.
Обработчик прерывания не должен вызываться постоянно во избежание вставания всего остального раком.
Примите это за аксиому.
что я пытаюсь реализовать).
конечная цель этого - тайна?
Нет. Занимаюсь регистрацией импульсов от космических мюонов :). Когда прилетает два близких импульса, то прерывание выглядит как длинный сигнал, хотелось бы различать длительность сигналов.
тогда вам не нужно генерить кучу прерываний во время входного сигнала. вместо этого нужно просто измерять его (сигнала) длительность.
Нет. Занимаюсь регистрацией импульсов от космических мюонов :). Когда прилетает два близких импульса, то прерывание выглядит как длинный сигнал, хотелось бы различать длительность сигналов.
Не, ардуинка не прокатит. Смотрите в сторону stm32, а лучше малинки.
Нет. Занимаюсь регистрацией импульсов от космических мюонов :). Когда прилетает два близких импульса, то прерывание выглядит как длинный сигнал, хотелось бы различать длительность сигналов.
тогда вам не нужно генерить кучу прерываний во время входного сигнала. вместо этого нужно просто измерять его (сигнала) длительность.
А чем, кстати, считываете - ФЭУ? Так у него есть время выхода на режим и чаще него опрашивать не имеет смысла.
А чем, кстати, считываете - ФЭУ? Так у него есть время выхода на режим и чаще него опрашивать не имеет смысла.
Пока считаю на СГМ, а дальше как пойдёт. По звуку пьезоизлучателя я различаю импульсы и протяжённость, теперь пытаюсь ардуинку научить делать тоже самое.
СГМ и мюоны. Какая-то херня.
Пьезоизлучатель (это для чего?). Какие импульсы?
Короче - пишите параметры "импульсов", а там может и прерывания не понадобятся.
А чем, кстати, считываете - ФЭУ? Так у него есть время выхода на режим и чаще него опрашивать не имеет смысла.
"На вход устройства приходят сформированные импульсы с напряжением лог. "1", длительность импульса от t1 до t2 (приставка)секунд, интервалы между импульсами от T1 до T2 (приставка)секунд.
Мне нужно определить/зафиксировать такие-сякие-пятые параметры с точностью не хуже (чего-то) и передать их куда-то для дальнейшей обработки.
Я написал такую вот программу (вставлено по правилам форума), она компилируется и запускается, но при работе устройства выдает эдакие неверные результаты. Попытки замены пятого на десятое проблему не решили.
Прошу прогрессивную общественность... " ит.д.
Как-то так...
"На вход устройства приходят сформированные импульсы с напряжением ...
Как-то так...
Восхищен, сэр!
Всё давно придумано. Действительно в данном случае лучше всего использовать плату блюпил с stm32f103t8. Она тоже програмируется в ардуино ИДЕ. Делается это так. На вход ставиться прерывание. По восходящему фронту запускается таймер. По нисходяшему фронту прерывание таймер останавливает, считывается и записывается в память, обнуляется, ждет следующего импульса. Если таймер тактовать 36 МГц то можно различать минимальный импульс около 30 нс. Максимальный окло 500 мс. Диапазоны можно двигать изменяя такт таймера. Объем буфера около 9 кБ. Можно сделать два по 4 и пока набирается один второй передавать для обработки.
Непонятно, а нужно ли это. Параметры сигналов неизвестны.
Это тебе не известны, а мне известны. Я тоже с подобной аппаратурой работаю.
разве я тупой? :)
Судя по Вашим сообщениям - да.
А никаких других источноков информации о Вас у нас нет (.
я повторяю одно и тоже в разных интерпретациях, но до некоторых не доходит. Поначалу мне хотелось, чтобы обработчик прерывания вызывался постоянно после прерывания пока на пине прерывания высокий уровень сигнала, но ардуине уно этого нет, поэтому мне было предложено крутить таймер пока на пине уровень напряжения не изменился, что я пытаюсь реализовать).
А повторять не нужно. Нужно сделать то, что Вам посоветовали: сформулировать задачу без использования слова "прерывание". Неужели надо быть семи пядей во лбу, чтобы последовать такому простому совету?
Ну тогда я вижу только 2 варианта:
1. Вам и ТС (т.е. тем, кому известны конкретные цифры) перенести обсуждение в личную почту.
2. Опубликовать характерные величины, чтобы все присутствующие могли принять участие в обсуждении.
Иначе это тема не для форума.
в моём случае длительность единичного импульса около 50 мкс, иногда они сливаются, хотелось бы разделить.
в моём случае длительность единичного импульса около 50 мкс, иногда они сливаются, хотелось бы разделить.
по какому признаку хотелось бы разделить?
в моём случае длительность единичного импульса около 50 мкс, иногда они сливаются, хотелось бы разделить.
Чего разделить? 50 мкс? или больше? Типа до 50 мкс - тру, а до 70мкс - не тру. Как - пишите алгоритм. Или Вас только стёбу в интернете учили?
по какому признаку хотелось бы разделить?
пока только по временному.
в моём случае длительность единичного импульса около 50 мкс, иногда они сливаются, хотелось бы разделить.
тогда можно и на Авр. Алгоритм тот же, что изложил nik182
да, я понял алгоритм, в процессе..
в моём случае длительность единичного импульса около 50 мкс, иногда они сливаются, хотелось бы разделить.
А что значит "сливаются"?
То есть на вход вместо двух сигналов приходит один длинный? Ну так тогда самый прямой путь - перестраивать входные цепи, а не пытаться заштопать дефекты аппаратного решения при помощи программных заплаток.
в моём случае длительность единичного импульса около 50 мкс, иногда они сливаются, хотелось бы разделить.
А что значит "сливаются"?
То есть на вход вместо двух сигналов приходит один длинный? Ну так тогда самый прямой путь - перестраивать входные цепи, а не пытаться заштопать дефекты аппаратного решения при помощи программных заплаток.
Вот как сейчас помню - как мой научный руководитель после таких экпериментов начинал рассуждать про "двугорбого верблюда!
Оси - это о чём?
Ты физик - или где?
Оси - это о чём?
[ это не мой рисунок, самому лень было рисовать
Иди плитку клади, если лень. Тебе не только лень было рисовать, а даже экспиримент провести. Так нахера ты нужен как физик?
Оси - это о чём?
Ошибаешься.
Непонятно, какой масштаб.
Ну а если лень - не стоило и тему создавать. Размещать на этом форуме "рисунки из Интернета" - mauvais ton.
Почему-то у меня не всегда вызывается прерывание нисходящего фронта, из-за чего таймер не выключается. Может ли это быть из-за того что у меня в main'e() в основном цикле выводится (через printf()) число прерываний и отправка в uart блокирует прерывание по нисходящему фронту, а ардуина его потом сама сбрасывает/пропускает?
DDR2, может поможет:
https://radioparty.ru/prog-avr/program-c/548-ispolzovanie-tajmera-v-rezh...
У таймера STM32 есть режим ворота - считает импульсы только когда на входе таймера 1. По закрытию ворот можно взять прерывание и считать данные. И тогда прерывание по ноге вообще не понадобится.