3d led cube схемы pic16f877

Обновлено: 03.07.2024

В некоторых старых лабораторных блоках питания, других приборах, применялись спаренные стрелочные индикаторы. Они представляли собой общий корпус, в котором расположены две магнитодинамические индикаторные системы. В случае с блоком питания, -одна для индикации напряжения, вторая для индикации тока.

Практически это было два одинаковых прибора, но с разными шкалами. А необходимое соответствие показаний измеряемым величинам задавалось внешними деталями, - резистивным делителем для вольтметра и шунтом для амперметра.

Детали и печатная плата

Устройство управления кубом собрано на печатной плате из фольгированного с одной стороны стеклотекстолита толщиной 1,5 мм. Чертёж печатных проводников платы - на рис. 3, а расположение элементов на обеих её сторонах - на рис. 4.

Печатная плата для светодиодного куба 5x5x5

Рис. 3. Печатная плата для светодиодного куба 5x5x5.

Печатная плата для светодиодного куба 5x5x5 - расположение деталей

Рис. 4. Печатная плата для светодиодного куба 5x5x5 - расположение деталей.

Плата рассчитана на установку резисторов и керамических конденсаторов типоразмера 0805 для поверхностного монтажа. Оксидные конденсаторы С2 и С4 - обычные с проволочными выводами.

Интегральный стабилизатор LM7805 снабжён пластинчатым теплоотводом с площадью охлаждающей поверхности 6 см2.

Для микроконтроллера предусмотрена панель, в которую его нужно вставлять уже запрограммированным. Плата помещена в пластмассовый корпус Z28 размерами 119×143,3×37,4 мм. Куб из светодиодов синего цвета свечения установлен на верхней панели корпуса, а зелёный светодиод HL1, кнопка SB1 и разъём питания - на его лицевой панели (рис. 5).

Рис. 5. Фото готового светодиодного куба 5x5x5, собранного своими руками.

Для сборки куба нужно подготовить шаблон из отрезка доски, в котором по сетке с шагом 25×25 мм просверлены 25 отверстий диаметром 5 мм (по диаметру корпуса светодиода).

Нужны также две деревянные распорки высотой 24 мм, длиной около 140 мм и шириной около 15 мм. Вставьте 25 светодиодов в отверстия шаблона, отогните катодный вывод каждого из них в сторону соседнего в ряду и спаяйте эти выводы между собой.

Ряды катодных выводов соедините поперечными отрезками жёсткого неизолированного провода. Получившийся квадрат - один уровень куба.

Нужно изготовить пять таких квадратов. В верхней панели корпуса устройства просверлите с шагом 25×25 мм сетку отверстий диаметром 1… 1,5 мм и пропустите в них анодные выводы светодиодов квадрата, который будет нижним уровнем куба. Затем положите деревянные распорки между крайними рядами светодиодов.

Они нужны, чтобы строго выдержать расстояние 25 мм между уровнями. Уложите на них второй квадрат и припаяйте анодный вывод каждого образующего его светодиода к анодному выводу находящегося под ним светодиода предыдущего уровня.

Выводы необходимо предварительно изогнуть соответствующим образом, чтобы светодиоды нового уровня находились над соответствующими светодиодами предыдущего с минимальным смещением.

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

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

К соединённым катодам светодиодов каждого уровня припаяйте отрезки тонкого гибкого изолированного провода и также пропустите их внутрь корпуса через просверленные в его верхней панели отверстия.

Остаётся присоединить провода от катодных и анодных выводов светодиодов к контактным площадкам печатной платы в соответствии со схемой.

Программатор микроконтроллеров PIC

В настоящее время появилось много принципиальных схем с использованием различных микроконтроллеров, в том числе и микроконтроллеров PIC фирмы MicroChip. Это позволило получить достаточно функциональные устройства, несмотря на их простоту. Но работа микроконтроллера невозможна без программы управления, которую необходимо записать.… Продолжить чтение →

Схема сборки светодиодного куба 5x5x5 своими руками, ее основа - микроконтроллер PIC16F877A, куб трехмерный, содержит 5 уровней по 25 светодиодов.

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

Светодиодный куб 5x5x5 на микроконтроллере PIC16F877A-I/P


В радиолюбительской литературе и Интернете можно найти немало различных описаний светодиодных кубов. Автор этой статьи предлагает ещё один несложный по схеме вариант. В нём реализованы десять сменяющихся циклически придуманных автором световых эффектов плюс поздравление с Новым годом, адресованное любимой женщине.… Продолжить чтение →

Принципиальная схема

На рисунке 1 показана схема аналогичной «измерительной головки», но на основе микроконтроллера PIC16F877A и двухстрочного жидкокристаллического индикатора (две строки по 8 символов). В верхней строке он показывает напряжение, а в нижней ток. Индикация напряжения до 25V, а тока до 2.5А. Но это только шкала.

Реально напряжение на вход нельзя подавать более 1,6V. То есть, эта величина есть максимальное значение, при котором прибор показывает 25V. Данная величина задана напряжением на выводе 5 с помощью светодиода HL1 который здесь работает как стабистор.

Изменяя это напряжение (но не более 5V) можно изменять величину входного напряжения, при котором прибор показывает максимальное значение. Поэтому, для работы в реальном источнике питания требуются внешние элементы, - резистивный делитель напряжения и шунт.

Принципиальная схема вольтметра и амперметра на микроконтроллере PIC16F877A

Рис.1. Принципиальная схема вольтметра и амперметра на микроконтроллере PIC16F877A.

Тактируется микроконтроллер от внешнего кварцевого резонатора 20 MHz. Подбором сопротивления R2 регулируют контрастность дисплея.

Светодиодный куб 5x5x5 на микроконтроллере PIC16F877A-I/P


В радиолюбительской литературе и Интернете можно найти немало различных описаний светодиодных кубов. Автор этой статьи предлагает ещё один несложный по схеме вариант. В нём реализованы десять сменяющихся циклически придуманных автором световых эффектов плюс поздравление с Новым годом, адресованное любимой женщине.… Продолжить чтение →

Принципиальная схема

На рисунке 1 показана схема аналогичной «измерительной головки», но на основе микроконтроллера PIC16F877A и двухстрочного жидкокристаллического индикатора (две строки по 8 символов). В верхней строке он показывает напряжение, а в нижней ток. Индикация напряжения до 25V, а тока до 2.5А. Но это только шкала.

Реально напряжение на вход нельзя подавать более 1,6V. То есть, эта величина есть максимальное значение, при котором прибор показывает 25V. Данная величина задана напряжением на выводе 5 с помощью светодиода HL1 который здесь работает как стабистор.

Изменяя это напряжение (но не более 5V) можно изменять величину входного напряжения, при котором прибор показывает максимальное значение. Поэтому, для работы в реальном источнике питания требуются внешние элементы, - резистивный делитель напряжения и шунт.

Принципиальная схема вольтметра и амперметра на микроконтроллере PIC16F877A

Рис.1. Принципиальная схема вольтметра и амперметра на микроконтроллере PIC16F877A.

Тактируется микроконтроллер от внешнего кварцевого резонатора 20 MHz. Подбором сопротивления R2 регулируют контрастность дисплея.

Принципиальная схема

Устройство, управляющее светодиодным кубом, собрано на микроконтроллере PIC16F877A-I/P по схеме, изображённой на рис. 1.

Принципиальная схема светодиодного куба 5x5x5 для сборки своими руками

Рис. 1. Принципиальная схема светодиодного куба 5x5x5 для сборки своими руками.

Питают его и куб от любого источника постоянного напряжения 9…16 В. Ток потребления - не более 200 мА. Напряжение +5 В для питания микроконтроллера DD1 получено с помощью интегрального стабилизатора напряжения DA1, конденсаторы С2, С4, С5 - блокировочные.

Работа микроконтроллера синхронизирована внутренним тактовым генератором, частота которого стабилизирована кварцевым резонатором ZQ1 на 4 МГц.

Куб состоит из пяти горизонтальных «уровней”. В каждом из них по 25 светодиодов, размещённых квадратом 5×5. Схема пятого (верхнего) уровня показана на рис. 2.

Рис. 2. Схема пятого уровня для светодиодного куба 5x5x5.

Остальные построены по таким же схемам и различаются только позиционными номерами светодиодов. Соединённые вместе катоды светодиодов каждого уровня подключены к коллекторам транзисторов VT1-VT5.

Схема ключа на транзисторе VT5 отличается от остальных, поскольку выход RA4 микроконтроллера, который управляет этим ключом, построен по схеме с открытым стоком.

Аноды светодиодов, занимающих одинаковые позиции на каждом уровне, соединены вместе и подключены к выводам портов В, С, D и выводу RA3 микроконтроллера (всего 25 выводов) через ограничивающие ток резисторы R9-R33. Светодиод HL1 подключён к микроконтроллеру через ограничительный резистор R4.

Резистор R1 поддерживает на входе RA0 микроконтроллера высокий логический уровень напряжения, когда кнопка SB1 не нажата. Нажатием на эту кнопку прекращают смену световых эффектов, о чём сигнализирует включение светодиода HL1. Все светодиоды куба при этом выключаются.

С повторным нажатием на кнопку гаснет светодиод HL1, а чередование световых эффектов возобновляется. Программа микроконтроллера написана на языке ассемблера.

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

Сначала по команде микроконтроллера открывается транзистор VT5, соединяя с общим проводом катоды светодиодов HL102-HL126 первого (самого нижнего) уровня куба. В соответствии с кодом, установленным в этот момент на выходах RA3, RB0- RB7, RC0-RC7, RD0-RD7, включаются те светодиоды этого уровня, которые нужны для формирования приходящейся на него части кадра изображения.

Спустя 2 мс транзистор VT5 закрывается, устанавливается код для светодиодов второго уровня и открывается транзистор VT4. За 10 мс изображение кадра формируется полностью, причём за счёт инерционности зрения чередование включённых уровней остаётся незаметным.

Далее аналогично создаётся изображение следующего кадра с новым положением геометрической фигуры и так далее до завершения эффекта. Длительность одного светового эффекта - 4,3 с.

Все десять записанных в памяти микроконтроллера эффектов и текстовое поздравление с Новым годом воспроизводятся по очереди. Поскольку программная память микроконтроллера полностью не заполнена, число световых эффектов можно увеличить, доведя его до 30-40.

Прошивка и подключение

Прошивка для микроконтролера

Рис. 2. Прошивка для микроконтролера.

На рисунке 3 показан вариант использования данного прибора в лабораторном блоке питания. При условии, что напряжение на светодиоде равно 1,6V сопротивления будут такими: Rд1 = 1кОм, Rд\2 =15 кОм, Rш1 = 0,63 Ом.

Схема включения вольт-ампрметра к источнику питания

Рис. 3. Схема включения вольт-ампрметра к источнику питания.

Прошивка и подключение

Прошивка для микроконтролера

Рис. 2. Прошивка для микроконтролера.

На рисунке 3 показан вариант использования данного прибора в лабораторном блоке питания. При условии, что напряжение на светодиоде равно 1,6V сопротивления будут такими: Rд1 = 1кОм, Rд\2 =15 кОм, Rш1 = 0,63 Ом.

Схема включения вольт-ампрметра к источнику питания

Рис. 3. Схема включения вольт-ампрметра к источнику питания.

Налаживание

Налаживание заключается в подгонке результатов измерения по действительные величины напряжения и ток более точным подбором сопротивления резисторов делителя напряжения (Rд) и шунта (Rш).

Примечание от редакции журнала Радио

В связи с тем что автор конструкции утверждал: "А у меня всё работает", редакция решила установить истину, собрав куб и проверив его в действии. Скажем сразу, уровень 1 светодиодов не заработал. Нужно было искать причину.

Разгадка нашлась в п. 15.1 документа PIC16F87XA 28/40/44-Pin Enhanced Flash Microcontrollers. (ww1.microchip.com/downloads/en/DeviceDoc/39582C.pdf), где сказано: "Любая инструкция, операнд которой - регистр, выполняется в режиме "чтение-модификация-запись" (англ. Read-Modify-Write, R-M-W).

Регистр читается, прочитанные данные модифицируются в соответствии с кодом операции, а результат записывается туда, куда указано в инструкции. Чтение регистра происходит даже в том случае, если он же служит местом записи результата". Обычно этот приём работает успешно, но иногда он создаёт побочные эффекты.

Один из них возникает при выводе информации на линию порта RA4. Выход этой линии выполнен, как известно, по схеме с "открытым стоком".

Имеющийся во всех других выходных буферах портов (их схемы приведены в документе) "верхний" полевой транзистор, открывающийся при выводе лог. 1, в буфере выхода RA4 отсутствует.

Чтобы получить на этом выходе при закрытом "нижнем" транзисторе высокий логический уровень, необходимо соединить вывод 6 микроконтроллера с плюсом питания через нагрузочный резистор, что и сделано автором (резистор R3 согласно схеме на рис. 1 в статье).

Но к этому же выводу подключена база транзистора VT5, управляющего уровнем 1 светодиодов. При закрывании "нижнего" транзистора буфера транзистор VT5 открывается, посколькуток, текущий через резистор R3, втекает в его базу.

Но напряжение на базе открывшегося транзистора и, следовательно, на выводе 6 микроконтроллера не может подняться выше приблизительно 0,6 В. Но почему же не светятся светодиоды? Потому что вслед за записывающей лог 1 в четвёртый разряд порта A инструкцией BSF PORTA, 4

в программе следуют инструкции, обращающиеся к другим разрядам этого порта (таких мест несколько). Например, BCF PORTA, 5.

Эта инструкция изменяет состояние RA5, она не должна затрагивать RA4. Так бы и было, но выполняя её в режиме "чтение-модификация-запись", процессор микроконтроллера читает состояние всех выводов порта A и в четвёртом разряде считанного кода получает лог. 0 (ведь напряжение на выводе RA4 всего 0,6 В).

После этого процессор согласно инструкции устанавливает ноль в пятом разряде кода, а затем записывает модифицированный код в регистр PORTA, обнуляя вместе с предписанным пятым и четвёртый разряд. На экране осциллографа это выглядит, как показано на рис. 1. Для сравнения на рис. 2 показаны осциллограммы в тех же точках при отключённой от вывода 6 микроконтроллера базе транзистора VT5.

Диаграмма на экране осциллографа

Рис. 1. Диаграмма на экране осциллографа.

Осциллограмма при отключённой от вывода 6 микроконтроллера базе транзистора VT5

Рис. 2. Осциллограмма при отключённой от вывода 6 микроконтроллера базе транзистора VT5.

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

Другой выход предлагали участники форума - перенести управление транзистором VT5 на любой свободный выход микроконтроллера, построенный по обычной схеме с тремя состояниями. Базу транзистора нужно подключить к нему по той же схеме, что и базы других четырёх транзисторов.

И, конечно, заменить в программе все упоминания порта RA4 на упоминания выбранного порта. Это несложно, но недоступно, к сожалению, не владеющим программированием.

Однако существуют способы устранить недостаток, не требующие вмешательства в программу. Первый из них - изменить схему базовой цепи транзистора согласно рис. 3.

Для этого придётся разрезать печатный проводник, соединяющий вывод 6 микроконтроллера с базой транзистора, и впаять в образовавшийся зазор резистор R34, а также уменьшить сопротивление резистора R3.

Сумма сопротивлений резисторов R3 и R34 должна быть равной 2 кОм, а их соотношение таким, чтобы напряжение высокого логического уровня на выводе 6 микроконтроллера превысило 2 В. Однако чрезмерно уменьшать сопротивление резистора R3 не следует. Это может привести к перегрузке выхода микроконтроллера по току.

Второй способ - заменить биполярный транзистор VT5 полевым, например 2N7002, подключив его по схеме, показанной на рис. 4, ничего не меняя ни в программе, ни в конфигурации проводников печатной платы.

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

Схема изменения базовой цепи транзистора

Рис. 3. Схема изменения базовой цепи транзистора.

Схема замены биполярного транзистора VT5 полевым

Рис. 4. Схема замены биполярного транзистора VT5 полевым.

В этом случае нужно аналогично описанному выше вставить резистор в разрыв печатного проводника, соединяющего вывод 6 микроконтроллера и затвор полевого транзистора.

Сопротивление этого резистора может быть около 10 кОм, а резистор R3 остаётся прежним. Вызванная этим небольшая задержка открывания и закрывания полевого транзистора в рассматриваемом случае значения не имеет, поскольку длительность его открытого состояния намного больше (около 2 мс).

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

image

Подготовка


Начнем с куба. Мы не стали придумывать «велосипед» и решили поискать готовые решения. За основу была взята статья норвежского автора, хотя были внесены некоторые изменения, которые, как мне кажется, пошли на пользу.

Создание собственного LED куба

Обсудив некоторые моменты, было решено делать куб размером 8х8х8. Нам удалось купить оптом 1000 светодиодов по хорошей цене, как раз то что нужно, правда это были не совсем подходящие светодиоды. Визуально лучше бы смотрелись светодиоды синего цвета с матовой линзой, свечение получается не такое яркое и более равномерное. Есть еще одна проблема прозрачных светодиодов, нижний слой подсвечивает верхние. Однако, несмотря на все это, светодиоды должны быть достаточно яркими, чтобы изображение получилась четкой. Для больше прозрачности куба лучше взять маленькие светодиоды, например, 3 мм. Еще один пункт при выборе светодиодов — длинна ног. Каркас куба будем делать из ног светодиодов, поэтому они не должны быть меньше, чем размер клетки.

Еще один важный пункт при построении куба – это его размер. Мы делаем каркас с помощью ног светодиода, хотя есть способы, где используются металлические стержни или проволока. Длинна катодов наших светодиодов оказалась примерно 25 мм, поэтому размер клетки мы выбрали 20 мм, а остальное использовать для пайки, решили, что так куб будет прочнее. Это как раз небольшое отличие от конструкции автора статьи, приведенной выше.

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

image

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

Прежде чем начать паять куб советую все подготовить. Из личного опыта могу сказать, что гораздо удобнее это делать вдвоем, т.к. рук реально не хватает, один человек прикладывает катоды, а второй подает припой и паяет. Делать это нужно быстро, светодиоды маленькие и боятся перегрева. Также в разных мануалах говорят проверить каждый светодиод перед пайкой. Я не вижу в этом смысла, потратите много времени на по сути бессмысленную операцию. Мы покупали новые светодиоды и все они оказались рабочими. А вот когда вы спаяли слой, там уже стоит хорошо все проверить потому, что выпаивать светодиод из центра неприятное занятие, проверено на личном опыте.

image

image

Затем загибаем катоды так, чтобы они накладывались друг на друга. Когда все будет подготовлено можно начинать паять, но стоит помнить о возможном перегреве, и, если пайка не удалась, не стоит торопиться перепаивать, лучше дайте светодиоду остыть.

Спаяв все светодиоды, мы получим 8 полосок по 8 светодиодов. Чтобы это все превратить в один слой, мы использовали обычную алюминиевую проволоку, которую предварительно выпрямили. Решили использовать всего 2 таких «стержня», чтобы не усложнять конструкцию, к слову она и так получилась достаточно прочной.

Спаяв последний слой не нужно его доставать потому, что потом придется вставлять его обратно. Теперь имея все 8 слоев нам нужно их как-то объединить в один куб. Чтобы куб был более-менее ровным на пришлось отогнуть аноды как показано на рисунке, теперь он огибает светодиод, и может быть аккуратно припаян.

image

image

Сделав все эти действия, вы получите собранный вами LED куб и несколько обожженных пальцев, но это уже зависит от вашей аккуратности.

image

image

Разработка схемы

Для воплощения нашей задумки нам нужен был какой-то микроконтроллер. Мы решили остановиться на микроконтроллере Arduino Leonardo. Мы не хотели заморачиваться насчет программаторов и нужного ПО, так же нам не нужен мощный процессор для наших задач. Имея готовое устройство, мы поняли, что можно было использовать и Nano, но это не столь критично. Для управления кубом мы решили использовать телефон, подключенный к Arduino по Bluetooth, в нашем случае используется HC-05, но вы можете использовать любой другой.

image

А вот что действительно важно так это количество выводов микроконтроллера, т. к. мы получили 64 анодных и 8 катодных вывода, но о их подключении позже. Мы решили расширить порты IO с помощью сдвиговых регистров, в нашем случае это регистры фирмы TI 74HC595 в DIP корпусе, чтобы припаять сокеты к плате, а уже в них вставлять сами микросхемы. Подробнее об этих регистрах вы можете почитать в datasheet, скажу лишь что нами использовалось все кроме сигнала сброса регистра, мы подали на него единицу, т. к. он инверсный, и вход output enable мы завели на землю, он тоже инверсный и мы хотели всегда получать данные с регистров. Также можно было использовать и последовательные регистры, но тогда пришлось бы поставить дешифратор для выбора в какой именно регистр записывать информацию.

image

Для того, чтобы замыкать цепь на землю, выбирая уровень, который хотим зажечь, нам нужны транзисторные ключи, ну или просто транзисторы. Мы использовали обычные маломощные биполярные транзисторы N-P-N типа, соединенные по 2 параллельно. Не уверен, что в этом есть смысл, но так вроде как ток протекает лучше. База через подтягивающий резистор номиналом 100 Ом заведена на микроконтроллер, который и будет открывать наши транзисторы. На коллектор заведены слои куба, а эмиттеры соединены с землей.

image

image

Сборка куба воедино

Для питания куба не смогли найти ничего лучше, чем блок питания от планшета, параметры которого 5 В и 2 А. Может этого и мало, но куб светится достаточно ярко. Чтобы не сжечь светодиоды все анодные выводы соединены с регистрами через токоограничивающий резистор. По моим расчетам они должны были быть примерно по 40 Ом, но у меня таких не оказалось, поэтому использовал по 100 ОМ.

Разместили мы все это на 2 небольших печатных платах. Специально травить ничего не стали ввиду отсутствия практики, просто соединили все обычными проводниками. Регистры с анодами куба соединили с помощью шлейфов, которые мы достали из старого компьютера. Так проще ориентироваться в проводах.

image

Собрать прототип решили на том макете, который использовали для пайки.

image

Отладив все и исправив сделанные ошибки, мы сделали корпус из имеющегося у нас ламината, он оказался хорош тем, что его не пришлось красить. Вот конечный результат:

image

Да будет свет!

Куб есть, осталось заставить его светиться. Далее будут описаны различные моды (режимы) работы куба, для переключения которых использовался bluetooth + Android. Приложение для телефона писалось с использованием Cordova. Код приложения здесь описываться не будет, но ссылка на репозиторий представлена в заключении.

Алгоритм работы с кубом

Ввиду того, что мы не имеем доступ сразу ко всем светодиодам, мы не можем их зажечь все сразу. Вместо этого, нам надо зажигать их послойно.

Алгоритм таков:
  1. Текущий слой равен 0.
  2. Заносим в регистры маску для текущего слоя
  3. Закрываем транзистор для предыдущего слоя. Если текущий слой нулевой — то предыдущий для него — 7й слой
  4. Защелкиваем значения в регистры. Значение появляются на выходах регистров
  5. Открываем транзистор для текущего слоя. Ура, один слой светится!
  6. Текущий слой ++. goto: 2
Написание модов

Данные моды появлялись не в том порядке, в каком они будут представлены здесь, так что прошу не наказывать за их нумерацию в коде. Начнём с самого простого: зажечь все светодиоды.

“Залипательный” мод

Идея: горят всего два слоя нулевой и седьмой, причём они являются инверсными по отношению друг к другу (светодиод в позиции Х горит только на одном из слоёв). Рандомно выбирается позиция (почему-то все пытаются найти алгоритм выбора позиции), и светодиод в данной позиции “переползает” на верхний слой, если он светился на нижнем слое, и соответственно на нижний, если светился на верхнем.

Как это выглядит в жизни:

“Ещё один залипательный мод”

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

Куб внутри куба

Идея: зажигать внутри куба светодиоды ввиде граней куба размерами от 1 до 8 светодиодов и обратно.

Как это выглядит:

И наконец змейка

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

В случае двумерной реализации данной игры никаких вопросов с управлением не возникает: четыре кнопки и всё очевидно. В случае трёхмерной реализации возникает несколько вариантов управления:

1. 6 кнопок. При таком варианте кнопке соответствует свое направление движения: для кнопок вверх и вниз всё очевидно, а остальные кнопки можно “привязать” к сторонам света, при нажатии кнопки “влево” вектор движения всегда меняется “на запад” и т.д. При таком варианте возникают ситуации, когда змейка движется “на восток” и и мы нажимает “на запад”. Т.к. змейка не может развернуться на 180 градусов, приходится такие случаи обрабатывать отдельно.

2. 4 кнопки (Up Down Left Right). Действия данных кнопок аналогичны действиям в двумерной реализации, за исключением того, что все изменения берутся относительно текущего направления вектора движения. Поясню на примере: при движении в горизонтальной плоскости, нажимая кнопку “Up”, мы переходим в вертикальную плоскость. При движении в вертикальной плоскости нажимая “Up”, мы переходим к движению в горизонтальной плоскости против направления оси Х, для “Down” — по направлению оси Х и т.д.

Безусловно, оба варианта имеют право на существование (было бы интересно узнать другие варианты управления). Для нашего проекта мы выбрали второй.

Примечание от редакции журнала Радио

В связи с тем что автор конструкции утверждал: "А у меня всё работает", редакция решила установить истину, собрав куб и проверив его в действии. Скажем сразу, уровень 1 светодиодов не заработал. Нужно было искать причину.

Разгадка нашлась в п. 15.1 документа PIC16F87XA 28/40/44-Pin Enhanced Flash Microcontrollers. (ww1.microchip.com/downloads/en/DeviceDoc/39582C.pdf), где сказано: "Любая инструкция, операнд которой - регистр, выполняется в режиме "чтение-модификация-запись" (англ. Read-Modify-Write, R-M-W).

Регистр читается, прочитанные данные модифицируются в соответствии с кодом операции, а результат записывается туда, куда указано в инструкции. Чтение регистра происходит даже в том случае, если он же служит местом записи результата". Обычно этот приём работает успешно, но иногда он создаёт побочные эффекты.

Один из них возникает при выводе информации на линию порта RA4. Выход этой линии выполнен, как известно, по схеме с "открытым стоком".

Имеющийся во всех других выходных буферах портов (их схемы приведены в документе) "верхний" полевой транзистор, открывающийся при выводе лог. 1, в буфере выхода RA4 отсутствует.

Чтобы получить на этом выходе при закрытом "нижнем" транзисторе высокий логический уровень, необходимо соединить вывод 6 микроконтроллера с плюсом питания через нагрузочный резистор, что и сделано автором (резистор R3 согласно схеме на рис. 1 в статье).

Но к этому же выводу подключена база транзистора VT5, управляющего уровнем 1 светодиодов. При закрывании "нижнего" транзистора буфера транзистор VT5 открывается, посколькуток, текущий через резистор R3, втекает в его базу.

Но напряжение на базе открывшегося транзистора и, следовательно, на выводе 6 микроконтроллера не может подняться выше приблизительно 0,6 В. Но почему же не светятся светодиоды? Потому что вслед за записывающей лог 1 в четвёртый разряд порта A инструкцией BSF PORTA, 4

в программе следуют инструкции, обращающиеся к другим разрядам этого порта (таких мест несколько). Например, BCF PORTA, 5.

Эта инструкция изменяет состояние RA5, она не должна затрагивать RA4. Так бы и было, но выполняя её в режиме "чтение-модификация-запись", процессор микроконтроллера читает состояние всех выводов порта A и в четвёртом разряде считанного кода получает лог. 0 (ведь напряжение на выводе RA4 всего 0,6 В).

После этого процессор согласно инструкции устанавливает ноль в пятом разряде кода, а затем записывает модифицированный код в регистр PORTA, обнуляя вместе с предписанным пятым и четвёртый разряд. На экране осциллографа это выглядит, как показано на рис. 1. Для сравнения на рис. 2 показаны осциллограммы в тех же точках при отключённой от вывода 6 микроконтроллера базе транзистора VT5.

Диаграмма на экране осциллографа

Рис. 1. Диаграмма на экране осциллографа.

Осциллограмма при отключённой от вывода 6 микроконтроллера базе транзистора VT5

Рис. 2. Осциллограмма при отключённой от вывода 6 микроконтроллера базе транзистора VT5.

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

Другой выход предлагали участники форума - перенести управление транзистором VT5 на любой свободный выход микроконтроллера, построенный по обычной схеме с тремя состояниями. Базу транзистора нужно подключить к нему по той же схеме, что и базы других четырёх транзисторов.

И, конечно, заменить в программе все упоминания порта RA4 на упоминания выбранного порта. Это несложно, но недоступно, к сожалению, не владеющим программированием.

Однако существуют способы устранить недостаток, не требующие вмешательства в программу. Первый из них - изменить схему базовой цепи транзистора согласно рис. 3.

Для этого придётся разрезать печатный проводник, соединяющий вывод 6 микроконтроллера с базой транзистора, и впаять в образовавшийся зазор резистор R34, а также уменьшить сопротивление резистора R3.

Сумма сопротивлений резисторов R3 и R34 должна быть равной 2 кОм, а их соотношение таким, чтобы напряжение высокого логического уровня на выводе 6 микроконтроллера превысило 2 В. Однако чрезмерно уменьшать сопротивление резистора R3 не следует. Это может привести к перегрузке выхода микроконтроллера по току.

Второй способ - заменить биполярный транзистор VT5 полевым, например 2N7002, подключив его по схеме, показанной на рис. 4, ничего не меняя ни в программе, ни в конфигурации проводников печатной платы.

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

Схема изменения базовой цепи транзистора

Рис. 3. Схема изменения базовой цепи транзистора.

Схема замены биполярного транзистора VT5 полевым

Рис. 4. Схема замены биполярного транзистора VT5 полевым.

В этом случае нужно аналогично описанному выше вставить резистор в разрыв печатного проводника, соединяющего вывод 6 микроконтроллера и затвор полевого транзистора.

Сопротивление этого резистора может быть около 10 кОм, а резистор R3 остаётся прежним. Вызванная этим небольшая задержка открывания и закрывания полевого транзистора в рассматриваемом случае значения не имеет, поскольку длительность его открытого состояния намного больше (около 2 мс).

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

image

Подготовка


Начнем с куба. Мы не стали придумывать «велосипед» и решили поискать готовые решения. За основу была взята статья норвежского автора, хотя были внесены некоторые изменения, которые, как мне кажется, пошли на пользу.

Создание собственного LED куба

Обсудив некоторые моменты, было решено делать куб размером 8х8х8. Нам удалось купить оптом 1000 светодиодов по хорошей цене, как раз то что нужно, правда это были не совсем подходящие светодиоды. Визуально лучше бы смотрелись светодиоды синего цвета с матовой линзой, свечение получается не такое яркое и более равномерное. Есть еще одна проблема прозрачных светодиодов, нижний слой подсвечивает верхние. Однако, несмотря на все это, светодиоды должны быть достаточно яркими, чтобы изображение получилась четкой. Для больше прозрачности куба лучше взять маленькие светодиоды, например, 3 мм. Еще один пункт при выборе светодиодов — длинна ног. Каркас куба будем делать из ног светодиодов, поэтому они не должны быть меньше, чем размер клетки.

Еще один важный пункт при построении куба – это его размер. Мы делаем каркас с помощью ног светодиода, хотя есть способы, где используются металлические стержни или проволока. Длинна катодов наших светодиодов оказалась примерно 25 мм, поэтому размер клетки мы выбрали 20 мм, а остальное использовать для пайки, решили, что так куб будет прочнее. Это как раз небольшое отличие от конструкции автора статьи, приведенной выше.

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

image

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

Прежде чем начать паять куб советую все подготовить. Из личного опыта могу сказать, что гораздо удобнее это делать вдвоем, т.к. рук реально не хватает, один человек прикладывает катоды, а второй подает припой и паяет. Делать это нужно быстро, светодиоды маленькие и боятся перегрева. Также в разных мануалах говорят проверить каждый светодиод перед пайкой. Я не вижу в этом смысла, потратите много времени на по сути бессмысленную операцию. Мы покупали новые светодиоды и все они оказались рабочими. А вот когда вы спаяли слой, там уже стоит хорошо все проверить потому, что выпаивать светодиод из центра неприятное занятие, проверено на личном опыте.

image

image

Затем загибаем катоды так, чтобы они накладывались друг на друга. Когда все будет подготовлено можно начинать паять, но стоит помнить о возможном перегреве, и, если пайка не удалась, не стоит торопиться перепаивать, лучше дайте светодиоду остыть.

Спаяв все светодиоды, мы получим 8 полосок по 8 светодиодов. Чтобы это все превратить в один слой, мы использовали обычную алюминиевую проволоку, которую предварительно выпрямили. Решили использовать всего 2 таких «стержня», чтобы не усложнять конструкцию, к слову она и так получилась достаточно прочной.

Спаяв последний слой не нужно его доставать потому, что потом придется вставлять его обратно. Теперь имея все 8 слоев нам нужно их как-то объединить в один куб. Чтобы куб был более-менее ровным на пришлось отогнуть аноды как показано на рисунке, теперь он огибает светодиод, и может быть аккуратно припаян.

image

image

Сделав все эти действия, вы получите собранный вами LED куб и несколько обожженных пальцев, но это уже зависит от вашей аккуратности.

image

image

Разработка схемы

Для воплощения нашей задумки нам нужен был какой-то микроконтроллер. Мы решили остановиться на микроконтроллере Arduino Leonardo. Мы не хотели заморачиваться насчет программаторов и нужного ПО, так же нам не нужен мощный процессор для наших задач. Имея готовое устройство, мы поняли, что можно было использовать и Nano, но это не столь критично. Для управления кубом мы решили использовать телефон, подключенный к Arduino по Bluetooth, в нашем случае используется HC-05, но вы можете использовать любой другой.

image

А вот что действительно важно так это количество выводов микроконтроллера, т. к. мы получили 64 анодных и 8 катодных вывода, но о их подключении позже. Мы решили расширить порты IO с помощью сдвиговых регистров, в нашем случае это регистры фирмы TI 74HC595 в DIP корпусе, чтобы припаять сокеты к плате, а уже в них вставлять сами микросхемы. Подробнее об этих регистрах вы можете почитать в datasheet, скажу лишь что нами использовалось все кроме сигнала сброса регистра, мы подали на него единицу, т. к. он инверсный, и вход output enable мы завели на землю, он тоже инверсный и мы хотели всегда получать данные с регистров. Также можно было использовать и последовательные регистры, но тогда пришлось бы поставить дешифратор для выбора в какой именно регистр записывать информацию.

image

Для того, чтобы замыкать цепь на землю, выбирая уровень, который хотим зажечь, нам нужны транзисторные ключи, ну или просто транзисторы. Мы использовали обычные маломощные биполярные транзисторы N-P-N типа, соединенные по 2 параллельно. Не уверен, что в этом есть смысл, но так вроде как ток протекает лучше. База через подтягивающий резистор номиналом 100 Ом заведена на микроконтроллер, который и будет открывать наши транзисторы. На коллектор заведены слои куба, а эмиттеры соединены с землей.

image

image

Сборка куба воедино

Для питания куба не смогли найти ничего лучше, чем блок питания от планшета, параметры которого 5 В и 2 А. Может этого и мало, но куб светится достаточно ярко. Чтобы не сжечь светодиоды все анодные выводы соединены с регистрами через токоограничивающий резистор. По моим расчетам они должны были быть примерно по 40 Ом, но у меня таких не оказалось, поэтому использовал по 100 ОМ.

Разместили мы все это на 2 небольших печатных платах. Специально травить ничего не стали ввиду отсутствия практики, просто соединили все обычными проводниками. Регистры с анодами куба соединили с помощью шлейфов, которые мы достали из старого компьютера. Так проще ориентироваться в проводах.

image

Собрать прототип решили на том макете, который использовали для пайки.

image

Отладив все и исправив сделанные ошибки, мы сделали корпус из имеющегося у нас ламината, он оказался хорош тем, что его не пришлось красить. Вот конечный результат:

image

Да будет свет!

Куб есть, осталось заставить его светиться. Далее будут описаны различные моды (режимы) работы куба, для переключения которых использовался bluetooth + Android. Приложение для телефона писалось с использованием Cordova. Код приложения здесь описываться не будет, но ссылка на репозиторий представлена в заключении.

Алгоритм работы с кубом

Ввиду того, что мы не имеем доступ сразу ко всем светодиодам, мы не можем их зажечь все сразу. Вместо этого, нам надо зажигать их послойно.

Алгоритм таков:
  1. Текущий слой равен 0.
  2. Заносим в регистры маску для текущего слоя
  3. Закрываем транзистор для предыдущего слоя. Если текущий слой нулевой — то предыдущий для него — 7й слой
  4. Защелкиваем значения в регистры. Значение появляются на выходах регистров
  5. Открываем транзистор для текущего слоя. Ура, один слой светится!
  6. Текущий слой ++. goto: 2
Написание модов

Данные моды появлялись не в том порядке, в каком они будут представлены здесь, так что прошу не наказывать за их нумерацию в коде. Начнём с самого простого: зажечь все светодиоды.

“Залипательный” мод

Идея: горят всего два слоя нулевой и седьмой, причём они являются инверсными по отношению друг к другу (светодиод в позиции Х горит только на одном из слоёв). Рандомно выбирается позиция (почему-то все пытаются найти алгоритм выбора позиции), и светодиод в данной позиции “переползает” на верхний слой, если он светился на нижнем слое, и соответственно на нижний, если светился на верхнем.

Как это выглядит в жизни:

“Ещё один залипательный мод”

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

Куб внутри куба

Идея: зажигать внутри куба светодиоды ввиде граней куба размерами от 1 до 8 светодиодов и обратно.

Как это выглядит:

И наконец змейка

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

В случае двумерной реализации данной игры никаких вопросов с управлением не возникает: четыре кнопки и всё очевидно. В случае трёхмерной реализации возникает несколько вариантов управления:

1. 6 кнопок. При таком варианте кнопке соответствует свое направление движения: для кнопок вверх и вниз всё очевидно, а остальные кнопки можно “привязать” к сторонам света, при нажатии кнопки “влево” вектор движения всегда меняется “на запад” и т.д. При таком варианте возникают ситуации, когда змейка движется “на восток” и и мы нажимает “на запад”. Т.к. змейка не может развернуться на 180 градусов, приходится такие случаи обрабатывать отдельно.

2. 4 кнопки (Up Down Left Right). Действия данных кнопок аналогичны действиям в двумерной реализации, за исключением того, что все изменения берутся относительно текущего направления вектора движения. Поясню на примере: при движении в горизонтальной плоскости, нажимая кнопку “Up”, мы переходим в вертикальную плоскость. При движении в вертикальной плоскости нажимая “Up”, мы переходим к движению в горизонтальной плоскости против направления оси Х, для “Down” — по направлению оси Х и т.д.

Безусловно, оба варианта имеют право на существование (было бы интересно узнать другие варианты управления). Для нашего проекта мы выбрали второй.

В некоторых старых лабораторных блоках питания, других приборах, применялись спаренные стрелочные индикаторы. Они представляли собой общий корпус, в котором расположены две магнитодинамические индикаторные системы. В случае с блоком питания, -одна для индикации напряжения, вторая для индикации тока.

Практически это было два одинаковых прибора, но с разными шкалами. А необходимое соответствие показаний измеряемым величинам задавалось внешними деталями, - резистивным делителем для вольтметра и шунтом для амперметра.

Программатор микроконтроллеров PIC

В настоящее время появилось много принципиальных схем с использованием различных микроконтроллеров, в том числе и микроконтроллеров PIC фирмы MicroChip. Это позволило получить достаточно функциональные устройства, несмотря на их простоту. Но работа микроконтроллера невозможна без программы управления, которую необходимо записать.… Продолжить чтение →

Схема сборки светодиодного куба 5x5x5 своими руками, ее основа - микроконтроллер PIC16F877A, куб трехмерный, содержит 5 уровней по 25 светодиодов.

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

Детали и печатная плата

Устройство управления кубом собрано на печатной плате из фольгированного с одной стороны стеклотекстолита толщиной 1,5 мм. Чертёж печатных проводников платы - на рис. 3, а расположение элементов на обеих её сторонах - на рис. 4.

Печатная плата для светодиодного куба 5x5x5

Рис. 3. Печатная плата для светодиодного куба 5x5x5.

Печатная плата для светодиодного куба 5x5x5 - расположение деталей

Рис. 4. Печатная плата для светодиодного куба 5x5x5 - расположение деталей.

Плата рассчитана на установку резисторов и керамических конденсаторов типоразмера 0805 для поверхностного монтажа. Оксидные конденсаторы С2 и С4 - обычные с проволочными выводами.

Интегральный стабилизатор LM7805 снабжён пластинчатым теплоотводом с площадью охлаждающей поверхности 6 см2.

Для микроконтроллера предусмотрена панель, в которую его нужно вставлять уже запрограммированным. Плата помещена в пластмассовый корпус Z28 размерами 119×143,3×37,4 мм. Куб из светодиодов синего цвета свечения установлен на верхней панели корпуса, а зелёный светодиод HL1, кнопка SB1 и разъём питания - на его лицевой панели (рис. 5).

Рис. 5. Фото готового светодиодного куба 5x5x5, собранного своими руками.

Для сборки куба нужно подготовить шаблон из отрезка доски, в котором по сетке с шагом 25×25 мм просверлены 25 отверстий диаметром 5 мм (по диаметру корпуса светодиода).

Нужны также две деревянные распорки высотой 24 мм, длиной около 140 мм и шириной около 15 мм. Вставьте 25 светодиодов в отверстия шаблона, отогните катодный вывод каждого из них в сторону соседнего в ряду и спаяйте эти выводы между собой.

Ряды катодных выводов соедините поперечными отрезками жёсткого неизолированного провода. Получившийся квадрат - один уровень куба.

Нужно изготовить пять таких квадратов. В верхней панели корпуса устройства просверлите с шагом 25×25 мм сетку отверстий диаметром 1… 1,5 мм и пропустите в них анодные выводы светодиодов квадрата, который будет нижним уровнем куба. Затем положите деревянные распорки между крайними рядами светодиодов.

Они нужны, чтобы строго выдержать расстояние 25 мм между уровнями. Уложите на них второй квадрат и припаяйте анодный вывод каждого образующего его светодиода к анодному выводу находящегося под ним светодиода предыдущего уровня.

Выводы необходимо предварительно изогнуть соответствующим образом, чтобы светодиоды нового уровня находились над соответствующими светодиодами предыдущего с минимальным смещением.

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

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

К соединённым катодам светодиодов каждого уровня припаяйте отрезки тонкого гибкого изолированного провода и также пропустите их внутрь корпуса через просверленные в его верхней панели отверстия.

Остаётся присоединить провода от катодных и анодных выводов светодиодов к контактным площадкам печатной платы в соответствии со схемой.

Налаживание

Налаживание заключается в подгонке результатов измерения по действительные величины напряжения и ток более точным подбором сопротивления резисторов делителя напряжения (Rд) и шунта (Rш).

Принципиальная схема

Устройство, управляющее светодиодным кубом, собрано на микроконтроллере PIC16F877A-I/P по схеме, изображённой на рис. 1.

Принципиальная схема светодиодного куба 5x5x5 для сборки своими руками

Рис. 1. Принципиальная схема светодиодного куба 5x5x5 для сборки своими руками.

Питают его и куб от любого источника постоянного напряжения 9…16 В. Ток потребления - не более 200 мА. Напряжение +5 В для питания микроконтроллера DD1 получено с помощью интегрального стабилизатора напряжения DA1, конденсаторы С2, С4, С5 - блокировочные.

Работа микроконтроллера синхронизирована внутренним тактовым генератором, частота которого стабилизирована кварцевым резонатором ZQ1 на 4 МГц.

Куб состоит из пяти горизонтальных «уровней”. В каждом из них по 25 светодиодов, размещённых квадратом 5×5. Схема пятого (верхнего) уровня показана на рис. 2.

Рис. 2. Схема пятого уровня для светодиодного куба 5x5x5.

Остальные построены по таким же схемам и различаются только позиционными номерами светодиодов. Соединённые вместе катоды светодиодов каждого уровня подключены к коллекторам транзисторов VT1-VT5.

Схема ключа на транзисторе VT5 отличается от остальных, поскольку выход RA4 микроконтроллера, который управляет этим ключом, построен по схеме с открытым стоком.

Аноды светодиодов, занимающих одинаковые позиции на каждом уровне, соединены вместе и подключены к выводам портов В, С, D и выводу RA3 микроконтроллера (всего 25 выводов) через ограничивающие ток резисторы R9-R33. Светодиод HL1 подключён к микроконтроллеру через ограничительный резистор R4.

Резистор R1 поддерживает на входе RA0 микроконтроллера высокий логический уровень напряжения, когда кнопка SB1 не нажата. Нажатием на эту кнопку прекращают смену световых эффектов, о чём сигнализирует включение светодиода HL1. Все светодиоды куба при этом выключаются.

С повторным нажатием на кнопку гаснет светодиод HL1, а чередование световых эффектов возобновляется. Программа микроконтроллера написана на языке ассемблера.

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

Сначала по команде микроконтроллера открывается транзистор VT5, соединяя с общим проводом катоды светодиодов HL102-HL126 первого (самого нижнего) уровня куба. В соответствии с кодом, установленным в этот момент на выходах RA3, RB0- RB7, RC0-RC7, RD0-RD7, включаются те светодиоды этого уровня, которые нужны для формирования приходящейся на него части кадра изображения.

Спустя 2 мс транзистор VT5 закрывается, устанавливается код для светодиодов второго уровня и открывается транзистор VT4. За 10 мс изображение кадра формируется полностью, причём за счёт инерционности зрения чередование включённых уровней остаётся незаметным.

Далее аналогично создаётся изображение следующего кадра с новым положением геометрической фигуры и так далее до завершения эффекта. Длительность одного светового эффекта - 4,3 с.

Все десять записанных в памяти микроконтроллера эффектов и текстовое поздравление с Новым годом воспроизводятся по очереди. Поскольку программная память микроконтроллера полностью не заполнена, число световых эффектов можно увеличить, доведя его до 30-40.

Читайте также: