Как запустить два действия параллельно.

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

Как запустить два действия параллельно.

Сообщение sp45 (Денис) » 27 окт 2016, 21:43

Всем привет. Подскажите как запустить несколько разных действий одновременно (параллельно).
например; от кнопки A0 запускается
A1- вкл. LED1 и ......... после сигнала с A3 выкл.
A2 - вкл LED2 пару вспышек по 1сек. и выкл.

И еще как остановить задержку в любой момент. Когда LED1 потухнет на 10 сек. и снова вкл. То есть надо запустить LED1 в любой момент до окончания отсчета 10 сек. кнопкой A4.
Ник: sp45
Имя: Денис
(Лысково)
Новичок
Новичок
Информация о пользователе

Re: Как запустить два действия параллельно.

Сообщение mim (mim) » 28 окт 2016, 05:55

Для решения этой задачки нужно изучить следующие примеры:
- работа с кнопками (портами) - опрос в цикле и по прерыванию;
- работа с таймером (прерывания по таймеру, подсчет времени);
- внешнее прерывание (как один из вариантов работы с кнопками - портами);
Все примеры есть на форуме, а также идут в установочном пакете...

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

ЗЫ Советую сделать схему в Протеусе...
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе

Re: Как запустить два действия параллельно.

Сообщение andrewproffi (Андрей) » 28 окт 2016, 06:03

Для всего этого используются прерывания.
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

Re: Как запустить два действия параллельно.

Сообщение agent_serg (agent_serg) » 28 окт 2016, 07:07

sp45 писал(а):Всем привет. Подскажите как запустить несколько разных действий одновременно (параллельно).

Вы должны запомнить раз и навсегда: Ваша программа обрабатывается последовательно, поэтому Вы и не найдёте во Flowcode параллельных разветвлений программы.


sp45 писал(а):как остановить задержку в любой момент. Когда LED1 потухнет на 10 сек. и снова вкл. То есть надо запустить LED1 в любой момент до окончания отсчета 10 сек. кнопкой A4.

Для формирования временнЫх интервалов использовать прерывание по таймеру, а не delay.
Многим начинающим тема прерываний не понятна, но без этого нормальных программ не напишите.
Когда научитесь использовать прерывания, тогда сможете выполнять "параллельные" действия. Например, во время отсчёта задержки включения А4, Вы сможете управлять состоянием чего-то другого.

Суть прерывания по таймеру проста:
1. Включаете прерывание по таймеру и задаёте с помощью делителя период "тиков" таймера прерывания и указываете какой макрос будет выполнятся.
2. Далее, через каждый (заданный при настройке прерывания) промежуток времени процессор прекращает выполнение Вашей программы и переходит к выполнению макроса (подпрограммы), который Вы указали при настройке прерывания. В этом макросе Вы увеличиваете, например, переменную Т на единицу (Т=Т+1). Вот Вам и отсчёт времени. Используйте эту переменную, которая с каждым прерывание увеличивается на единицу, для отсчёта временнЫх промежутков. Примеров на форуме много.
3. Обработав макрос прерывания процессор продолжает выполнение Вашей программы с того места, на котором остановился перед прерыванием. В промежутках между прерываниями по таймеру Ваша программа успевает "прокрутиться" много раз.
4. далее всё повторяется.

Особенность в том, что периодичность прерывания по таймеру стабильна по времени и не зависит от сложности Вашей программы.
Делай не как хочется, а как надо и тогда всё будет как хочется...
-------------------------------------------------------------------------------------------------------
FC AVR v5.5.2.1 / Proteus v7.8 SP2 / Программаторы: Triton+ и USBasp / Win7 SP1 x64
Аватар пользователя
Ник: agent_serg
Имя: agent_serg
(White City)
Ученик
Ученик
Информация о пользователе
Вернуться наверх

Re: Как запустить два действия параллельно.

Сообщение kindofsky (kindofsky) » 28 окт 2016, 07:21

Человек ещё не понимает как кнопки организовать со светодиодами, а вы уже его в прерывания суёте...
agent_serg писал(а):Для формирования временнЫх интервалов использовать прерывание по таймеру, а не delay.

Очень спорное утверждение.
agent_serg писал(а):Вы и не найдёте во Flowcode параллельных разветвлений программы.

Весьма и весьма оспоримо. Чем же является оператор if например?

Вот я например могу сделать без прерываний временные задержки не используя delay и прерывания.
А вы значит не можете? Почему?

Может быть потому что вы хотите временную задержку ОПРЕДЕЛЕННОЙ точности?
А в большинстве случаев точность до микросекунды не нужна....
У топик стартера речь идет о десятке секунд...
Пара тройка десятков милисекунд ему может и не важны.

К топик стартеру только 1 замечание - нихера не понятен алгоритм.
Аватар пользователя
Ник: kindofsky
Имя: kindofsky
(Москва)
Супер Гуру
Супер Гуру
Информация о пользователе
Вернуться наверх

Re: Как запустить два действия параллельно.

Сообщение agent_serg (agent_serg) » 28 окт 2016, 07:27

kindofsky писал(а):Человек ещё не понимает как кнопки организовать со светодиодами, а вы уже его в прерывания суёте...
Тут согласен.

kindofsky писал(а):
agent_serg писал(а):Вы и не найдёте во Flowcode параллельных разветвлений программы.

Весьма и весьма оспоримо. Чем же является оператор if например?
Опрератор If - это условие, по результату которого будут выполнятся одни "ИЛИ" другие действия, но никак не "И".
Делай не как хочется, а как надо и тогда всё будет как хочется...
-------------------------------------------------------------------------------------------------------
FC AVR v5.5.2.1 / Proteus v7.8 SP2 / Программаторы: Triton+ и USBasp / Win7 SP1 x64
Аватар пользователя
Ник: agent_serg
Имя: agent_serg
(White City)
Ученик
Ученик
Информация о пользователе
Вернуться наверх

Re: Как запустить два действия параллельно.

Сообщение kindofsky (kindofsky) » 28 окт 2016, 07:39

Бля. Говорим об одном и том же но по разному.
Я именно про это и говорю - ветвление, а не параллельное выполнения двух условий.
Аватар пользователя
Ник: kindofsky
Имя: kindofsky
(Москва)
Супер Гуру
Супер Гуру
Информация о пользователе
Вернуться наверх

Re: Как запустить два действия параллельно.

Сообщение agent_serg (agent_serg) » 28 окт 2016, 09:51

kindofsky писал(а):Вот я например могу сделать без прерываний временные задержки не используя delay и прерывания.
А вы значит не можете? Почему?

Может быть потому что вы хотите временную задержку ОПРЕДЕЛЕННОЙ точности?
И поэтому тоже.
Вот ситуация. Есть 40 кнопок (или датчиков), есть 40 светодиодов (или реле).
Вам надо написать алгоритм, в котором Вы должны обеспечить стабильную задержку включения или выключения выходов при нажатии кнопок:
Кн.1 -> Вых.1
Кн.2 -> Вых.2
...
Кн.39 -> Вых.39
Кн.40 -> Вых.40
Грубо говоря, 40 каналов кнопка-выход.
Время у каждого канала может быть разным. Все 40 каналов должны быть независимы друг от друга (примерно этого хочет топикстартер).
И как тут обойтись без прерывания?
Если при обработке связки Кнопка-Выход использовать нопы или холостые циклы, то остальные каналы в это время будут "курить бамбук"?
Делай не как хочется, а как надо и тогда всё будет как хочется...
-------------------------------------------------------------------------------------------------------
FC AVR v5.5.2.1 / Proteus v7.8 SP2 / Программаторы: Triton+ и USBasp / Win7 SP1 x64
Аватар пользователя
Ник: agent_serg
Имя: agent_serg
(White City)
Ученик
Ученик
Информация о пользователе
Вернуться наверх

Re: Как запустить два действия параллельно.

Сообщение kindofsky (kindofsky) » 28 окт 2016, 12:47

agent_serg писал(а):И как тут обойтись без прерывания?

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

А вот у меня встречные вопросы
1 - ты правильно прочитал, что было выше написано? При чем тут nop или пустые циклы? Это ведь в практическом применении rк этому случаю - тоже что и delay. А его то мы и не используем.
2 - а покажи как ты с прерыванием решишь эту проблему. Сделай примерчик. А мы потом сравним результат.
Аватар пользователя
Ник: kindofsky
Имя: kindofsky
(Москва)
Супер Гуру
Супер Гуру
Информация о пользователе
Вернуться наверх

Re: Как запустить два действия параллельно.

Сообщение mim (mim) » 28 окт 2016, 14:13

:headbang: Пацаны.... Писюны свои не порвите, так их тянете друг перед другом, аж трещат...
Пусть ТС объявится... Его и учите...
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

След.

Вернуться в ПЕСОЧНИЦА

Кто сейчас на форуме

Пользователь просматривает форум: Yahoo [Bot]

cron