Например TDA7294

Форум РадиоКот :: Просмотр темы - Как реализовать контроль порта с задержкой времени
Форум РадиоКот
https://radiokot.ru/forum/

Как реализовать контроль порта с задержкой времени
https://radiokot.ru/forum/viewtopic.php?f=57&t=189070
Страница 1 из 1

Автор:  Alex_ka [ Сб июл 08, 2023 18:51:18 ]
Заголовок сообщения:  Как реализовать контроль порта с задержкой времени

Подскажите пожалуйста. В бесконечном цикле есть if(PINC.4==1){break;}; Как сделать, чтобы эта команда выполнилась, если единица на порту присутствует более 500 ms или на крайняк 1000 ms. Если плюс присутствует меньше данного времени , то if не выполнялась. Задержка нужна для того, что на данный порт подключено будет реле, которое будет срабатывать с опозданием, после подачи несущей с модуляцией с микроконтроллера. Использования задержки delay не подходит, так как на СИ для atmega 8 написана программа несущих частот на таймере Т1 и в бесконечном цикле, программно, частоты модуляции и есть вывод информации на LCD. На таймере Т0 написана секунда, так как в программе нужен отсчёт времени.

Автор:  Martian [ Сб июл 08, 2023 18:55:35 ]
Заголовок сообщения:  Re: Как реализовать контроль порта с задержкой времени

напишите на таймере Т0 полсекунды.

Автор:  Alex_ka [ Сб июл 08, 2023 18:56:39 ]
Заголовок сообщения:  Re: Как реализовать контроль порта с задержкой времени

Так меня и задержка в секунду устраивает. Но не могу сообразить, как её реализовать на данном порту.

Автор:  Martian [ Сб июл 08, 2023 19:03:57 ]
Заголовок сообщения:  Re: Как реализовать контроль порта с задержкой времени

Код:
unsigned char sekunda_proshla = 0; // флаг, показывающий, что секунда прошла
....
 if(PINC.4== sekunda_proshla){break;}
....
где-то в обработке таймера T0:

sekunda_proshla = 1;


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

Автор:  Alex_ka [ Сб июл 08, 2023 19:10:29 ]
Заголовок сообщения:  Re: Как реализовать контроль порта с задержкой времени

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

Автор:  Starichok51 [ Сб июл 08, 2023 19:10:46 ]
Заголовок сообщения:  Re: Как реализовать контроль порта с задержкой времени

Alex_ka писал(а):
На таймере Т0 написана секунда
порт проверять не бесконечном цикле, а когда прошла секунда. если порт равен 1, поставить флаг. через еще секунду опять проверить порт. если на порту осталась единица И установлен флаг, выполнить действие.

Автор:  Alex_ka [ Сб июл 08, 2023 19:13:49 ]
Заголовок сообщения:  Re: Как реализовать контроль порта с задержкой времени

Не получается у меня не в бесконечном цикле. Мне надо постоянный контроль за отвалом реле в случае отказа проверяемого блока.

Автор:  Martian [ Сб июл 08, 2023 19:16:16 ]
Заголовок сообщения:  Re: Как реализовать контроль порта с задержкой времени

а, про порт проглядел...

Тогда надо настроить обработку внешнего прерывания на порт, если сработало - проверить, что там с sekunda_proshla

Автор:  Alex_ka [ Сб июл 08, 2023 23:22:40 ]
Заголовок сообщения:  Re: Как реализовать контроль порта с задержкой времени

В принципе над этим можно подумать.

Добавлено after 4 hours 2 minutes 27 seconds:
Подумал и решил пойти иным путём. Так как мне нужно только, чтобы задержка контроля порта происходила только после запуска генераторов частот, а не постоянно висела, буду вводить ещё одну переменную секунды, которая будет считать одну секунду и обнулятся и в этом бесконечном цикле уберу контроль состояния порта, а введу команду если выше указанная переменная ровна единице, остановить этот бесконечный цикл и перейти к следующему, где будет if(PINC.4==1){break;}; Попробую так, посмотрю, что протеус покажет.

Автор:  Martian [ Сб июл 08, 2023 23:41:34 ]
Заголовок сообщения:  Re: Как реализовать контроль порта с задержкой времени

Замечу, что у наиболее достоверного контроля порта должна быть буферизация для программы. Работа с внешним прерыванием это позволяет сделать без дополнительных аппаратных затрат. В ином случае есть риск, что до момента if(PINC.4){break;} много раз PINC.4 изменит состояние. Впрочем, если его состояние необходимо только на момент проверки, тогда ок.

Автор:  Alex_ka [ Вс июл 09, 2023 00:23:12 ]
Заголовок сообщения:  Re: Как реализовать контроль порта с задержкой времени

Я понял о чём речь. Но у меня в бесконечном нет команды delay, которая тормозит цикл и цикл работает на скорости тактовой частоты. Мне кажется, что в таком случае контроль состояния порта выше, чем делать постоянный опрос через таймер. Проверил в протеусе, задержка пашет и отвал моментальный если на порту С4 разорвать ноль. Можно пробовать в железо переносить.

Автор:  Martian [ Вс июл 09, 2023 00:31:37 ]
Заголовок сообщения:  Re: Как реализовать контроль порта с задержкой времени

внешнее прерывание - не есть опрос вообще, тем более через таймер. это некий триггер, который сработает именно тогда, когда произойдет внешнее событие. Микроконтроллер при этом вообще может спать (при условии, что у него есть функция проснуться по внешнему прерыванию) или делать какие-то иные задачи.
Моментальным будет только если изменение состояния порта по времени дольше, чем пробег всего цикла. К тому же, Вы там говорили, что у Вас таймер работает и есть вывод информации на LCD. Это означает, что главный цикл вовсе не такой быстрый, как выглядит - часть времени отводится на обслуживание таймера и этого вывода. Так что, далеко не равно тактовой частоте.

Автор:  veso74 [ Вс июл 09, 2023 02:40:00 ]
Заголовок сообщения:  Re: Как реализовать контроль порта с задержкой времени

Если не в используемом IDE, напишите функцию по timer0/timer2 для текущего времени через 1 ms (как напр. millis(), get_ticks() ... ).
Код:
if (PINC.4 == 1) {
  if (start == 0) {
    start = 1;
    t = get_ticks();
  }
  else
    if ((t - get_tick()) > 1000) {  // 1 s
      start = 0;
      break;
   }
}
else
  start = 0;

Программа в основном цикле при нормальной работе будет замедляться на: время на чтение состояния одного вывода и на присвоение 0 одной переменной.

Автор:  Alex_ka [ Вс июл 09, 2023 07:55:35 ]
Заголовок сообщения:  Re: Как реализовать контроль порта с задержкой времени

Спасибо. Попробую.

Автор:  BOB51 [ Вс июл 09, 2023 18:38:57 ]
Заголовок сообщения:  Re: Как реализовать контроль порта с задержкой времени

Встроить в цикл счетчик "условных енотов", который будет менять значение (в "условных енотах") при каждом опросе линии ввода данных. При достижении заданного количества - выход из цикла.
8)

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/