Обсуждаем контроллеры компании Atmel.
Ответить

Re: Семисегментный LED-индикатор. Эффекты анимации

Чт авг 18, 2022 17:54:35

понял, согласен, если эти знаки - часть афавита (например при приеме строки извне) то конечно так удобнее

Re: Семисегментный LED-индикатор. Эффекты анимации

Чт авг 18, 2022 19:34:47

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

Рассмотрим организацию работы программного цикла, содержащего три КА: автомат выбора режима отображения на дисплее, автомат обновления текущего времени на дисплее в режиме показа часов и автомат работы динамической индикации.

Главная фукнция main и главный цикл:

КА-1 - первый конечный автомат. Условие начала его выполениея - флаг change_display_flag = 1 (или любое отличное от 0 число), он является запросом на смену режима показа на дисплее и этот флаг может выставляться например в прерывании по таймеру или из другого конечного автомата. Переменная display_mode может изменяться как извне одновременно с выставлением флага change_display_flag, так и внутри конечного автомата, реализуя циклическое переключение. Зависит от требуемых задач.
Второй КА производит обновление текущего времени на дисплее в режиме показа часов. Будет выполняться только если display_mode = WATCH_MODE и update_curr_time = 1. В принципе, этот КА можно было бы не писать, перенеся его функции в предыдущий, но без смены текущего режима display_mode. Но для примера работы алгоритмов - годится.
Ну и третий КА - работа динамической индикации, переключение активного разряда индикатора. Выполняется он при dynascan_flag = 1. Этот флаг может выставляться в прерывании таймера, отсчитывающего интервал смены разрядов.

Функция ShowWatch(), вызываемая из первого КА.

Тут всё понятно, думаю. Функция запрашивает текущее время и отправляет на преобразование чисел в комбинации сегментов, которые будут зажжены на дисплее.
Остальные функции - аналогичны. Функцию DND_DynaScan() уже ранее показывал.
Анимацию сегментов при смене режима отображения можно выполнять так же в КА. Анимацию сдвига цифр - тоже.
Суть КА в том, чтобы построить циклическую структуру программы.

Re: Семисегментный LED-индикатор. Эффекты анимации

Пт авг 19, 2022 11:39:15

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




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

мне не понятно как управлять разрядами, что писать в функции эффекта

Re: Семисегментный LED-индикатор. Эффекты анимации

Пт авг 19, 2022 11:52:14

А, если насчет езды туда-сюда, это, как я говорил ранее, эффект бегущей строки. Тут маска на сегменты не поможет. Тут надо изменять всё отображаемое число. Если изначально есть "1253", то при сдвиге влево нужно следующим шагом анимации вывести число "253_" ( _ - это пробел), затем еще один шаг анимации - число "53_ _", потом "5_ _ _", и в завершении "_ _ _ _ ". Чтобы вдвинуть слева направо новое число, нужно наоборот: "8 _ _ _ ", "08_ _", "908_", "1908".
Пишите простым способом. Если знаете работу с указателями, напишите через указатели.

Re: Семисегментный LED-индикатор. Эффекты анимации

Пт авг 19, 2022 14:04:26

Если изначально есть "1253", то при сдвиге влево нужно следующим шагом анимации вывести число "253_" ( _ - это пробел), затем еще один шаг анимации - число "53_ _", потом "5_ _ _", и в завершении "_ _ _ _ ".


да, так я пробовал. строка убегает и возвращается, все ок.

Чтобы вдвинуть слева направо НОВОЕ число, нужно наоборот: "8 _ _ _ ", "08_ _", "908_", "1908".


А ВОТ СМЕНА "НОВОГО" числа :dont_know:

наверно нужно прочесть что у нас буфере на пример время

присвоить d0 = digit_out[0] что в первом разряде ,
d1 = во втором разряде
и т.д.
и вызвать функцию эффект

когда придет время для смены индикации снова нужно прочесть что у нас буфере на пример температуру
присвоить d0 = digit_out[0] что в первом разряде ,
d1 = во втором разряде
и т.д.

и вызвать функцию эффект




как прочесть экран и присвоить им значения d0-d3 я никак не въеду.

Добавлено after 1 hour 41 minute 36 seconds:
во! сам написал
наверно нужно прочесть что у нас буфере на пример время

присвоить d0 = digit_out[0] что в первом разряде ,
d1 = во втором разряде
и т.д.
и вызвать функцию эффект


пошел обедать сижу и и думаю, а ведь правильно написал то :idea:
в коде поправил и вот и все эффект "туды-суды" готов :))) правда сточками подумать надо

Re: Семисегментный LED-индикатор. Эффекты анимации

Пт авг 19, 2022 21:05:31

Ну воо! Шикардос :) А говорили что не умеете

Re: Семисегментный LED-индикатор. Эффекты анимации

Сб авг 20, 2022 06:54:53

Как сторонник конечных автоматов. Хотел бы попросить ваши примеры использования разных КА. Примеры, шаблоны.

Re: Семисегментный LED-индикатор. Эффекты анимации

Вс авг 21, 2022 10:28:48

MLX90640 Вы так ловко писали примеры для часов с анимацией. наверно когда то делали такие?
и опубликовывали где то? если да то где, ссылочку киньте, интересно очень. если нет может выложите исходник или напишите статейку :beer:

Re: Семисегментный LED-индикатор. Эффекты анимации

Вт авг 23, 2022 14:23:20

спасибо MLX90640 и Dimon456 за помощь! :beer:

Re: Семисегментный LED-индикатор. Эффекты анимации

Сб авг 27, 2022 17:44:48

А что такое 238t ?

Re: Семисегментный LED-индикатор. Эффекты анимации

Сб авг 27, 2022 18:08:14

23-е число, Вторник :)

Re: Семисегментный LED-индикатор. Эффекты анимации

Сб авг 27, 2022 21:39:57

есть смысл тогда разделить число и день недели.
День недели просится на 3 символа
ПОН
ВРН
СРЕ
ЧВГ
ПНЦ
СУБ
ВОС


Ибо 8t или Bt без отрыва от 23 - не читаются, как вторник.

Re: Семисегментный LED-индикатор. Эффекты анимации

Сб авг 27, 2022 22:27:53

ПН, 8t, CP, Чt, Пt, C6, 8С. у меня так :wink:

День недели просится на 3 символа


сегментов только 4 :dont_know:

Re: Семисегментный LED-индикатор. Эффекты анимации

Сб авг 27, 2022 23:31:56

Serzh2000, день недели показывать отдельным экраном. 3 знакоместа из четырех.
Ибо пардон, но 238 t - не читается, как 23-Вt
а число можно с месяцем, через точечку

Re: Семисегментный LED-индикатор. Эффекты анимации

Вс авг 28, 2022 06:44:15

ПН, 8t, CP, Чt, Пt, C6, 8С. у меня так :wink:

bt, bc.

Re: Семисегментный LED-индикатор. Эффекты анимации

Вс авг 28, 2022 07:26:53

Изображать на семисегментниках дни недели убого. Это мое мнение. Я никогда нигде не видел индикацию дней недели, если семисегментники. И не надо. Для дней недели тогда спецсредства. Что, решать вам.

Re: Семисегментный LED-индикатор. Эффекты анимации

Вс авг 28, 2022 10:00:34

день недели показывать отдельным экраном. 3 знакоместа из четырех.

высветить отдельно температуру, число , день недели не дождёшься когда часы время покажут :o

и Вы действительно думаете трех значная аббревиатура лучше читается ? ВРН что это :shock:

я так не думаю :sleep:

Изображение

Я никогда нигде не видел индикацию дней недели, если семисегментники. И не надо.


изначально эти часы показывали число-месяц. число можно забыть какое сегодня, но месяц!!!
и лично для меня актуальнее знать день недели. теперь мои часы показывают мне, число-день недели :)))

Re: Семисегментный LED-индикатор. Эффекты анимации

Вс авг 28, 2022 11:06:06

Serzh2000, ВРН - это ВтоРНик.
А вообще это пошло еще из каких старых, еще советских, журналов. Вроде из Радио или из МК (не помню).
Для часов на 176ИЕ12-13 предлагалось еще замутить день недели. Он типа сам по себе, а отображение делалось железной дешифрацией. Диоды или ПЗУха. Не помню, давно это было.
Но там двусимвольный вариант был.
ПН ВР СР ЧВ ПЦ СБ ВС

Я пробовала разные варианты, всё некрасиво.
В результате день недели пишу номером.
d.--1 d.--2 . . . . . d.--7
У меня одни часы на 7сегментниках показывают время - число_месяц - время - день_недели - время, 8 сек/1.5 сек/8 сек/1.5 сек
вторые - время - число_месяц - день_недели - температура_за_бортом - время 8 сек/1.5 сек/1.5 сек/2 сек
с 23 до 7 - только время. Ночью мне нафиг не надо день недели за бортом, нужно время. Причем на минимальной яркости.

Re: Семисегментный LED-индикатор. Эффекты анимации

Вс авг 28, 2022 11:13:42

меня одни часы на 7сегментниках показывают время - число_месяц - время - день_недели - время, 8 сек/1.5 сек/8 сек/1.5 сек
вторые - время - число_месяц - день_недели - температура_за_бортом - время 8 сек/1.5 сек/1.5 сек/2 сек


покажите видео, очень интересно! :shock:

Re: Семисегментный LED-индикатор. Эффекты анимации

Вс авг 28, 2022 12:10:30

Serzh2000, абсолютно ничего интересного на самом деле там нет. Эффектов нет. Смена показаний через угасание яркости стразу по всему дисплею. В темноте, когда яркость минимальна - показания просто меняются.
23.59
28. 8
23.59
d.--7
23.59

23.59
28. 8
d.--7
t.28°
23.59
Ответить