Гирлянда на микроконтроллере своими руками

Обновлено: 07.07.2024

Светодиодная гирлянда на МК Attiny13

Светодиодная гирлянда

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

Из деталей нам понадобится:
Микроконтроллер Attiny13 - 1шт.
Панелька DIP-8 - 1шт.
Резистор 4.7кОм - 1шт.
Резистор 100 Ом - 5шт.
Штырьки PLS - 2шт.
Светодиоды (любые) - 5шт.
Гнездо BLS-2 - 1шт.
Отсек для батареек - 1шт.

Необходимые компоненты

Сборку устройства я разделил на несколько этапов:
Этап 1. Изготовление платы
Этап 2. Запаивание радио деталей на плату
Этап 3. Изготовление программатор для прошивки микроконтроллера
Этап 4. Прошивка микроконтроллера

Этап 1. Изготовление платы

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

И так, для начала нам понадобится следующее:
Кусочек текстолита (размером 45 на 30мм)
Хлорное железо
Небольшая ёмкость
Вода
Перманентный маркер
Немного технического спирта или одеколона
Ластик

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

Обработка платы

Далее берём перманентный маркер и рисуем дорожки на текстолите (как показано на рисунке ниже).

Рисуем дорожки

Нарисовали? Отлично. Теперь надо вытравить плату используя хлорное железо.
Во время травления, хлорное железо выедает (не закрашенную маркером) часть медного покрытия текстолита.

Хлорное железо

И так, поскольку хлорное железо это порошок нам его надо развести в воде.
Вот пропорция: 100гр. хлорного железа на 700мл воды. Но нам так много не надо, поэтому берём 10гр. на 100 мл. воды. Далее в этот раствор опускаем нашу плату.

Травление платы

И ждём примерно часа два (пока раствор хлорного железа не выест не закрашенную часть медного покрытия текстолита).

После того, как плата вытравилась, достаём её из емкости и промываем под проточной водой.

Промывка платы

Вот фотография вытравленной платы.

Плата

Теперь стираем с платы маркер (для этого отлично подходит технический спирт или одеколон).

Стираем с платы маркер

Далее нам необходимо сделать в плате отверстия под радио детали. Внизу показано где на плате делать отверстия.

Делаем отверстия

Поскольку у меня нет электродрели я использую свой школьный циркуль

Делаем отверстия

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

Обработка наждачкой

Теперь включаем паяльник и залудим плату. Внизу фотография залуженной платы

Лужение платы

Оставшийся на плате канифоль можно стереть техническим спиртом или жидкостью для снятия лака.

Готовая плата

Плата готова! Этап 1 завершен!

Этап 2. Запаивание радио деталей на плату

После того как сделали плату (а может кто-то не делал её, а решил использовать макетную плату) необходимо запаять на неё радио детали.

Схема светодиодной гирлянды на микроконтроллере Attiny13:

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

Запаиваем радио детали на плату (по схеме выше) и получаем следующее устройство:

Готовая плата

Далее вставляем провода отсека для батареек в гнёзда BLS и зажимаем их.

Всё устройство почти готово, дело остаётся за малым это прошить микроконтроллер.
Этап 2 завершён!

Этап 3. Изготовление программатор для прошивки микроконтроллера

Собирать программатор мы будем на LPT порт компьютера. Вот схема программатора:

Схема программатора

На рисунке в прямоугольнике (где LPT порт) номер контакта, куда подсоединять проводок. Провода старайтесь делать покороче (не более 20 см). Если провода будут длиннее 20 см то во время прошивки или чтения микроконтроллера будут ошибки, которые могут стоить микроконтроллеру жизни!
Будьте очень аккуратны, LPT порт очень легко спалить!

Для изготовления программатора нам понадобится:
25-контактный разъем для LPT порта (папа)
Резисторы 150 Ом 4 шт.
Резистор 10 кОм 1 шт.
Батарея на 3 вольта

Вот мой вариант программатора:

Программатор

Теперь можно приступить к прошивке микроконтроллера.

Этап 4. Прошивка микроконтроллера

Внимание! В этом этапе описывается прошивка микроконтроллера Attiny13 с помощью программы PonyProg2000 и программатора на LPT порт.

Всем известно, что без прошивки, микроконтроллер - это ничего не делающая микросхема, а чтобы она управляла нашей гирляндой нам её надо прошить.
Для прошивки мы будем использовать ранее изготовленный нами LPT программатор, компьютер и программу PonyProg2000.
Для начала скачайте прошивку для гирлянды (ссылка внизу страницы), потом из интернета скачайте программу PonyProg2000 и установите её.

Теперь всё почти готово для прошивки микроконтроллера. Остаётся лишь подключить микроконтроллер к программатору а программатор подключить к компьютеру.
После того как всё подключили запускаем программу PonyProg2000.

Далее нам надо откалибровать программу PonyProg2000, для этого следуем по пути: Setup > Calibration

Выскачет такое окно:

Калибровка

В окне нажимаем кнопку "Yes".

Калибровка

Все, программа откалибрована!

Теперь заходим в настройки (Setup > Interface Setup…). Появится вот такое окно:

Настройка

Далее выбираем "Parallel", "Avr ISP I/O", LPT1 и нажимаем кнопку "ОК"

После в главном окне программы выбираем "AVR micro", "Attiny13"

Настройка

Теперь осталось открыть прошивку, для этого в меню "File" выбираем "Open Device File…". В списке "Тип файлов:" выбираем "*.hex" и указываем путь к прошивке нашей светодиодной гирлянды, нажимаем кнопку "Открыть".

Открытие прошивки

В главном окне нажмите на кнопку "Write device":

Открытие прошивки

Окончание процесса прошивки

Микроконтроллер прошит и работоспособен! Но подождите нам ещё необходимо установить фьюз биты. Кстати, фьюз биты это раздел (4 байта) в AVR микроконтроллерах в котором хранится конфигурация работы микроконтроллера.

Для установки фьюз битов в меню "Command" выберите "Security and Configuration Bits…", в появившимся окне нажмите кнопку "Read" и установите галочки как на картинке ниже:

Установка фьюзов

После установки галочек (как на картинке выше) нажмите кнопку "Write". Всё готово!
Теперь выключите компьютер и извлеките микроконтроллер из программатора, вставьте микроконтроллер в панельку на плате гирлянды. Если всё сделано правильно, то при подаче питание (3 вольта) гирлянда должна заработать!

Готовое устройство

В заключении хотелось бы сказать, что программу я писал в среде BASCOM-AVR (исходник прилагается), программе 9 подпрограмм эффектов, так что ничего не мешает создавать вам свои эффекты.

По умолчанию устройство имеет 4 разных эффекта:
1. Бегущая точка
2. Бегущая линия
3. Переключение светодиодов
4. Моргание

Светодиодная гирлянда на микроконтроллере

Данный проект светодиодной гирлянды на микроконтроллере хорошо подходит для начинающих. Схема отличается своей простотой и содержит минимум элементов.

Данное устройство управляет 13 светодиодами, подключенными к портам микроконтроллера. В качестве микроконтроллера используется МК фирмы ATMEL: ATtiny231320PI. Благодаря использованию внутреннего генератора, выводы 4 и 5 задействованы как дополнительные порты микроконтроллера PA0,PA1. Схема обеспечивает выполнение 12 про- грамм эффектов, 11 из которых - индивидуальные комбинации, а 12-тая про- грамма – последовательный однократный повтор предыдущих эффектов. Переключение на другую программу осуществляется нажатием на кнопку SB1. Программы эффектов включают в себя и бегущий одинарный огонь, и нарастание огня, и бегущую тень и многое другое.

Схема светодиодной гирлянды на МК

Устройство имеет возможность регулировки скорости смены комбинаций при выполнении программы, которая осуществляется нажатием на кнопки: SB2 – увеличение скорости и SB3 – уменьшение скорости при условии, что переключатель SA1 находиться в положении “Скорость программы”. Также имеется возможность регулировать частоту горения светодиода (от стабилизированного свечения до легкого мерцания), которая осуществляется нажатием на кнопки: SB2 – уменьшение (до мерцания) и SB3- увеличение при условии, что переключатель SA1 находиться в положении “Частота мерцания”. У переключателя SA2 замкнутое положение соответствует режиму регулировки скорости выполнения программ, а разомкнутое - режиму регулировки частоты горения светодиодов.

Порядок нумерации светодиодов в схеме соответствует их порядку зажигания при выполнении программы. При необходимости вывод RESET может быть использован для сброса, а в качестве порта PA2 он не задействован. В устройстве выбрано при программировании тактовая частота 8 МГц от внутреннего генератора (фузы CKSEL3..0 - 0100).Хотя возможно использование частоты в 4 МГц(фузы CKSEL3..0 - 0010) с соответствующими изменениями временных интервалов работы схемы.

Тип светодиодов, указанный на схеме использовался в опытном образце, для схемы подойдут любые светодиоды с напряжением питания 2-3 вольта, резисторами R1-R17 можно регулировать яркость свечения светодиодов.

Фото готового устройства

Прошивку HEX, а также файлы программы на ассемблере вы можете скачать ниже

Простая 4-х цветная многоканальная гирлянда на основе микроконтроллера ATTINY13A

Как говорится в народе — готовь сани летом…
Наверняка на новый год украшаете ёлку всевозможными гирляндами, и скорей всего они уже давным давно приелись однообразием своего мигания. Хотелось бы сделать что-то такое чтобы ух, прям как на столичных елках мигало, только в меньшем масштабе. Или на крайний случай — повесить на окно, чтобы эта прям красота освещала город с 5-го этажа.
Но увы, в продаже таких гирлянд нет.

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


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

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

Как все устроено.



Разработанная сеть способна адресовать до 254 подчиненных модулей, которые далее будут называться SLAVE — они соединены всего 3-мя проводами, как вы уже догадались — два провода это питание +12В, общий и третий — сигнальный.
они имеют несложную схему:

Как можно увидеть, она поддерживает 4 канала — Красный, Зеленый, Синий и Фиолетовый.
Правда, по результатам практического тестирования, фиолетовый хорошо видно только вблизи но зато как! Так же, из-за того что цвета расположены слишком далеко друг от друга смешение цветов можно увидеть только метров с 10, если использовать RGB-светодиоды ситуация будет несколько получше.
В целях упрощения конструкции так же пришлось отказаться и от кварцевой стабилизации — во-первых, лишний вывод забирает и во-вторых стоимость кварцевого резонатора довольно ощутима и в-третьих — в нем нет острой необходимости.
На транзисторе собран защитный каскад, чтобы не выбило порт контроллера от статики — линия все же довольно длинной может быть, в крайнем случае пострадает только транзистор. Каскад рассчитан в MicroCap и имеет примерный порог срабатывания около 7 вольт и слабую зависимость порога от температуры.

Естественно, в лучших традициях на адрес под номером 255 реагируют все модули — так можно их все одновременно выключить одной командой.

Так же в сеть подключен модуль называемый MASTER — он является посредником между ПК и сетью из подчиненных SLAVE-модулей. Помимо прочего он является источником образцового времени, для синхронизации подчиненных модулей в условиях отсутствия в них кварцевой стабилизации.


Схема:

В схеме есть не обязательные потенциометры — их можно использовать в программе на ПК для удобной и оперативной настройки желаемых параметров, на данный момент это реализовано только в тестовой программе в виде возможности назначить любому из 4-х каналов любой из потенциометров. Схема подключается к ПК через преобразователь интерфейса USB-UART на микросхеме FT232.


Пример выдаваемого пакета в сеть:


Его начало:

Электрические характеристики сигнала: лог.0 соответствует +9. 12В, а лог.1 соответствует 0. 5В.

Как можно увидеть, данные передаются последовательно, с фиксированной скоростью по 4 бита. Это обусловлено необходимым запасом на ошибку по скорости приема данных — SLAVE-модули не имеют кварцевой стабилизации, а такой подход гарантирует прием данных при отклонении скорости передачи до +-5% сверх тех что компенсируются программным методом на основе измерения калиброванного интервала в начале передачи данных который дает стойкость к уходу опорной частоты еще на +-10%.

Собственно, алгоритм работы MASTER-модуля не так интересен(он достаточно прост — получаем данные по UART и переправляем их в сеть подчиненных устройств), все самые интересные решения реализованы именно в SLAVE-модулях, которые собственно и позволяют подстраиваться под скорость передачи.

Интересна реализация алгоритма подстройки под скорость передачи. В начале передачи MASTER выдает импульс длительностью в 4 бита лог.0, по которым все подчиненные модули определяют необходимую скорость приема при помощи несложного алгоритма:

st_syn_delay = 60 — константа, определяющая максимальную длительность стартового импульса, которая принята примерно в 2 раза больше номинала (для надежности)

Экспериментальным методом было установлена такая зависимость получаемого числа в tmp2 при отклонении тактовой частоты от номинала:

4.3Mhz (-10%) 51 единиц (0x33) соответствует 90 тактам таймера для возврата скорости приема к номиналу
4.8Mhz (+00%) 43 единиц (0x2B) — соответствует 100 тактам таймера(номинал)
5.3Mhz (+10%) 35 единиц (0x23) — соответствует 110 тактам таймера для возврата скорости приема к номиналу

По этим данным были рассчитаны коэффициенты коррекции периода прерываний таймера(именно таким образом скорость приема подстраивается под имеющуюся тактовую частоту контроллера):

Y(x) = 110-x*20/16
x = tmp2 — 35 = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
Y(x) = (110, 108.75, 107.5, 106.25, 105, 103.75, 102.5, 101.25, 100, 98.75, 97.5, 96.25, 95, 93.75, 92.5, 91.25, 90)

Числа округлены до целых и занесены в EEPROM.

Если при подаче напряжения на модуль удерживать линию в логическом состоянии «1» включится подпрограмма калибровки, которая позволит измерить частотомером или осциллографом период ШИМ-сигнала без коррекции и на основании измерений судить об отклонении тактовой частоты контроллера модуля от номинальной, при сильном отклонении больше 15% может потребоваться коррекция калибровочной константы встроенного RC-генератора. Хотя производитель обещает калибровку на заводе и отклонение от номинала не более 10%.

Прошивка.
для SLAVE-модуля необходимо прошить только фьюзы CKSEL1 = 0, и SUT0 = 0. Остальные оставить непрошитыми. Содержимое EEPROM прошить из файла RGBU-slave.eep, при необходимости тут же можно задать желаемый адрес модуля в сети — 0-й байт EEPROM, по умолчанию прошит как $FE = 254, по адресу 0x13 содержится калибровочная константа встроенного RC-генератора контроллера, на частоте 4.8Мгц она не загружается автоматически поэтому необходимо программатором считать заводское значение калибровки и записать в эту ячейку — это значение индивидуально для каждого контроллера, при больших отклонениях частоты от номинала можно изменять калибровку именно через эту ячейку не затрагивая заводского значения.

для MASTER-модуля необходимо прошить только фьюзы SUT0 = 0, BOOTSZ0 = 0, BOOTSZ1 = 0, CKOPT = 0. Остальные оставить непрошитыми.

Напоследок небольшая демонстрация гирлянды расположенной на балконе:

На самом деле, функциональность гирлянды определяется программой на ПК — можно сделать цветомузыку, стильное переливающееся освещение комнаты(если добавить драйверы светодиодов и использовать мощные светодиоды) — и т.д. Чем планирую заняться в будущем. В планах сетка из 12 модулей с 3-ваттными RGB-светодиодами, и комнатное освещение на основе кусочков 12-вольтной RGB-ленты(нужны только полевые транзисторы для коммутации ленты на каждый модуль по 3 штуки или 4 если добавить кусочек фиолетовой ленты других отличий от оригинала не будет).

Для управления сетью можно написать свою программу, хоть на бейсике — главное что должен делать выбранный язык программирования — уметь подключаться к бессмертным COM-портам и настраивать их параметры. Вместо интерфейса USB можно использовать переходник с RS232 — это дает потенциальную возможность управления световыми эффектами с широкого круга устройств которые вообще можно запрограммировать.
Протокол обмена с MASTER-устройством достаточно прост — посылаем команду и ожидаем ответ об её успешности или провале, если ответа нет больше нескольких милисекунд — имеются проблемы с соединением или работой MASTER-устройства, в таком случае необходимо провести процедуру переподключения.

На данный момент доступны следующие команды:

0x54; символ «T» — команда «test» — проверка соединения, ответ должен быть 0x2B.
0x40; символ "@" — команда «загрузить и передать». После подачи команды нужно дождаться ответа "?" далее следует 6 байт данных:
+0: Адрес подчиненного устройства 0..255
+1: Команда устройству
0x21 — байты 2. 5 содержат яркость по каналам которую необходимо применить немедленно.
0x14 — установить тайм-аут, по истечении которого яркость по всем каналам будет
сброшена на 0 если за это время не поступит ни одной команды. Значение таймаута находится в ячейке красного канала, т.е. в байте со смещением +2. значение 0-255 соответствует таймауту в 0-25.5 сек по умолчанию, таймаут = 5 секунд(записан в EEPROM при прошивке, там же его можно и изменить в байте со смещением +1).
0x5A — изменить адрес устройства.
Процедура смены адреса для надежности должна быть выполнена троекратно — только тогда новый адрес будет применен и прописан в EEPROM. При этом надо быть осторожным -если прописать двум устройствам один адрес они будут реагировать синхронно а «разделить» их можно будет только физически отключив от сети лишние модули и сменив адрес у оставшегося, либо программатором. Значение нового адреса передается в ячейке красного канала — т.е. в байте со смещением +2.

+2: Яркость красного 0. 255
+3: Яркость зеленого 0. 255
+4: Яркость синего 0. 255
+5: Яркость фиолетового 0. 255

0x3D; символ "=" — команда «АЦП». После подачи команды нужно дождаться ответа "?" далее следует передать 1 байт — номер канала АЦП 0..7 в двоичном виде(ASCII цифры 0..9 тоже подходят в этом качестве, поскольку старшие 4 бита игнорируются).
В ответ команда возвращает 2 байта результата измерения в диапазоне 0. 1023

Возможные ответы на команды:
0x3F; символ "?" — готовность к вводу данных, означает что устройство готово к приему аргументов команды
0x2B; символ "+" Ответ — команда выполнена
0x2D; символ "-" Ответ — команда не определена или ошибочна

093-12-ти канальная супер гирлянда на ATtiny2313.


Для затравки смотрим видео:

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

1 Гирлянды пациенты.

В качестве жертв были куплены 3 новые светодиодные гирлянды – вот они красавицы 🙂


Стоимость по 3$ за штуку (100 светодиодов). Но китайцы если не сэкономят, то сами себе изменят! В гирляндах, по факту, оказалось по 3 канала. То есть сам контроллер четырех канальный, но тиристоров три и линий светодиодов тоже три. Дабы замаскировать такое безобразие китайцы в одной линии мешают светодиоды двух цветов. Короче, пришлось докупить еще одну :(. Но это еще не предел экономии, часто и густо каналов вообще два! Будьте внимательны – открывайте коробочку и смотрите, сколько стоит тиристоров.


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

2 Схема.

Вот схема оригинальной гирлянды:

Из схемы видно, что диммирование каналов светодиодов осуществляется тиристорами PCR406

Не вижу смысла их менять на что-то другое. Для формирования напряжения питания оригинального контроллера используется гасящий резистор (гасящий резистор совместно с внутренним сопротивлением контроллера образуют делитель напряжения). Решение противоречивое, но в данном случае оправдывается дешевизной (ток контроллера незначительный и мощность, выделяемая на резисторе, очень мала). Взвесив за и против такого решения, решил и в своей схеме проделать нечто подобное. Правда ток ATtiny2313 (в пределах 8мА) значительно больше оригинального контроллера, но все же позволяет использовать гасящие резисторы.

Схема нового контроллера гирлянды:

3 Печатная плата.

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

Устройство состоит из двух печатных плат. Первая – источник питания. Вторая, собственно, сам контроллер эффектов и IR-приемник. В виду большого количество каналов, уместить все на одной плате просто физически было не возможно. Кроме того источник питания, хоть и не значительно, но греется, поэтому «отселение» более чем оправдано. Размеры печатных плат сделаны под корпуса оригинальных гирлянд.

Если, все-таки, с выводными элементами есть трудности, то вот рисунок печатной платы для SMD-компонентов. Не собирал, не испытывал. Заработает – отпишитесь.

4 Сборка платы контроллера.


5 Прошивка контроллера.

На плате контроллера выведены штырьки для программатора. Для прошивки микроконтроллера, запитайте его от ВНЕШНЕГО источника 5 вольт (например, от батареек). Не прошивайте микроконтроллер при включенной в сеть гирлянде – попалите все на свете!

Напоминаю:Для Algorithm Builder и UniProf галочки ставятся как на картинке.
Для PonyProg, AVR Studio, SinaProg галочки ставятся инверсно.
Как программировать микроконтроллеры читаем в FAQ.

6 Сборка платы источника питания.

По полученному потребляемому току (Iпотр) рассчитываем сопротивление гасящих резисторов в батарее (принимаем большее из стандартного ряда):

R = 430 / Iпотр

Например, у меня потребляемый ток составил 9 мА, значит R = 430 / 0,009 = 47777 Ом (принимаем 47 кОм).

Нагромождение гасящих резисторов выполнено с целью распределения рассеиваемой мощности и уменьшения нагрева. Резисторы должны быть мощностью не менее 0.5 Вт (а лучше по 1 Вт).

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


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

7 Формирование линий светодиодов.

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

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

Долго объяснять на словах – посмотрите на рисунки или подумайте сами как вам скрутить жгуты:


Жгуты скручены – теперь их припаиваем к контроллеру таким образом чтобы светодиоды каналов шли друг за другом последовательно.

8 Описание работы гирлянды.

При включении гирлянды в сеть, она начинает сразу работать со случайного эффекта. В процессе работы эффекты будут случайно менять друг друга. Если нажимать кнопку, то эффекты последовательно будут сменять друг дружку по очереди:
1 Волна
2 Падающая звезда
3 Искры
4 Медленные переливы
5 Бегущие огни
6 Мерцающие огоньки
7 Все горит-тухнет
8 Все горит
0 Все выключено

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

Работа от пульта аналогична работе кнопке на контроллере (нажимаем кнопку на пульте – последовательно меняются эффекты). Для изучения кнопки любого IR-пульта, нужно зажать кнопку на контроллере до момента пока не погаснет гирлянда (порядка 3 секунд), дальше нужно нажать выбранную кнопку на пульте. Код кнопки запишется в энергонезависимую память и гирлянда вернется к эффектам. Так как код хранится в энергонезависимой памяти, гирлянда будет «помнить» пульт даже после отключения от сети.

Напоследок считаю не лишним напомнить:

Светодиодная гирлянда на микроконтроллере AVR ATtiny2313

Данная схема светодиодной гирлянды на микроконтроллере ATtiny2313 (семейство AVR) содержит небольшое число элементов, отличается простотой сборки и поэтому хорошо подходит для начинающих радиолюбителей. С ее помощью можно управлять 13 светодиодами, подключенными к соответствующим портам микроконтроллера. Доступны такие эффекты как бегущий одинарный огонь, постепенное нарастание силы свечения, бегущая тень и многое другое.

В схеме для задания тактовой частоты используется внутренний генератор, поэтому 4-й и 5-й выводы используются как дополнительные порты микроконтроллера PA0, PA1. Доступно выполнение 12 программ эффектов, 11 из которых - индивидуальные комбинации, а 12-ая – последовательное однократное повторение предыдущих эффектов. Смена программ производится нажатием на кнопку SB1.

Схема гирлянды на микроконтроллере AVR

В рассматриваемой гирлянде можно регулировать скорость смены комбинаций в процессе выполнении программы нажатием на соответствующие кнопки: SB2 – увеличивает скорость переключения, SB3 – уменьшает, однако для этих операций необходимо чтобы переключатель SA1 находился в положении “Скорость программы”. Также можно регулировать частоту горения светодиода (от постоянного свечения до легкого мерцания), при положении переключателя SA1 в положении “Частота мерцания” это производится с помощью кнопок SB2 и SB3: SB2 – уменьшение (до мерцания), SB3 – увеличение. Замкнутое положение переключателя SA2 задействует режим регулировки скорости выполнения программы, а разомкнутое - режим регулировки частоты горения светодиодов.

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

Для работы устройства выбрана тактовая частота 8 МГц, задаваемая внутренним генератором микроконтроллера (фузы CKSEL3..0 - 0100). Но существует и альтернативное решение в виде использования частоты в 4 МГц (фузы CKSEL3..0 - 0010) – в этом случае пропорционально изменятся временные интервалы работы схемы.

Для гирлянды можно использовать любые светодиоды с напряжением питания 2-3 вольта. С помощью резисторов R1-R17 есть возможность регулировки яркости свечения светодиодов.

Внешний вид гирлянды на микроконтроллере AVR

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

Таймер своими руками | Программирование микроконтроллеров AVR

Программирование микроконтроллеров Курсы

Рассмотрим, как сделать таймер своими руками на микроконтроллере ATmega8, хотя код довольно просто адаптировать и для МК AVR других серий. Электронный таймер нужное устройство во всех областях, где требуется выполнение определенных действий через конкретный промежуток времени.

Таймер своими руками

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

Управление таймера состоит всего из четырех кнопок:

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

Схема таймера

Упрощенно таймер работает следующим образом. Кнопками «+» и «-» устанавливается требуемое количество секунд; кнопкой «старт» запускается таймер. Когда таймер отсчитает до нуля, на выводе PC2 микроконтроллера ATmega8 появится высокий потенциал, который откроет транзисторный ключ Q5. Далее транзисторный ключ запустит генератор и раздастся звук в динамике. Сброс таймера осуществляется при нажатии кнопки «сброс». Генератор звуковой частоты собран на двух транзисторах Q6 и Q7 разный полупроводниковых структур. С принципом работы и описанием схемы подобных генераторов можно ознакомиться, перейдя по ссылке.

Алгоритм работы таймера на микроконтроллере

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

Для формирования интервала времени в одну секунду мы воспользуемся первым таймер-счетчиком микроконтроллера ATmega8. Все его настройки мы определим в функцию start. Сначала разделим рабочую частоту микроконтроллера 1000000 Гц на 64 и получим новую частоту 15625 Гц. За это отвечают бит CS10, CS11 и CS12 регистра TCCR1B. Далее разрешаем прерывание по совпадению и в регистр сравнения (старший и младший) записываем двоичное число равное десятичному 15625. Затем обнуляем счетный регистр TCNT1 и устанавливаем в единицу бит WGM12 регистра TCCR1B, что вызывает сброс счетного регистра при совпадении текущего его значения с числом, записанным в регистры сравнения.

void start (void)

TCCR1B |= (1<<CS11) | (1<<CS10); // деление частоты на 64 = 15625

TIMSK |= (1<<OCIE1A); // разрешаем прерывания при совпадении

OCR1AL = 0b000001001; // регистр сравнения 15625

TCCR1B |= (1<<WGM12); // сброс при совпадении

Когда таймер отсчитает ровно одну секунду – вызовется прерывание. В теле функции прерывания мы будем снижать значение переменной на единицу. При достижении нуля на второй выход порта C микроконтроллера появится высокий потенциал, который откроет транзисторный ключ и запустит генератор, в результате чего мы услышим звук в динамике.

Светодиодная гирлянда на микроконтроллере

Программирование микроконтроллеров Курсы

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

Подключение кнопки к микроконтроллеру

Схема гирлянды приведена ниже.

Светодиодная гирлянда на микроконтроллере

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

Чтобы настроить определенные выводы (пин) МК на вход, следует в соответствующие биты регистра DDR записать нули. Кстати, если пины МК не задействованы, то их рекомендуется также настроить на вход. Поскольку к порту B мы будем подключать только кнопки, то в регистр DDRB мы запишем все нули следующий командой:

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

Настройка выводов микроконтроллера на вход

Если в бит регистра PORT записан ноль, то пин имеет высокое входное сопротивление.

При установке бита в единицу к ножке МК подключается подтягивающий резистор. Резистор называется так потому, что посредством его “подтягивается” высокий потенциал (+ 5 В) к соответствующей точке электрической цепи; в данном случае – к пину микроконтроллера.

Проверка состояния вывода МК с помощью PINx

Чтобы в любой момент времени знать, какой потенциал присутствует на выводе, следует проверить (считать) соответствующий бит в регистре PIN.

Данный регистр по аналогии можно сравнить с датчиком. С него можно только считывать информацию. Записать в него ничего нельзя. PIN является противоположность регистра PORT, в который выполняется только запись, но не считывание данных.

Боле предпочтительным является установка регистра PORT в единицу, т.е. применение внутреннего подтягивающего резистора МК. Такой вариант имеет значительную помехоустойчивость, поскольку для изменения высокого потенциала на низкий, вывод необходимо напрямую соединить с землей или общим проводом.

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

При нажатии на кнопку данный вывод соединится с общим проводом (“минусом”) и на нем возникнет низкий потенциал. А бит регистра PIN автоматически установится в ноль.

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

Светодиодная гирлянда в коде

Теперь давайте напишем целиком код программы, а затем рассмотрим его отдельные элементы. Алгоритм работы программы следующий: при замыкании первого ключа “лампочки” будут включаться в одной последовательности, а при замыкании второго – “лампочки” будут загораться иначе. Если обе кнопки на нажаты, то все светодиоды должны быть выключены.

DDRB = 0b00000000; // Настраиваем порт B на вход

DDRD = 0b11111111; // Настраиваем порт D на выход

VD = 0b00000000; // Выключаем все огни

K = 0b11111111; // Включаем подтягивающие резисторы

if (PINB == 0b11111110) // Проверяем, нажата ли 1-я кнопка

VD = 0b11111111; // Если ключ замкнут, то мигаем «лампочками»

VD = 0b00000000; // Если ключ разомкнут, то все LED выключены

if (PINB == 0b11111101) // Проверяем, нажата ли 2-я кнопка

VD = 0b00000001; // Если кнопка нажата, то поочередно включаем LED

VD = 0b00000000; // Если ключ не замкнут, то все LED выключены

Операторы if и else

В противном случае, когда значение a меньше или рвано единице, код программы в фигурных скобках не будет выполняться.

Если в фигурных скобках выполняется только одна команда, то синтаксис языка Си позволяет упростить запись и обойтись без фигурных скобок:

Также оператор if работает в связке с оператором else .

if (a >1) → если a >1, то = a + b

Работает это так. Если a > 1, то c = a + b. В противном случае, т.е. когда а меньше или равно единице, то c = a – b.

Пояснение кода программы

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

Обратите внимание, что команда присвоения состоит из одного знака равно «=», а команда проверки условия «равно» состоит из двух знаков равно, написанных без пробела «==».

Когда кнопка не нажата, в бите регистра PINB появится единица, вызванная высоким потенциалом подтягивающего резистора. В этом случае управление перейдет к оператору else и все LED будут выключены.

При замыкании второго ключа, вывод которого соединен с портом PB1, выполнится второй код программы, и светодиоды начнут поочередно включаться с задержкой времени 0,3 секунды.

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

Также ею можно управлять с помощью всего одной кнопки. Такой вариант имеет несколько сложнее код, и его мы рассмотрим в отдельной статье. Там же мы рассмотрим, как подключать мощные LED к МК.

Настройка портов ввода-вывода микроконтроллера ATmega8

Ранее в статье вы подробно рассмотрели настройку портов ввода-вывода микроконтроллера на выход, а здесь – на вход. Теперь объединим все вместе и приведем простой наглядный алгоритм.

12-ти канальная супер гирлянда


Скоро новый год и его нужно встретить красиво. Год назад наткнулся на статью, где была представлена гирлянда на ATtiny2313 от IR-пульта.

Что бы было интересней читать дальше вот не много видео моей гирлянды:

Тут же было принято решение сделать такую же)). Но дело в том, что я ни когда не паял такие вещи и даже не представлял как делать печатные платы и тем более ни когда не программировал МК. Через несколько дней все было готово и даже был собран программатор.

И так, нам понадобится три китайские гирлянды на 100 светодиодов.


Гирлянды обязательно должны быть на 4 канала. Это можно проверить открыв крышку коробочки, там должно быть 4 тиристора.


Но когда я покупал гирлянды продавцы мне не дали открывать коробочки и по этому мне попались на 3 канала как у автора. Пришлось идти и покупать еще одну гирлянду что бы получилось 12 каналов.
Но так получилось, что моя гирлянда была испорчена. В этом году я решил ее восстановить. Теперь при выборе гирлянд я смотрел, что б зажигались отдельно желтые, синие, красные и зеленые светики так как понимал, что мне опять ни кто не даст вскрывать коробочки.

Далее понадобится докупить чуть больше десятка резисторов, пару конденсаторов, микроконтроллер ATtiny2313 и еще по мелочи.

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