реклама на сайте
подробности

 
 
> stm32f4, Input Compare, Сгенерировать прерывание по определенному значению входного пульса
BlackOps
сообщение Sep 7 2012, 04:24
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 618
Регистрация: 7-06-08
Из: USSR
Пользователь №: 38 121



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

Но теперь мне нужно чтобы прерывание срабатывало только тогда когда скажем ширина пульса имеет определенное значение (или выше/ниже определенного значения).


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

мне кажется нужно использовать Мастер/Слейв режим, но не могу понять как это связать пока.

мне кажется сравнение с регистром CCR1 в основном в Output Compare режиме, но я не знаю работает ли это каким то образом в Input Compare?

Кто нибудь может подсказать или показать код если есть?


--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
BlackOps
сообщение Sep 10 2012, 08:43
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 618
Регистрация: 7-06-08
Из: USSR
Пользователь №: 38 121



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

дело в том что я не хочу отвлекать процессор кажтые 1.5мс на прерывание чтобы проверять ширину импульса. т.е. пусть это дело аппаратно работает, но только при вышеуказанном условии отвлечет процессор прерыванием.


понятно, тогда покопаюсь дальше, напишу. а так если есть еще какие идеи будет интерестно узнать.


--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 10 2012, 15:16
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(BlackOps @ Sep 10 2012, 11:43) *
тут такое дело: нет, период не важен. Он всегда будет одинаковый. Но ширина пульса разная может быть. Например пока ширина входного пульса меньше 1.5мс я не хочу чтобы срабатывало прерывание, но если вдруг ширина превысит скажем 1.5мс, мне нужно чтобы сработало прерывание.

дело в том что я не хочу отвлекать процессор кажтые 1.5мс на прерывание чтобы проверять ширину импульса. т.е. пусть это дело аппаратно работает, но только при вышеуказанном условии отвлечет процессор прерыванием.


понятно, тогда покопаюсь дальше, напишу. а так если есть еще какие идеи будет интерестно узнать.

Для тактовой 168МГц 1.5мс это аж 252000 тактов.
Если процедура обработки займет 100 тактов, то проц будет нагружен на 0.04%.
Можно не заморачиваться и сделать обработку в прерывании.
Хотя есть одна уязвимость. Если на вход подать меандр с частотой мегагерц 10, то скорее всего все умрет.
Я бы сделал так:
1. У Вас уже есть механизим получения длительности и периода импульса аппаратно на таймере (правда, прерывания по первому и второму каналу нужно отключить).
2. Добавляете еще один (третий) канал сравнения на 1.5мс (и включаете ему прерывания).
3. При возникновении события по третьему каналу входим в прерывание и анализируем флаги в статусном регистре. Если флаг второго канала установлен, то спад от импульса пришел ранее 1.5мс и это короткий имульс - отбрасываем. Если флаг второго канала НЕ установлен, то спада импульса еще не было, и получается импульс шире 1.5мс - интересующий нас случай.
4. Можно показать, что сигналы короче 1.5мс (частота выше 666Гц) не будут вызывать прерывания. В самом хужшем случае прерывания будут каждые 1.5мс с указанной выше нагрузкой (порядка 0.04%).
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 2nd September 2025 - 00:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01399 секунд с 7
ELECTRONIX ©2004-2016