#237
Сообщение
WildCat » 14.04.2023{, 02:31}
Что-то я голову уже сломал, как решить задачу для дисплея. Может кто натолкнет на мысль?
Нужно контролировать наличие связи дисплея с МК. МК удален и к нему доступ во время работы затруднен.
При потере связи нужно создавать сообщение на дисплее (дальше уже опционально: включить дисплей если он спал, включить светодиод и т.п., это просто) .
Я никак не могу зафиксировать отсутствие связи.
Мой ход действий:
Передаю бит данных постоянно. В дисплее вижу этот бит.
Если в дебаге сэмулировать наличие сигнала, то всё ок, сообщение есть. По факту при разрыве связи не происходит изменения значения. То ли дисплей запоминает последнюю пришедшую посылку, то ли ещё что.
Далее:
Периодически, допустим, раз в 1с (2..5..10) меняю состояние с 1 на 0.
Логика такая: пока значения меняются, значит всё ок. Соответственно, включена задержка на срабатывание сигнала (таймер). То есть, при отсутствии изменения бита я формирую значение переменой=1. Эта переменная включает таймер, в котором висит сообщение об обрыве связи.
Проверяю: 1 появляется, а вот таймер не включается.
Дальше мысли кончились.
Отправлено спустя 1 час 4 минуты 54 секунды:
Разобрался.
У меня в основном таймере входных переменных (200мс) происходила обработка состояний бита наличия связи.
А таймер задержки срабатывания сигнализации обрыва связи был 5000мс.
Вывел обработку состояния бита в другой таймер, поменял периоды таймеров.
В общем, таймер обработки состояния должен быть с бо́льшим временем, чем таймер, который вызывается по условию из этого таймера.
В итоге таймер обработки бита 5000мс, таймер задержки вывода аварии 3000мс.
В целом, работает, но что-то мне подсказывает, что есть более изящное решение.
Но с выводом аварии на спящем дисплее увы, проблема. Спящий дисплей на пробуждение может принять команду только по UART. Когда засыпает, внутренняя программа останавливается, и отсутствие пинга не может вызвать команду sleep=0. Т.е. сигнализация об отсутствии связи возможна только на неспящем дисплее.