Golikov 0 31 августа, 2014 Опубликовано 31 августа, 2014 · Жалоба мне кажется у вас все таки проходит какая - то помеха. Может не нога дергается, а земля к примеру прыгает. Или что-то типа того. В общем думаю если оно стоит стоит и вдруг опа прерывание, то это скорее всего на ноге что-то было, нежели какой-то могучий глюк проца... Вообще не гуд. Лучше уж EXTI. В момент сброса таймера может появиться импульс от купюрника. Проверять нужно периодически -- еще один таймер. И опять же, это решение, не учитывающее форму импульса и его тайминги. Импульсная помеха легко может добавить сотню-другую денег на счет. из существенных только последний аргумент про форму и тайминги. Я бы конечно в таком щекотливом месте CPLD поставил бы, и импульсы уже отдавал в цифровом виде, чтобы быть уверенным что ничего внутри проца не прервало процесс. Хотя вроде как говорилось есть уже приемники с цифровым выходом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 10 31 августа, 2014 Опубликовано 31 августа, 2014 · Жалоба мне кажется у вас все таки проходит какая - то помеха. Может не нога дергается, а земля к примеру прыгает. Согласен более чем полностью. Землю осциллографа тоже ведь по разному подключить можно... Насколько я понимаю конструкцию, это (купюроприемник) некий блок, в котором находятся несколько двигателей, несколько излучающих диодов, видеодетекторов, могучий DSP для обработки, а на выходе импульсный сигнал по проводу на несколько десятков сантиметров в окружении другого электрооборудования. Как правило, провод не экранирован и возвратная земля проходит "черт знает где". А если есть GSM-модем внутри, то при обмене с базовой станцией он может наводить в этот контур приличную помеху. Сюжетов можно придумать много. Я советовал железно замкнуть PA0 на 3.3В и, убедившись, что прерываний не возникает, искать проблемы в схемотехнике. А резистор подтяжки линии с open drain где установлен? На стороне ключа или на стороне приемника? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 31 августа, 2014 Опубликовано 31 августа, 2014 · Жалоба Та функция вызывается непроизвольно не сразу после ее правильного вызова, т.е. проходит минут 5 и только после этого вызывается непроизвольно. Неужели флаг не успевает сброситься за 5 минут? ) Не, тогда я согласен с предыдущими ораторами, это стопудово помеха. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plexus 0 1 сентября, 2014 Опубликовано 1 сентября, 2014 · Жалоба А резистор подтяжки линии с open drain где установлен? На стороне ключа или на стороне приемника? Резистор со стороны приемника. Тестирую, как вы и сказали - без купюроприемника, с подтяжкой на выводе PA0 для исключения помех/дребезга со стороны купюроприемника. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 1 сентября, 2014 Опубликовано 1 сентября, 2014 · Жалоба 1. Есть еще образец платы, вдруг именно на этой какой не пропай в резюке, к примеру. Или у него тепловой шум такой... 2. Проверьте и напишите значения регистров конфигурации, не то что вы функциями делаете, а прям реальное значение этих регистров 3. Уберите все переключения в программе после окончания конфигурации, вы спокойно можете какими-то функциями горе библиотеки от СТМ чего то еще подключать по ходу дела, то есть вызываете для включения 6 таймера, а ставиться может любой бит 4. if (EXTI_GetITStatus(EXTI_Line0) != RESET) - вот это замените пожалуйста на temp_reg = Значение регистра флагов. if((temp_reg & НУЖНЫЙ_ПИН) != 0) Потому что внешние прерывание принимает прерывание от 18 источников, 16 из них ноги, а 2 источника это будильник и PVD (че такое кстати ?). Ваша проверка смотрит только на то что было внешние прерывание, но она не смотрит на то какой пин или что его вызывало. Да и вообще полезно для отладки попечатать состояние флагов, мало ли что там как... Кроме прерываний есть же еще и еванты В общем общие рекомендации при поиски магии, устраните все ее источники в виде дурных библиотек. Работайте напрямую с регистрами проца. Это часто более быстро, и всегда более безопасно и определено! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 1 сентября, 2014 Опубликовано 1 сентября, 2014 (изменено) · Жалоба 4. if (EXTI_GetITStatus(EXTI_Line0) != RESET) - вот это замените пожалуйста на temp_reg = Значение регистра флагов. Потому что внешние прерывание принимает прерывание от 18 источников, 16 из них ноги, а 2 источника это будильник и PVD (че такое кстати ?). Ваша проверка смотрит только на то что было внешние прерывание, но она не смотрит на то какой пин или что его вызывало. Вот эту тему тоже высказать хотел. Присоединяюсь и настоятельно рекомендую разобраться со всеми ногами, которые обрабатываются _Line0. Это же вроде все типа PA0, PB0, и т.д.? Достаточно какой-то ноге из этой гвардии быть высокоомным входом (что именно и имеет место быть при рестарте процессора), как помехи гарантированы. Посему, влетая в прерывание, читайте еще состояние именно той ножки порта, которая прерывание вызвать должна была. P.S. не могу удержаться: заголовок темы уж очень медицинские термины напоминает, особенно слово "непроизвольное" и "прерывание". Фантазия пустилась в пляс... Изменено 1 сентября, 2014 пользователем KnightIgor Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 1 сентября, 2014 Опубликовано 1 сентября, 2014 · Жалоба 4. if (EXTI_GetITStatus(EXTI_Line0) != RESET) - вот это замените пожалуйста на temp_reg = Значение регистра флагов. if((temp_reg & НУЖНЫЙ_ПИН) != 0) Потому что внешние прерывание принимает прерывание от 18 источников, 16 из них ноги, а 2 источника это будильник и PVD (че такое кстати ?). Ваша проверка смотрит только на то что было внешние прерывание, но она не смотрит на то какой пин или что его вызывало. Вообще-то смотрит, видите параметр EXTI_Line0 - это как раз оно. Присоединяюсь и настоятельно рекомендую разобраться со всеми ногами, которые обрабатываются _Line0. Это же вроде все типа PA0, PB0, и т.д.? Нет. Там в конфигурации задаётся порт для данной ножки. (GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0)) ЗЫ. Эх вы, библиотекофобы:) Я тоже не пользую SPL, но хоть примерно знаю, как она работает. (Врага надо знать в лицо! :)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 10 1 сентября, 2014 Опубликовано 1 сентября, 2014 · Жалоба Таймеры в STM32 очень функциональные. Я бы сделал на таймере: - по спаду запускаю счет; - по фронту делаю захват таймера (длительность отрицательного импульса) в CCR1; - по совпадению с CCR2 (50 мс + например, 5 мс) вызываю прерывание, где анализирую содержимое CCR1. Если в диапазоне, то прибавляю единичку в счетчике импульсов. Иначе игнорирую. - останавливаю таймер. Итого: одно прерывание на импульс, а в регистре длительность этого импульса. Пачка коротких импульсов не вешает систему, т.к. таймер будет пересбрасываться и в окончании пачки сгенерит одно прерывание с некорректной длиной импульса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 1 сентября, 2014 Опубликовано 1 сентября, 2014 · Жалоба мне лень было лезть и смотреть именно эти функции. А по старым моим исканиям, пока не посмотришь что точно функция внутри делает, утверждать что она работает как видится нельзя :). Но в целом я не настаиваю, это же не у меня левые прерывания выпрыгивают) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plexus 0 1 сентября, 2014 Опубликовано 1 сентября, 2014 · Жалоба P.S. не могу удержаться: заголовок темы уж очень медицинские термины напоминает, особенно слово "непроизвольное" и "прерывание". Фантазия пустилась в пляс... Если честно, я подумывал об этом же, когда писал. Но, спасибо что заметили, поржал на работе в голос... Хорошо, рядом никого не было (: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 1 сентября, 2014 Опубликовано 1 сентября, 2014 · Жалоба Нет. Там в конфигурации задаётся порт для данной ножки. (GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0)) Да, да, это я перепутал. Нельзя одновременно использовать в качестве входов для внешних прерываний ножки разных портов того же номера. То есть, PA0 и PB0 не получится использовать одновременно, что накладывает существенные ограничения схемотехнику: если надо несколько внешних прерываний, надо раскидывать их на разные индексы. И снова автору топика: как говорил один наш доцент, вся дрянь от - источников питания. Где-то шумит масса, видать. Может повесить кондерчик с ноги на массу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 1 сентября, 2014 Опубликовано 1 сентября, 2014 · Жалоба мне лень было лезть и смотреть именно эти функции. Если вам лень, то зачем отвечать? Вы же вроде помочь хотите, а получается, что запутываете человека. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 1 сентября, 2014 Опубликовано 1 сентября, 2014 · Жалоба Да я вроде предложил ему привести что получилось в регистрах после всего сделанного. Даже если оставить функции в покое вроде бы проверить это имеет смысл. Функции функциями, а состояние регистров определяет работу схемы. Если человек посмотрит в регистрах будет не то что он хотел то значит виноваты функции и их надо изучить Если человек посмотрит и в регистрах все будет как надо, а прерывание будет, значит виновато железо. Какой смысл сразу ковырять код, если не понятно где искать? Думаю хорошим тестом будет как он поймает прерывание которое не видит осциллограф, а он как то умеет это детектировать. Списать состояние всех регистров в этот момент. Состояние флагов, потому я предлагал ему их сохранить, а также все настроечные регистры. Также при входе в прерывание состояние ножки оценивать и сохранять тоже будет не лишним. И мне до сих пор кажется что я помогаю... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 1 сентября, 2014 Опубликовано 1 сентября, 2014 · Жалоба Да я вроде предложил ему привести что получилось в регистрах после всего сделанного. Даже если оставить функции в покое вроде бы проверить это имеет смысл. Функции функциями, а состояние регистров определяет работу схемы. Вы всерьёз думаете, что ошибка в библиотечных функциях? Причём в функциях конфигурирования, которыми пользуется огромное количество народа? И мне до сих пор кажется что я помогаю... Почитайте тред сначала, посчитайте, сколько пурги вы нагнали и окститесь. Даже если среди ваших предложений и есть здравое зерно, то отыскать его практически невозможно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plexus 0 1 сентября, 2014 Опубликовано 1 сентября, 2014 · Жалоба Господа, да вы что в самом то деле? Для меня любая помощь в радость. На то и нужен мозговой - кто в какой области силен - железо, прошивка. Пока сделал костыль - таймером опрашиваю ножку каждые 10 мс. Но выяснить нужно где непорядок. Сегодня начал смотреть регистры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться