1

Тема: индикация уровней светодиодами

Задача у меня такая. Получаю два байта. В первом байте либо разрешение установки уровня (3 уровня индикации), либо сброс индикации. Во втором байте уровень индикации. 4 состояния.  3,2,1 и отключение. Индикацию делаю двухцветным светодиодом. Красный - 3 уровень, зелёный - 1 уровень и смесь этих диодов - 2 уровень. Наткнулся на такой затык. При переключении уровня нужно сбрасывать предыдущее состояние триггеров. Иначе будет неверная индикация. Никак не могу просто решить эту задачу. Либо как-то через буферы, но получаем задержку индикаци... Помогите решить эту задачу...

Вложений в сообщении

Иконка вложения Без имени-1.gif 49.11 кб, скачивался 53 раз, последний раз 2021-09-15 

Иконка вложения вентиляция2.cfd 2.48 кб, скачивался 111 раз, последний раз 2021-09-15 

2

Re: индикация уровней светодиодами

Для того чтобы дать наиболее оптимальный вариант решения задачи требуется ее более детальное описание: в каком порядке и при каких условиях что должно происходить.
В частности:
- Могут ли указанные байты принимать другие значения, отличные от анализируемых? Возможно, управление переключением уровней и разрешением на установку выполняется отдельными битами указанных байт.
- Действительно ли нужна отдельная команда "сброс"? Может достаточно отсутствия разрешения на установку?
- Действительно ли требуется сброс уровня? Указаны строгие соответствия значений байт включению той или иной комбинации светодиодов - если значение "уровень" не будет равно заданным константам, возможно светодиоды должны выключаться?

3

Re: индикация уровней светодиодами

1) Байты могут быть абсолютно любые. Это живая шина данных. Но переключение происходит только при этих входных данных. Переключение происходит битами, но другие биты так же должны наличиствовать.
2) Я уже написал, что нужно не просто запретить установку, а именно сбрасывать уровни.
3) Выключение должно происходить только по двум параметрам. Уровень ноль и наличие значения 0х000С в первом байте. Во всех остальных случаях система никак не должна реагировать на прилетающие данные.

4

Re: индикация уровней светодиодами

eugenSU пишет:

1) Байты могут быть абсолютно любые. Это живая шина данных. Но переключение происходит только при этих входных данных. Переключение происходит битами, но другие биты так же должны наличиствовать.

Указанные байты принадлежат конкретным сообщениям, с конкретными ID, и находятся в них на соответствующих местах. Вопрос был как меняются эти данные (байты этих сообщений) в процессе работы устройства? Появляются однократно? Ретранслируются постоянно, пока не изменятся какие-либо условия? И т.п.
Как я понимаю, переключение должно происходить по строгому соответствию данных указанным константам.

eugenSU пишет:

2) Я уже написал, что нужно не просто запретить установку, а именно сбрасывать уровни.

Сброс уровней подразумевает принудительную установку значения "0". Но можно, при определенных обстоятельствах, с помощью логических операторов, просто не давать устанавливать на выходах "1".

eugenSU пишет:

3) Выключение должно происходить только по двум параметрам. Уровень ноль и наличие значения 0х000С в первом байте. Во всех остальных случаях система никак не должна реагировать на прилетающие данные.

В исходной диаграмме сброс мог происходить либо по выполнению одного условия, либо другого, либо обоих (Логическое ИЛИ), но не строго по одновременному выполнению обоих.

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

Вложений в сообщении

Иконка вложения c7_вентиляция2.cfd 5.69 кб, скачивался 125 раз, последний раз 2021-09-16 

5

Re: индикация уровней светодиодами

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

6

Re: индикация уровней светодиодами

Время выполнения одного цикла диаграммы, в миллисекундах, доступно в специальном системном регистре "Регистр контроля длительности программного цикла, мс" (см. https://canny.ru/docs/c7/resources/#sec … -diagrammy ). Его значение можно, например, выводить в CAN.
Время выполнения диаграммы зависит от количества и типов функциональных блоков, а также от количества и типов используемых драйверов (CAN, UART и т.п.).
Наименее затратные по времени блоки - это логические и побитовые операции; самые затратные - коммутаторы и конвертеры (в зависимости от количества входов/выходов).
Относительная (сравнительная, в условных единицах) производительность каждого из контроллеров приведена в таблице Сравнительных характеристик контроллеров (в конце страницы https://canny.ru/products/ , строка "Индекс производительности").

7

Re: индикация уровней светодиодами

Спасибо за консультацию.
P.S. погонял в симуляторе вашу концепцию. Всё таки не работает как надо.
1) При вЫключении индикации нулевым байтом не происходит сброс триггеров. Если у нас в процессе работы шины опять прилетит байт установки (независимо от уровня), то восстановятся старые показания уровня.
2) Установка триггеров уровней должны происходить по сумме сигналов установки и наличия уровней. Иначе, уровни можно выставлять даже при отсутствии сигнала установки уровня (в нулевом байте).

Если второе решается просто, то первое простым способом не решить. Я сделал чуть сложнее, но всё работает. Если сможете что-то подправить, то буду только рад.

Вложений в сообщении

Иконка вложения вентиляция2.cfd 3.63 кб, скачивался 119 раз, последний раз 2021-09-18