Перейти к содержанию
    

GPIO interrupt: Rising & Falling Edge два в одном

3 hours ago, haker_fox said:

А какие временные параметры сигнала? Частота? Опишите задачу подробнее, если это не военная тайна. Может быть что-нибудь сможем вам порекомендовать.

тайны никакой, да и сигнал самый банальный - концевик на конвейере, по которому едут детали. Нужно считать детали и их длину при известной скорости. Времена - от 0.2 до 5 секунд. Можно делать на чем угодно. У меня вопрос был по прерываниям GPI, я их раньше использовал, но как-то даже в голову не приходило, что могут быть такие совмещенные прерывания, т.к. ни в доках, ни в примерах таких не встречалось

1 hour ago, jcxz said:

Достоверное значение сигнала? Его лучше всего защёлкнуть после успокоения (завершения дребезга). Т.е. - внутри ISR таймера.

А можно для надёжности вообще сделать подобно UART.RX: сделать три таких выдержки и в конце каждой защёлкивать значение и считать его валидным только когда все 3 совпадут.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 minutes ago, aaarrr said:

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

неспортивно. Зачем использовать поллинг хоть и через таймер и иметь ненулевую вероятность нарваться на стробоскопический эффект, когда есть готовый  механизм, которым только надо научится пользоваться. К тому же точность определения интервала времени с таймером и N последовательными одинаковыми значениями будет много хуже, чем при пользовании прерываний на ноге. В моем случае где-то на 0.2% :boast:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну, нутряные-то резисторы уже есть..


И "куда" сконфигурированы?
Режим 01 из табл. 77 стр. 115 UM не поможет что-то типа гистерезиса организовать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

47 minutes ago, Obam said:


И "куда" сконфигурированы?

по дефолту - pull-up  enabled

49 minutes ago, Obam said:

Режим 01 из табл. 77 стр. 115 UM не поможет что-то типа гистерезиса организовать?

чего-то у меня нет табл.77 на стр 115, есть Table 86. Pin Mode select register 0 (PINMODE0 - address 0x4002 C040)  на стр 110, если речь идет о том, чтобы отключать-включать pull-up/puldown резисторы в зависимости от изменения сигнала на ноге, я как-то не могу  сообразить что может быть в этом случае

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, evgen2 said:

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

Есть - это таймер в режиме захвата. Беда только в том, что на вход ему нужно подавать чистый сигнал, чего явно не наблюдается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, aaarrr said:

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

Зачем N значений?
Давайте подключим N  пинов!
Прерывания от каждого ведут общий счетчик.  По получению достаточного числа взводить окончательный флаг. 

А так есть известная бага связанная с медлительностью периферии портов по отношению к ядру у Сortex-ов 
Помогает __DSB();  на выходе из прерывания.   

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

28 минут назад, evgen2 сказал:

по дефолту - pull-up  enabled

И это единственная подтяжка у концевика, стоящего где-то далеко на конвейере? Можете засунуть паяльник тому схемотехнику по своему желанию. Тут никакие таймера уже не помогут. А если концевик еще и механический - будьте готовы менять его каждый месяц - контакты окислятся и он начнет сначала изредка не срабатывать, потом только изредка срабатывать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

36 minutes ago, Сергей Борщ said:

И это единственная подтяжка у концевика, стоящего где-то далеко на конвейере? Можете засунуть паяльник тому схемотехнику по своему желанию. Тут никакие таймера уже не помогут. А если концевик еще и механический - будьте готовы менять его каждый месяц - контакты окислятся и он начнет сначала изредка не срабатывать, потом только изредка срабатывать.

вообще-то вы спрашивали про то, куда отконфигурен нутряной резистор.  Про родной механический концевик я уже писал, что от него идет восхитительный дребезг. Тем менее, он, судя по всему, работает лет десять и для чего-то в этой "неонке" используется. От подключения к нему отказались, поставили свой оптический рядом. Так что все свое, длина провода - метра два.

Изменено пользователем evgen2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, evgen2 сказал:

вообще-то вы спрашивали

Не я. Но поскольку про внешнюю подтяжку упоминаний не было - я логично предположил, что ее нет. Потому что если бы она была (или выход датчика двухтакный/push-pull) - то внутрнняя подтяжка уже ни на что влиять не должна и обсуждать ее смысла нет.

1 час назад, evgen2 сказал:

От подключения к нему отказались, поставили свой оптический рядом.

Вот про это не было ни слова. Простите, было на первой странице, я пропустил. А родной концевик наверняка работает много лет потому, что проектировщики конвейера обеспечили протекание через него достаточного для надежной работы тока (на что внутренняя подтяжка микроконтроллера не способна).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

UM10360 rev4.1 Dec'16 старая "дока"?
режим "repeater" - подтяжка "в противофазу" фронту.

Но вообще, "жжжж не спроста", обнаружение фронтов асинхронное - там реально проскакивает что-то: трясти электронщика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 hours ago, evgen2 said:

как обычно, божится и клянется, что все хорошо

Нет, так не делается. Делается модель схемы и в каком-нибудь spice проверяется при разбросе компонентов и различных температурах. Можно помоделировать действие помех. А потом собрать релаьный прототип входа на ЛУТе и потестировать на ЭМС.

14 hours ago, evgen2 said:

примеров давления дребезга на прерываниях GPIO почему-то не гуглится, все больше  с тупым поллингом на андурине

Да зачем вам примеры. Вы сигнал нарисуйте с различными артефактами на бумажке в клеточку. Только рисуйте в масштабе. А потом подумайте, как это всё дело профильтровать. Я уже говорил, что филтрую окном, скажем по 16 выборок. На выходе фильтра будет сигнал будет зависеть от состояния 75% выборок. Т.е. если в окне у нас 12 единиц, то и на выходе фильтра будет единица.

 

9 hours ago, evgen2 said:

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

Пишут, пишут. Если внимательно прочитать как работает NVIC.

8 hours ago, evgen2 said:

неспортивно.

Гм. Детский сад.

8 hours ago, evgen2 said:

Зачем использовать поллинг хоть и через таймер и иметь ненулевую вероятность нарваться на стробоскопический эффект

Это уже не поллинг. Вообще-то таким образом работают аппаратные фильтры банального последовательного порта в любом микроконтроллере.

8 hours ago, evgen2 said:

К тому же точность определения интервала времени с таймером и N последовательными одинаковыми значениями будет много хуже, чем при пользовании прерываний на ноге. В моем случае где-то на 0.2%

Вы только не обижайтесь, но у меня создаётся ощущение, что вы фантазируете. Как вы получили 0.2%? Какая точность нужна для концевика с диапазоном времен 200 мс - 5000 мс?

@evgen2, выкладываете схему дискретного входа. Лучше в другую тему. Либо пусть ваш схемотехник регистрируется здесь, и выкладывает. Явно в схеме есть ошибки. Пока железо не будет работать 100% верно, никакие 0.2% вы не получите.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, haker_fox said:

Нет, так не делается. Делается модель схемы и в каком-нибудь spice проверяется при разбросе компонентов и различных температурах. Можно помоделировать действие помех. А потом собрать релаьный прототип входа на ЛУТе и потестировать на ЭМС.

все проще. Берется готовое

Quote

Пишут, пишут. Если внимательно прочитать как работает NVIC.

про ноги и про возможность сгенерировать одной ногой одно прерывание с двумя взаимноисключающими флагами - не пишут

 

Quote

Гм. Детский сад.
Это уже не поллинг.

таки детский сад. https://en.wikipedia.org/wiki/Polling_(computer_science)

Quote

Вообще-то таким образом работают аппаратные фильтры банального последовательного порта в любом микроконтроллере.

не подскажете, где эти фильтры описаны в даташитах lpx 17xx, 2xxx, или еще каких

Quote

Как вы получили 0.2%?

период вашего таймера умножьте на число требуемых выборок. Это будет оценка в идеальном случае без дребезга. Добавьте время дребезга.  При хорошем дребезге и/или помехах ваш фильтр вообще не сработает

Изменено пользователем evgen2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 minutes ago, evgen2 said:

все проще. Берется готовое

Что готовое? Набросайте эскиз, как подключен датчик к ножке МК. Не забудьте указать длину кабеля, наличие экранов, как выполняется преобразование уровней.

13 minutes ago, evgen2 said:

про ноги и про возможность сгенерировать одной ногой одно прерывание с двумя взаимноисключающими флагами - не пишут

Насколько я знаю, периферия может выставлять флаги, даже если прерывания не разрешены. Иначе бы поллинг флагов никогда не был бы возможен.

13 minutes ago, evgen2 said:

не подскажете, где эти фильтры описаны в даташитах lpx 17xx, 2xxx, или еще каких

User Manual на STM32F091

image.thumb.png.77a819c1e9711ce5334dddf8b27d013e.png

13 minutes ago, evgen2 said:

При хорошем дребезге и/или помехах ваш фильтр вообще не сработает

Я не отрицаю, что любой фильтр можно нагнуть ниже плинтуса) Проблема в том, что таких терминов, как "хороший дребезг" или "хорошая помеха нет". Я не специалист по ЭМС, но у меня за стеной лаборатория с оборудованием, на котором периодически что-то проверяется из свежих разработок. Когда-то я там проверял свой дискретный вход, о котором ранее упомянул. И это была ни одна проверка. Но там точно были: электростатический разряд, микросекундные и наносекундные помехи. Хотя бы на этот вид помех вы проверяли свой вход? Вы же сказали, что у вас конвейер, а это и искрящие двигатели/контакторы, помехи в сеть и т.п. Возьмите генератор импульсов, отладьте алгоритм на идеальном меандре для начала. Потом добавьте туда дребез, звон. Если у вас есть генератор произвольных сигналов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 часов назад, AlexandrY сказал:

А так есть известная бага связанная с медлительностью периферии портов по отношению к ядру у Сortex-ов...

А разве это баг? И прям только в Cortex-ах? Отнюдь.
Вполне естественный результат взаимодействия доменов с различными частотами и шинной инфраструктурой.

Цитата

Помогает __DSB();  на выходе из прерывания.

На самом деле сказки. Зависит от конкретного МК и реализации APB-интерфейса периферии - там может быть буфер записи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...