Световые эффекты для светодиодной матрицы. Универсальная программа для программирования любых световых эффектов. + пример работы

светодиодная матрица

Ниже описана программа (для PIC16F628A), позволяющая легко запрограммировать любые световые эффекты для самодельной светодиодной матрицы 5х5.

Как вы, наверное, уже догадались (если читали статью про саму матрицу) основная проблема нашей матрицы в том, что на ней невозможно включить несколько произвольных светодиодов одновременно в разных строках и столбцах. Однако, в одном столбце (или строке) одновременно включить несколько произвольных светодиодов можно. Но! Если мы будем включать нужные нам светодиоды, например, построчно, при этом очень быстро меняя строки, то для глаза рисунок сольется и будет казаться точно таким же, как если бы мы произвольно включили несколько светодиодов в разных строках и столбцах.

пример фрейма

То есть, фактически, картинка показывается за пять циклов: сначала первая строка, потом вторая, потом третья и так далее до пятой строки, после чего все циклы повторяются, но, за счет очень быстрого переключения строк, мы видим один статичный кадр (фрейм).

Так как каждый фрейм у нас состоит из пяти строк, в каждой из которых по пять столбцов, то весь фрейм кодируется 5*5 битами. Для удобства будем использовать один байт на столбец (старшие три бита использовать не будем), итого получим 5 байт на фрейм.

Переключая такие псевдостатичные картинки (но уже с различимой для глаза скоростью) можно получить динамическое изображение. Шесть (к примеру) фреймов для нашей матрицы займут в памяти 5*6=30 байт. Фреймы можно хранить в памяти данных EEPROM. Она имеет размер 128 байт, то есть позволяет хранить до 25 фреймов. Посчитаем: 25*5=125 + 2 байта (для хранения информации о количестве загруженных фреймов и о скорости смены фреймов).

Если соединить контроллер с компьютером через USART, то можно будет загружать фреймы прямо с компьютера, но об этом мы поговорим позже.

Итак, контроллер управляет драйверами строк и столбцов. Чтобы подключить строки 1, 2, 3, 4, 5 к шине питания — нужно подать "1" на выходы контроллера RA2, RA3, RA1, RA7, RA6 соответственно, а для того, чтобы подключить столбцы 1, 2, 3, 4, 5 к нулевой шине (к земле) — нужно подать "0" на выходы контроллера RB3, RB4, RB5, RB6, RB7 соответственно.

Светодиод загорается в том случае, если он подключен и к питанию и к земле.

В нашем примере мы будем загружать фреймы из EEPROM в ОЗУ, причём только в нулевой банк, в котором, за вычетом всех пользовательских переменных, на фреймы остается 86 байт, то есть максимум 17 фреймов.

Для реализации динамической картинки "вращающийся крест" нам понадобится 6 фреймов:

фреймы для эфекта вращающийся крест

Алгоритм:

Блок-схема алгоритма управления светодиодной матрицей

Текст программы под катом

 de .8,  .255  ; кол-во фреймов и показов одного фрейма (скорость)
 de 11h, 19h, 15h, 13h, 11h   ; первый фрейм
 de 0Eh, 0Ah, 0Ah, 1Fh, 11h   ; второй фрейм
 de 11h, 19h, 15h, 13h, 11h   ; третий фрейм
 de 0Fh, 09h, 1Fh, 11h, 1Fh   ; четвертый фрейм
 de 15h, 0Eh, 04h, 0Eh, 15h   ; пятый фрейм
 de 1Fh, 11h, 11h, 11h, 1Fh   ; шестой фрейм
 de 1Fh, 11h, 11h, 11h, 11h   ; седьмой фрейм
 de 12h, 12h, 0Сh, 08h, 06h   ; восьмой фрейм

[свернуть]

Скачать готовую прошивку и asm-файл

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

 de .8,  .255  ; кол-во фреймов и показов одного фрейма (скорость)
 de 11h, 19h, 15h, 13h, 11h   ; первый фрейм
 de 0Eh, 0Ah, 0Ah, 1Fh, 11h   ; второй фрейм
 de 11h, 19h, 15h, 13h, 11h   ; третий фрейм
 de 0Fh, 09h, 1Fh, 11h, 1Fh   ; четвертый фрейм
 de 15h, 0Eh, 04h, 0Eh, 15h   ; пятый фрейм
 de 1Fh, 11h, 11h, 11h, 1Fh   ; шестой фрейм
 de 1Fh, 11h, 11h, 11h, 11h   ; седьмой фрейм
 de 12h, 12h, 0Сh, 08h, 06h   ; восьмой фрейм

Добавить комментарий