Создание модуля для работы с прерываниями

действия с прерываниями в FLprog и сборка модуля

Ответить
kebaza
Рядовой
Сообщения: 5
Зарегистрирован: 05.10.2018{, 01:35}
Репутация: 0
Откуда: Воронеж
Имя: Алексей

Создание модуля для работы с прерываниями

#1

Сообщение kebaza » 07.10.2018{, 16:49}

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

Задача:
есть два входа прерывания (использую NANO) на которые приходят сигналы. модуль должен
выдавать значение времени между срабатыванием первого входа и второго.
Должен выдавать порядковый номер ПРАВИЛЬНОГО срабатывания, должен выводить ошибку при
нарушении условий срабатывания:слишком малый промежуток времени; слишком большой промежуток
времени; срабатывание только первого входа; срабатывание только второго входа.
Он должен иметь вход, на который можно подавать установку минимального времени, вход для
установки максимального времени,вход сброса выходов в ноль.
он должен иметь настраиваемый параметр mode для прерывания (LOW,CHANGE,RISING,FALLING)


Задача минимум - модуль должен выдавать значения времени в мкс между сработкой первого и
второго датчика. ну и возможность подправить mode и код в целом. остальное можно решить другими
элементами, но все же...это имеет низкий образовательный потенциал.


Посмотрите, пожалуйста, код и диаграмму. диаграмма - лишь эскиз и не имеет реального
временного масштаба, а код написан мною, слабо разбирающимся в нем человеке. по этому я не
осилю всюзадачу устройства целиком только кодом, только визуальное спасет. Покажите, пожалуйста, ошибки в коде. Я старался, что бы все было понятно, что бы Вы не гадали на гуще.
Описание диаграммы буду производить по отдельным участкам, которые помечены на первом
уровне:
1: сработали последовательно 1 и 2 датчики, на выходе значение изменилось с нуля на
вычесленное, выход N изменил число 0 на 1 выходы ошибок по нулям

2: то же самое, просто второй датчик сработал тогда, когда еще не отпустил первый,
припараметре CHANGE это не имеет значения.выход меняет значение на вновь вычесленное время,
выход счетчика N =2

3: сработали последовательно первый и второй датчики, но это произошло медленно, время
между срабатываниями не удовлетворяет условию(задается), вызывается ошибка ERR2, Выход Изображение
замера времени остается прежним, выдавая результат последнего успешного измерения, счетчик
N не прибавляет значение и тоже остается прежним.

4: Сработал только первый датчик. Это вызываетошибку ERR3 . выходы данных замеров времени и
подсчета успешных срабатываний остаются прежними. ошибки не должны сбивать значения
успешных сработок.

5: сработал второй датчик, а первый не сработал, вызывает ошибку ERR4, значение замера
времени и порядковый номер остаются прежними.

6: Датчики сработали непозволительно близко по времени (задается), вызывает ошибку ERR4,
выходы порядкового номера и успешного измерения времени остаются без изменений.

7: Датчики срабатывают удовлетворяя успешным условиям, выходы ошибок по нулям, значение
замера времени изменяется на вновь измеренное, выход N прибавляет единицу.
_____
при задействовании входа R выходы сбрасываются в ноль. этого нет на диаграмме. Надеюсь я

максимально подробно изложил задачу , прошу простить за многословие.
диагресайз.bmp
диаграмма
Новый текстовый документ.txt
(2.61 КБ) 62 скачивания

kebaza
Рядовой
Сообщения: 5
Зарегистрирован: 05.10.2018{, 01:35}
Репутация: 0
Откуда: Воронеж
Имя: Алексей

Создание модуля для работы с прерываниями

#2

Сообщение kebaza » 15.10.2018{, 15:25}

Вобсчем сделал вроде бы. Но на виртуальной сборке в тинкеркард хрень какая-то происходит. я уж и так и эдак, но у меня создалось впечатление , что на эмуляторе проблема с прерыванием на D2. он ни как на него не реагирует, при чем не только на моей писанине, но и на заведомо рабочих программах. Ну или хз. Другие эмуляторы пробовал, но то эмуляция кода бесплатно не запускается, то , как например Simulator for Arduino (Free), не совсем понятна работа программы. я так понимаю там задаешь состояние на входе или вручную меняешь некое значение и смотришь как программа его обрабатывает. там логика определения ошибок работает, а с остальным хз как проверить. вложу пример модуля ,там еще дополнительные выходы просто для отладки. Остается, наверное, только с железом реальным пробовать. но все же может кто шарящий проверит мою работу до этого.
Hron_FALLING1_(CODE).ubi
(51.4 КБ) 69 скачиваний
1.flp
(144.67 КБ) 72 скачивания

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Создание модуля для работы с прерываниями

#3

Сообщение Sancho » 16.10.2018{, 09:03}

kebaza, После проведения вычислений, регистрации результатов, необходимо обнулять переменные для функций, иначе выполнится всего один раз, при первых прерываниях...
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

kebaza
Рядовой
Сообщения: 5
Зарегистрирован: 05.10.2018{, 01:35}
Репутация: 0
Откуда: Воронеж
Имя: Алексей

Создание модуля для работы с прерываниями

#4

Сообщение kebaza » 24.11.2018{, 22:11}

Sancho, спасибо! хотелось бы обсудить почему происходит именно так - обнуленные показания перезаписываются, а со значениями нет, но это, вероятно, за пределами темы) да, в этом был главный косяк. далее тинкеркад эмулятор заработал нормально, уж не знаю в чем до этого проблема была...но, в итоге, благодаря симулятору допилил алгоритм. Обнаружились там интересные особенности) в обсчем я счастлив) выложу то что получилось в итоге. понятное дело, что это не конечный вариант, но основа готова. еще спрошу - если программа "тяжелая", есть ли смысл разгрузить ардуину , которая получает данные с такого модуля и отправляет их на другой контроллер для дальнейшей обработки , вывод на дисплей, запись в память и тд и тп? или же, если все влезает , то прерывания полностью исключат сбои в считывании и записи данных и такой огород абсурден? прошу прошения за оффтоп.
Tm12.flp
(148.42 КБ) 52 скачивания

Ответить

Вернуться в «Помогите, а то я "нимагу"»