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

 
 
5 страниц V  < 1 2 3 4 5 >  
Reply to this topicStart new topic
> STM32F100 Непроизвольное срабатывание прерывания
Golikov A.
сообщение Aug 31 2014, 17:04
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 4 186
Регистрация: 17-02-06
Пользователь №: 14 454



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



Цитата
Вообще не гуд. Лучше уж EXTI. В момент сброса таймера может появиться импульс от купюрника. Проверять нужно периодически -- еще один таймер.
И опять же, это решение, не учитывающее форму импульса и его тайминги. Импульсная помеха легко может добавить сотню-другую денег на счет.

из существенных только последний аргумент про форму и тайминги. Я бы конечно в таком щекотливом месте CPLD поставил бы, и импульсы уже отдавал в цифровом виде, чтобы быть уверенным что ничего внутри проца не прервало процесс. Хотя вроде как говорилось есть уже приемники с цифровым выходом.
Go to the top of the page
 
+Quote Post
adnega
сообщение Aug 31 2014, 20:11
Сообщение #32


Гуру
******

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



Цитата(Golikov A. @ Aug 31 2014, 21:04) *
мне кажется у вас все таки проходит какая - то помеха. Может не нога дергается, а земля к примеру прыгает.

Согласен более чем полностью. Землю осциллографа тоже ведь по разному подключить можно...
Насколько я понимаю конструкцию, это (купюроприемник) некий блок, в котором находятся несколько двигателей, несколько излучающих диодов, видеодетекторов, могучий DSP для обработки, а на выходе импульсный сигнал по проводу на несколько десятков сантиметров в окружении другого электрооборудования. Как правило, провод не экранирован и возвратная земля проходит "черт знает где". А если есть GSM-модем внутри, то при обмене
с базовой станцией он может наводить в этот контур приличную помеху. Сюжетов можно придумать много. Я советовал железно замкнуть PA0 на 3.3В и, убедившись, что прерываний не возникает, искать проблемы в схемотехнике.

А резистор подтяжки линии с open drain где установлен? На стороне ключа или на стороне приемника?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 31 2014, 23:07
Сообщение #33


фанат дивана
******

Группа: Свой
Сообщений: 3 261
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Plexus @ Aug 31 2014, 21:07) *
Та функция вызывается непроизвольно не сразу после ее правильного вызова, т.е. проходит минут 5 и только после этого вызывается непроизвольно. Неужели флаг не успевает сброситься за 5 минут? )

Не, тогда я согласен с предыдущими ораторами, это стопудово помеха.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Plexus
сообщение Sep 1 2014, 02:47
Сообщение #34





Группа: Участник
Сообщений: 13
Регистрация: 21-01-09
Пользователь №: 43 710



Цитата(adnega @ Sep 1 2014, 03:11) *
А резистор подтяжки линии с open drain где установлен? На стороне ключа или на стороне приемника?

Резистор со стороны приемника.
Тестирую, как вы и сказали - без купюроприемника, с подтяжкой на выводе PA0 для исключения помех/дребезга со стороны купюроприемника.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 1 2014, 06:36
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 4 186
Регистрация: 17-02-06
Пользователь №: 14 454



1. Есть еще образец платы, вдруг именно на этой какой не пропай в резюке, к примеру. Или у него тепловой шум такой...

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

3. Уберите все переключения в программе после окончания конфигурации, вы спокойно можете какими-то функциями горе библиотеки от СТМ чего то еще подключать по ходу дела, то есть вызываете для включения 6 таймера, а ставиться может любой бит

4. if (EXTI_GetITStatus(EXTI_Line0) != RESET) - вот это замените пожалуйста на temp_reg = Значение регистра флагов.
if((temp_reg & НУЖНЫЙ_ПИН) != 0)
Потому что внешние прерывание принимает прерывание от 18 источников, 16 из них ноги, а 2 источника это будильник и PVD (че такое кстати ?). Ваша проверка смотрит только на то что было внешние прерывание, но она не смотрит на то какой пин или что его вызывало. Да и вообще полезно для отладки попечатать состояние флагов, мало ли что там как... Кроме прерываний есть же еще и еванты

В общем общие рекомендации при поиски магии, устраните все ее источники в виде дурных библиотек. Работайте напрямую с регистрами проца. Это часто более быстро, и всегда более безопасно и определено!
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Sep 1 2014, 07:14
Сообщение #36


Знающий
****

Группа: Участник
Сообщений: 623
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(Golikov A. @ Sep 1 2014, 08:36) *
4. if (EXTI_GetITStatus(EXTI_Line0) != RESET) - вот это замените пожалуйста на temp_reg = Значение регистра флагов.
Потому что внешние прерывание принимает прерывание от 18 источников, 16 из них ноги, а 2 источника это будильник и PVD (че такое кстати ?). Ваша проверка смотрит только на то что было внешние прерывание, но она не смотрит на то какой пин или что его вызывало.

Вот эту тему тоже высказать хотел. Присоединяюсь и настоятельно рекомендую разобраться со всеми ногами, которые обрабатываются _Line0. Это же вроде все типа PA0, PB0, и т.д.? Достаточно какой-то ноге из этой гвардии быть высокоомным входом (что именно и имеет место быть при рестарте процессора), как помехи гарантированы. Посему, влетая в прерывание, читайте еще состояние именно той ножки порта, которая прерывание вызвать должна была.

P.S. не могу удержаться: заголовок темы уж очень медицинские термины напоминает, особенно слово "непроизвольное" и "прерывание". Фантазия пустилась в пляс...

Сообщение отредактировал KnightIgor - Sep 1 2014, 07:19
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 1 2014, 07:55
Сообщение #37


фанат дивана
******

Группа: Свой
Сообщений: 3 261
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Golikov A. @ Sep 1 2014, 12:36) *
4. if (EXTI_GetITStatus(EXTI_Line0) != RESET) - вот это замените пожалуйста на temp_reg = Значение регистра флагов.
if((temp_reg & НУЖНЫЙ_ПИН) != 0)
Потому что внешние прерывание принимает прерывание от 18 источников, 16 из них ноги, а 2 источника это будильник и PVD (че такое кстати ?). Ваша проверка смотрит только на то что было внешние прерывание, но она не смотрит на то какой пин или что его вызывало.

Вообще-то смотрит, видите параметр EXTI_Line0 - это как раз оно.

Цитата(KnightIgor @ Sep 1 2014, 13:14) *
Присоединяюсь и настоятельно рекомендую разобраться со всеми ногами, которые обрабатываются _Line0. Это же вроде все типа PA0, PB0, и т.д.?

Нет. Там в конфигурации задаётся порт для данной ножки. (GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0))

ЗЫ. Эх вы, библиотекофобыsm.gif Я тоже не пользую SPL, но хоть примерно знаю, как она работает. (Врага надо знать в лицо! sm.gif)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 1 2014, 08:14
Сообщение #38


Гуру
******

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



Таймеры в STM32 очень функциональные. Я бы сделал на таймере:
- по спаду запускаю счет;
- по фронту делаю захват таймера (длительность отрицательного импульса) в CCR1;
- по совпадению с CCR2 (50 мс + например, 5 мс) вызываю прерывание, где анализирую содержимое CCR1.
Если в диапазоне, то прибавляю единичку в счетчике импульсов. Иначе игнорирую.
- останавливаю таймер.

Итого: одно прерывание на импульс, а в регистре длительность этого импульса. Пачка коротких импульсов не вешает систему, т.к. таймер будет пересбрасываться и в окончании пачки сгенерит одно прерывание с некорректной длиной импульса.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 1 2014, 08:14
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 4 186
Регистрация: 17-02-06
Пользователь №: 14 454



мне лень было лезть и смотреть именно эти функции. А по старым моим исканиям, пока не посмотришь что точно функция внутри делает, утверждать что она работает как видится нельзя sm.gif. Но в целом я не настаиваю, это же не у меня левые прерывания выпрыгивают)
Go to the top of the page
 
+Quote Post
Plexus
сообщение Sep 1 2014, 08:59
Сообщение #40





Группа: Участник
Сообщений: 13
Регистрация: 21-01-09
Пользователь №: 43 710



Цитата(KnightIgor @ Sep 1 2014, 14:14) *
P.S. не могу удержаться: заголовок темы уж очень медицинские термины напоминает, особенно слово "непроизвольное" и "прерывание". Фантазия пустилась в пляс...

Если честно, я подумывал об этом же, когда писал. Но, спасибо что заметили, поржал на работе в голос... Хорошо, рядом никого не было (:
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Sep 1 2014, 10:34
Сообщение #41


Знающий
****

Группа: Участник
Сообщений: 623
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(AHTOXA @ Sep 1 2014, 09:55) *
Нет. Там в конфигурации задаётся порт для данной ножки. (GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0))

Да, да, это я перепутал. Нельзя одновременно использовать в качестве входов для внешних прерываний ножки разных портов того же номера. То есть, PA0 и PB0 не получится использовать одновременно, что накладывает существенные ограничения схемотехнику: если надо несколько внешних прерываний, надо раскидывать их на разные индексы.
И снова автору топика: как говорил один наш доцент, вся дрянь от - источников питания. Где-то шумит масса, видать. Может повесить кондерчик с ноги на массу?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 1 2014, 11:22
Сообщение #42


фанат дивана
******

Группа: Свой
Сообщений: 3 261
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Golikov A. @ Sep 1 2014, 14:14) *
мне лень было лезть и смотреть именно эти функции.

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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 1 2014, 11:41
Сообщение #43


Гуру
******

Группа: Свой
Сообщений: 4 186
Регистрация: 17-02-06
Пользователь №: 14 454



Да я вроде предложил ему привести что получилось в регистрах после всего сделанного. Даже если оставить функции в покое вроде бы проверить это имеет смысл. Функции функциями, а состояние регистров определяет работу схемы.

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

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

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

И мне до сих пор кажется что я помогаю...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 1 2014, 12:29
Сообщение #44


фанат дивана
******

Группа: Свой
Сообщений: 3 261
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Golikov A. @ Sep 1 2014, 17:41) *
Да я вроде предложил ему привести что получилось в регистрах после всего сделанного. Даже если оставить функции в покое вроде бы проверить это имеет смысл. Функции функциями, а состояние регистров определяет работу схемы.

Вы всерьёз думаете, что ошибка в библиотечных функциях? Причём в функциях конфигурирования, которыми пользуется огромное количество народа?
Цитата(Golikov A. @ Sep 1 2014, 17:41) *
И мне до сих пор кажется что я помогаю...

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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Plexus
сообщение Sep 1 2014, 12:42
Сообщение #45





Группа: Участник
Сообщений: 13
Регистрация: 21-01-09
Пользователь №: 43 710



Господа, да вы что в самом то деле?
Для меня любая помощь в радость.
На то и нужен мозговой - кто в какой области силен - железо, прошивка.

Пока сделал костыль - таймером опрашиваю ножку каждые 10 мс. Но выяснить нужно где непорядок. Сегодня начал смотреть регистры.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 25th June 2017 - 02:03
Рейтинг@Mail.ru


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