logo
Разработка светодиодной матрицы

2.5 Разработка алгоритма управления

Мы рассмотрим два случая световых эффектов для светодиодной матрицы.:

1. Эффект 1 - движущиеся строки и столбцы;

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

Для эффекта 1 алгоритм будет иметь вид, представленный на рисунке 2.6.

Рисунок 2.6 - Алгоритм программы эффекта 1 для светодиодной матрицы

Теперь составим алгоритм для универсальной программы (Рис. 2.7).

Рисунок 2.7 - Алгоритм универсальной программы для светодиодной матрицы

Контроллер управляет драйверами строк и столбцов светодиодной матрицы, в качестве которых выступают обычные биполярные транзисторы.

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

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

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

Рисунок 2.8 - Пример фрейма

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

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

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

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

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

Для реализации динамической картинки "вращающийся крест" нам понадобится 6 фреймов (Рисунок 2.9).

Рисунок 2.9 - Реализация картинки «вращающийся крест»