Показать сообщение отдельно
Старый 22.03.2019, 05:51   #2
Eprinter
Заглянувший
 
Аватар для Eprinter
 
Регистрация: 27.02.2017
Адрес: Нашенский
Сообщений: 147
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 302
Поблагодарили 439 раз(а) в 97 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: - очень-очень хороший человек (439)
По умолчанию

Решил немного пояснить алгоритм.

Первый чип загружен библиотекой ДСС, следит за командами. Если приходит из заданного диапазона (0:0 ... 31:3), преобразует к виду 5 старших бит адрес, 3 младших данные (порт и команда), и пропихивает в последовательный порт. Если получено несколько одинаковых команд подряд, обрабатывается только первая.

Второй чип постоянно проверяет буфер, если обнаружена команда - проверяет, не выполняет ли он её уже, и ставит в очередь. Каждые 20 мс запускается обработчик, перебирающий все 128 портов, и если обнаруживается новая или недовыполненная команда, высчитывает и отправляет на нужный драйвер очередной шаг.

Если при включении питания дисплей не был подключен, то медленные операции вывода на ЛСД отключены и в режим настройки зайти нельзя. Если был подключен, то на экран выдаётся последняя принятая в работу команда, для отлавливания багов удобно. В любой момент можно перейти в режим настройки, изменить все доступные параметры для любого порта или нескольких подряд и сохранить в еепром, работа при этом прекращается. Программирование CVs не предусмотрено в принципе, т.к. с пульта оказалось гораздо удобнее.

Пока реализован алгоритм плавного переключения стрелок, он же (с небольшой доработкой) подойдёт для плавного зажигания/гашения огней. В дальнейшем планирую добавить имитацию различных световых эффектов, как-то сварка и т.п. Также подумываю о программировании переключения многоламповых светофоров одной командой, а не каждым светом по отдельности. Если не будет хватать ресурсов или быстродействия - разделю задачу на два узко заточенных чипа.

Мой макет имеет размер 1.22х2.44, поэтому подход централизованной обработки команд и раздачи по шине на места считаю более целесообразным, чем на одну шину ДСС вешать десятки декодеров и апгрейдить их все в случае необходимости. Да и по количеству проводов разницы большой нет - и так, и так их немерено
Eprinter вне форума  
Вверх
3 пользователя(ей) сказали cпасибо: