Антон Юрьев, Украина, г. Донецк
Схема будет интересна радиолюбителям, начинающим осваивать микроконтроллеры (МК). А также всем, кто в силу разных причин интересуется разработкой устройств на светодиодах: студентам, автомобилистам, рекламщикам.
Не секрет, что на поиск в Internet нужной схемы на МК и программы к ней можно безрезультатно потратить уйму времени. Приходится браться за освоение МК самому. И нет ничего лучше, чем собрать «с нуля» яркое динамичное устройство «два в одном», изображенное на Рисунке 1.
![]() |
|
Рисунок 1. | Анимированный индикатор прохода на светодиодной матрице 8×8. |
В современном мире RGB двухцветной светодиодной матрицей никого не удивить. Но это не мешает производителям оптоэлектроники выпускать широкий спектр одно- и двухцветных светодиодных матриц прямоугольной формы. Типовые размеры от 10 мм до 100 мм, «пикселизация» 5×7 или 8×8 точек. Например, матрицы GNM-23881BEG, RL-M2388SGBW, TBA2311SURKCGKWA, SLD2388BNA5BD являются однотипными представителями семейства двухцветных матриц. Размер этих сборок около 60×60 мм, «разрешение» 8×8 точек с диаметром светодиодов 5 мм и общим анодом в строке.
В подобных светодиодных матрицах светодиоды собираются в группы, относящиеся к строкам. Вот и говорят «общий анод» или «общий катод» в строке. Это накладывает ограничения на способ вывода информации. Нужна динамическая индикация.
На Рисунке 2 показана схема внутренних соединений двухцветной матрицы с общим анодом в строке и принцип динамической индикации. В отличие от статики, в динамике нельзя управлять любым светодиодом в произвольный момент времени. Приходится последовательно перебирать адреса всех строк или столбцов. На Рисунке 2 продемонстрирован замедленный вариант «развертки» одного «кадра» изображения по столбцам и ускоренный в 10 раз перебор столбцов, что дает ясное представление о формируемом изображении.
![]() |
|
Рисунок 2. | Динамическая индикация зеленой стрелки на двухцветной матрице 8×8. |
На Рисунке 3 показана та же матрица, на которую выводится красный крестик. В каждый отдельный момент времени адресуется какой-либо столбец и несколько строк. Какие именно светодиоды сейчас включены, зависит от текущего двоичного слова на выводах 221, 192, 163, 134, 35, 66, 97, 138 матрицы и «засвеченного» столбца (верхний индекс соответствует естественному порядку строк, обозначенному в datasheet матрицы).
![]() |
|
Рисунок 3. | Динамическая индикация красного крестика на двухцветной матрице 8×8. |
Обратите внимание на выводы 24 (23), 21 (20), … , 7 (8), 10 (11) матрицы, которые выделяются черным цветом. Во время работы при переборе столбцов они должны замыкаться на «землю», обеспечивая путь току через светодиоды (от одного до восьми светодиодов столбца могут «делить» общий сток). Ввиду этого может показаться несколько некорректным, что на рисунках при адресации столбцов в двоичном слове «пробегает» логическая единица. Конечно же, там должен быть ноль. Но для МК – это логическая единица, что станет ясно из схемы ниже.
Чтобы засветить светодиод, нужно пропустить через него ток, соответствующий необходимой яркости свечения. Каждый из выводов строк матрицы в нужный момент необходимо подключить к источнику тока или напряжения. В последнем случае понадобится токоограничивающий резистор и источник питания (ИП) с напряжением, превышающим прямое падение на данном светодиоде. Мы ограничимся ИП и резистором, включенным последовательно со светодиодом.
Для управления такой матрицей понадобятся:
1) верхние ключи, подключающие строки к ИП;
2) нижние ключи, отвечающие за коммутацию катодов светодиодов на общий провод питания;
3) раздельное управление ключами на МК.
На Рисунке 4 показана принципиальная схема управления отдельным светодиодом строки/столбца на дискретных элементах.
|
|
Рисунок 4. | Управление светодиодом |
На первый взгляд схема на Рисунке 4 может показаться избыточной. Но это нет так. Нижний ключ образует пару Дарлингтона, а верхний – сбалансированный каскад Шиклаи. На верхнем ключе происходит преобразование логического уровня сигнала управления МК «вверх», а на нижнем – «вниз», т.е. инверсия. Таким образом, за счет составных ключей достигается:
а) согласование выводов МК с сильноточными ключами питания светодиодов;
б) инверсия управляющего сигнала на нижнем ключе;
в) уменьшение количества элементов на плате, так как сборки Дарлингтона и Шиклаи выпускаются в виде интегральных микросхем на 2, 4, 7, 8 каналов и допускают прямое подключение к выводам МК.
На Рисунке 5 приведена принципиальная схема устройства индикации.
Рисунок 5. | Принципиальная схема анимированного индикатора прохода на AVR. |
В схеме на Рисунке 5 использованы следующие компоненты:
- МК Atmega48PA-AU (SMD корпус TQFP32),
- две микросхемы ULN2803 (8-канальные сборки Дарлингтона в корпусах SO18-300),
- микросхема 74HC595 (сдвиговый регистр в корпусе SO16-150),
- стабилизатор LD1117-5.0 или 7805 (в SOT223 или другом SMD корпусе),
- любая двухцветная светодиодная матрица из перечисленных выше, например, распространенная RL-M2388SGBW,
- транзисторы BC807-16 (PNP, 8 штук в корпусах SOT23),
- транзисторы BC847B (NPN, 9 штук в корпусах SOT23),
- стабилитрон BZV55-C4V7 (корпус SOD80),
- два электролитических конденсатора 220 мкФ × 25 В,
- резисторы в корпусах 1206 различных номиналов (см. схему на Рисунке 5),
- керамические конденсаторы в корпусах 1206 различных номиналов (см. схему).
- любой шестиконтактный разъем, подходящий для имеющегося ISP программатора МК Atmel AVR (чаще всего штырьки PLS),
- прямой винтовой клеммник на плату с тремя контактами.
Индикатор прохода изначально предназначен для работы с турникетами на проходных и автоматическими дверями, оборудованными электрическими замками с централизованным управлением. Это означает, что сигнал на смену изображения стрелка/крестик поступает от автоматизированной модульной системы контроля доступа, или же какой-либо кнопки/переключателя. В данной схеме используется один сигнальный провод, который подтягивается к питанию в случае, когда проход закрыт – состояние «Нет» прохода (красный крестик), и к общему проводу, когда проход разрешен – «Да» (зеленая стрелка). По аналогии с опросом кнопки, МК постоянно проверяет текущее состояние. Для защиты входа МК применен транзистор со стабилитроном в цепи базы (см. схему на Рисунке 5).
Далее коснемся непосредственно алгоритма работы индикатора. Программа МК реализует машину состояний на операторах switch/case. При этом аппаратные прерывания таймера вызывают сканирование столбцов матрицы с табличным поиском содержимого строк. Программа написана с использованием AVR Studio 4.18 [1] и бесплатного компилятора WinAVR [2]. Использованию этих инструментов посвящено много обзоров и литературы, например [3]. На Рисунке 6 показана блок-схема программы.
|
|
Рисунок 6. | Блок-схема программы управления индикатором. |
По завершении настройки портов и таймера, выполняемой после старта МК, запускается основной цикл while(). В связи с тем, что устройство достаточно простое, опрос состояний и анимация изображений реализованы непосредственно в бесконечном цикле. Развертка изображений по кадрам происходит в обработчике прерываний Timer2 при переполнении. Частота прерываний около 480 Гц, что дает частоту сканирования столбцов матрицы 480/8 = 60 Гц. Это минимальная частота мерцаний светодиодов, незаметная для человеческого глаза.
МК тактируется от внутреннего RC-генератора с частотой 8 МГц. На самом деле, такая высокая частота не нужна. Но в выбранном МК Timer2 имеет предделитель тактовой частоты на 64, что с учетом разрядности таймера (256 отсчетов) дает «удобную» частоту срабатываний, равную 8000000/64/256 = 488 Гц.
Изображения, формируемые на матрице, задаются табличным способом в виде двоичных слов (см. пример Листинга 1), но есть некоторые отличия массивов стрелки и крестика. Поскольку анимированное движение стрелки можно организовать простым сдвигом по таблице строк (Листинг 1) с единичным шагом и последующим зацикливанием, требуется массив типа char всего из 8 + 3 элементов, дающий целых 11 кадров (3 пустых строки нужны для разрыва между бегущими стрелками). Но в случае с крестиком потребуется массив минимум из 40 слов, хранящий 5 и более кадров из 8 строк. То есть, шаг между кадрами равен восьми, а в остальном отличий нет.
Листинг 1. Массив строк для отрисовки стрелки
char drawing_matrix0[0x0B] =
{
0b00011000,
0b00111100,
0b01111110,
0b11111111,
0b00011000,
0b00011000,
0b00011000,
0b00011000,
0b00000000,
0b00000000,
0b00000000
};
Обработчик прерываний таймера, в зависимости от текущего состояния, вызывает одну из функций отрисовки изображений show_cross() или show_arrow() (см. Листинг 2). Задача функций одинаковая – вычислить индекс строки в соответствующем массиве, выбрать слово по этому адресу, вывести его на сдвиговый регистр и «зажечь» нужный столбец матрицы. После этого инкрементируется номер текущего столбца матрицы, который будет использован в функции при следующем обращении.
Листинг 2. Обработчик прерываний таймера Timer2
ISR(TIMER2_OVF_vect) { switch(global_state_flag { case(0x00): { show_cross(); break; } case(0x01): { show_arrow(); break; } } } void show_arrow(void) { char index0 = column_number + shift_index; if(index0 >= drawing_matrix0_size) index0 = index0 - drawing_matrix0_size; PORTB = 0x00; //Все каналы ULN2803 отключены hc595_light_diode(drawing_matrix0[index0]); //Выводим строку PORTB |= _BV(column_number); //Зажигаем столбец column_number++; //Наращиваем текущий номер столбца if(column_number >= max_LEDs_column) column_number = 0x00; }
Анимация изображений происходит в главном цикле вызовом функций animate_cross() или animate_arrow(), в зависимости от текущего состояния (см. исходный код). Задача этих функций тоже одинаковая – выдержать установленный интервал времени между кадрами, а затем перейти к следующему кадру изображения. При этом используется стандартная библиотечная функция задержки _delay_ms().
Ниже приведены ссылки на исходный код программы управления индикатором, схема в формате Proteus 7.10, а также «упрощенная» схема, пригодная для моделирования. Упрощенная схема удобна для отладки программы, т.к. использование аналоговых моделей светодиодов (их в матрице 128) требует больших вычислительных мощностей при моделировании в реальном времени. Стандартный подход в ISIS Proteus для схем индикации – использование цифровых моделей светодиодов, что «облегчает» работу интерактивного симулятора (но делает невозможным одновременное использование аналоговых ключей).
Программа легко переносится на любой контроллер серии AVR, и может быть изменена для анимации произвольных изображений, заданных в простой и понятной табличной форме. Некоторые функции в программе почти «зеркальны», что расточительно по отношению к памяти МК. На самом деле даже этот небольшой программный код можно сократить, используя для отрисовки одну общую функцию, указатели на массивы и еще один таймер для выдержек времени. Но поскольку используется двухцветная светодиодная матрица, для наглядности исходный код оставлен «как есть» и снабжен подробными комментариями. После компиляции программа занимает 800 байт, что оставляет в Atmega48p незанятыми больше 3 кБ Flash памяти. При симуляции упрощенной схемы в Proteus следует указать путь к файлу *.hex прошивки МК, находящемуся в папке с программой.
Замечания
-
В схеме можно использовать микросхемы в любых корпусах и транзисторы любых подходящих типов. Планарные элементы стоят обычно дешевле и занимают меньше места на плате. Единственное, на что нужно обратить внимание – это тип резисторов R9 – R16. В зависимости от напряжения ИП и тока светодиодов, на них может рассеиваться большая мощность.
-
Выбор такой элементной базы обусловлен широкой доступностью и желанием минимизировать размеры печатной платы. Для снижения стоимости пришлось отказаться от интегральных сборок верхних ключей, в качестве которых можно было бы использовать микросхемы UDN2981, TD62783, или аналогичные. Но они стоят в несколько раз дороже сборок Дарлингтона и не всегда доступны. По тем же причинам выбран распространенный микроконтроллер с явно недостаточным количеством выводов. Но это легко компенсируется применением в качестве расширителя портов микросхемы жесткой логики 74HC595.
-
Вследствие использования динамической индикации со скважностью 8:1, яркость свечения светодиодов (и матрицы в целом) не будет соответствовать справочным данным. Для указанных выше матриц при токе 20 мА сила света отдельного светодиода равна 8 – 15 мКд. Следовательно, нужно увеличивать ток через светодиоды, не превышая допустимое импульсное значение для выбранной матрицы (100 – 160 мА в течение 100 – 150 мкс). Подбором резисторов R9 – R16 добиваются, чтобы ток отдельного светодиода в импульсе не превышал этого значения, а период развертки соответствовал допустимой длительности импульса. Но можно отказаться от использования малоэффективной свтодиодной матрицы, набрав ее вручную распайкой 128 сверхярких светодиодов. Поэтому для удобства разводки печатной платы на принципиальной схеме матрица собрана на дискретных светодиодах. Размерность матрицы также можно увеличить, используя МК с большим количеством выводов или дополнительные расширители портов 74HC595.
-
Следует упомянуть микросхемы многоканальных токовых драйверов, которые можно использовать в схеме. Это могут быть MBI5026, STP16CP05, или аналогичные приборы. Ввиду того, что в схеме присутствует родственное им по интерфейсу управления устройство – регистр с последовательной загрузкой, – можно легко переписать исходный код и, соответственно, изменить схему по желанию. Но все же, такие драйверы «заточены» для устройств со статической индикацией.
-
В зависимости от цвета свечения светодиода, падение напряжения на нем может быть от 1.5 В до 3 В. Но выбор ИП также зависит от рабочего напряжения МК. В схеме применен стандартный стабилизатор 5 В, падение напряжения на котором составляет 1 – 2 В. Это означает, что ИП нужно выбирать с запасом не только по току, но и по напряжению. В данном случае подойдет ИП с напряжением 8 В и выше.
-
Кроме упомянутых приложений индикатор может использоваться в системах визуального оповещения при эвакуации, или автономно, как рекламное средство.
- На Рисунке 7 показан работающий макет индикатора, собранный по схеме на Рисунке 5.
|
|
Рисунок 7. | Макет индикатора прохода на двухцветной LED матрице |
Ссылки
1. Среда разработки Atmel AVR Studio 4.18 на сайте производителя.
2. GCC компилятор WinAVR.
3. Ю.А. Шпак. Программирование на языке С для AVR и PIC микроконтроллеров - посмотреть.
Загрузки
Исходный код программы микроконтроллера на Си (AVR Studio + WinAVR) – скачать.
Принципиальная схема в программе Proteus 7.10 – скачать.
«Упрощенная» принципиальная схема для моделирования в Proteus 7.10 – скачать.