http://forum.getchip.net/

Mod#121 импульс на выходе
http://forum.getchip.net/viewtopic.php?f=24&t=808
Страница 1 из 2

Автор:  siema [ 23 авг 2017, 13:51 ]
Заголовок сообщения:  Mod#121 импульс на выходе

Подскажите, пожалуйста, как можно подправить исходник (Альтернативное обучение удержанием кнопки), чтобы на выходе PD4 получать импульс 100мс при нажатии на кнопки, которые управляют этим выходом.
Мое решение в приложении не рабочее. В макете при нажатии на любую кнопку - всегда импульс на выходе PD4.

Вложения:
45.png
45.png [ 7.26 КБ | Просмотров: 11394 ]

Автор:  SVN [ 23 авг 2017, 14:55 ]
Заголовок сообщения:  Re: Mod#121 импульс на выходе

Во-первых, на скрине нет управление портом PD4, а есть PВ4. Во-вторых, в прерываниях не делают временных задержек. ;)

Чтобы сделать задержку, тебе необходимо создать дополнительную переменную для счётчика импульсов и дополнительный флаг в регистре флагов (r22 – регистр флагов). При установке лог 1 на необходимом порте одновременно «поднимаешь» флаг данного выхода. При поднятом флаге должен начать работать счётчик импульсов. В данной программе это удобнее реализовать в прерывании сторожевого таймера. Его период составляет 16 мс, что означает при шести импульсах счётчика задержка около 96 мс (16 * 6 = 96), а при семи импульсах счётчика задержка будет уже около 112 мс. В основном цикле ты проверяешь флаг порта или управляющий бит регистра порта, и если он поднят то проверяешь счётчик импульсов, как только счётчик станет больше или равно семи, то «отключаешь» порт, сбрасываешь флаг порта и обнуляешь переменную счётчика. Таким образом получаешь требуемый импульс задержки на требуемом выходе.

Автор:  siema [ 24 авг 2017, 17:02 ]
Заголовок сообщения:  Re: Mod#121 импульс на выходе



Вложения:
ss.png
ss.png [ 8.35 КБ | Просмотров: 11368 ]

Автор:  SVN [ 24 авг 2017, 20:09 ]
Заголовок сообщения:  Re: Mod#121 импульс на выходе



Вложения:
1.png
1.png [ 21.88 КБ | Просмотров: 11363 ]

Автор:  siema [ 25 авг 2017, 12:36 ]
Заголовок сообщения:  Re: Mod#121 импульс на выходе

Получается, что я совершено не так понял...
Спасибо огромное!!!!

Автор:  SVN [ 25 авг 2017, 14:52 ]
Заголовок сообщения:  Re: Mod#121 импульс на выходе

В принципе за выходом можно и не наблюдать, а только лишь отслеживать переменную…
1a.png
1a.png [ 5.17 КБ | Просмотров: 11345 ]

Автор:  siema [ 29 авг 2017, 12:53 ]
Заголовок сообщения:  Re: Mod#121 импульс на выходе

Оба варианта работают аналогично.
Сейчас так (по номеру кнопок):
1. Восстановить: A - импульс, Выключить: A - нет. B и С - каждый раз изменение состояния (если ранее были сохранены в EEPROM).
2. Перебор: A - импульс каждый раз, B и С - каждый раз изменение состояния.
3. Нагрузка A: A - импульс через раз (на включение).
4. Нагрузка B: A - импульс каждый раз, B - каждый раз изменение состояния.
5. Нагрузка C: A - импульс каждый раз, C - каждый раз изменение состояния.

Алгоритм можно подпилить в процедуре _Do_Act, но очень смущают паразитные импульсы на нагрузке А при нажатии кнопок 4 и 5 (включение/выключение нагрузок B и C).

Автор:  SVN [ 29 авг 2017, 13:20 ]
Заголовок сообщения:  Re: Mod#121 импульс на выходе



Вложения:
1b.png
1b.png [ 14.87 КБ | Просмотров: 11266 ]

Автор:  siema [ 30 авг 2017, 11:14 ]
Заголовок сообщения:  Re: Mod#121 импульс на выходе

Изменил, но поведение такое же, как описано выше.

Вложения:
ir_control_source_alt_learn_Impulse.rar [47.03 КБ]
Скачиваний: 520

Автор:  SVN [ 30 авг 2017, 12:20 ]
Заголовок сообщения:  Re: Mod#121 импульс на выходе

Причина понятна, а значит решаема… но имеется несколько вопросов:
а) Есть ли необходимость в сохранении состояние нагрузок в EEPROM? Необходимо знать, что при каждом управлении нагрузками (кроме вскл./выкл. всё) производится запись в EEPROM. Но данная память имеет своё ограниченное количество записей/перезаписей (1 000 000).
б) При подаче команды «выключить всё», нужен ли сигнал на порт РВ4?
в) При переборе нагрузок как должно вести себя импульсный выход (РВ4)?

Вообще для понимания… чем управляет порт РВ4?

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