Представляю вашему вниманию свой вариант блока управления четырёхцветной ёлочной гирляндой на микроконтроллере ATtiny13. Сразу оговорюсь, что, скорее всего, будет дешевле и проще купить новую гирлянду и не заморачиваться. Но если хочется самому поковыряться, или новый год уже на носу, а Вам срочно нужно починить неисправную гирлянду подручными средствами — эта статья может быть полезной…
Так как китайские платы управления гирляндами со временем иногда начинают жить своей жизнью, у меня возникла мысль сделать свою плату управления на микроконтроллере Attiny13, но при этом уместить её в родной корпус гирлянды.
Классическая схема китайских гирлянд, как правило, управляется контроллером QD0056C (или подобным) и выглядит всегда плюс-минус одинаково, примерно так:
Мой вариант схемы на Attiny13 выглядит так:
ВНИМАНИЕ! Схема не имеет никакой гальванической развязки от питающей сети 220В! (Впрочем, как и родные китайские схемы.)
Как видно, схема осталась практически та же самая, что и в оригинале, только адаптирована для ATtiny13 часть схемы, отвечающая за определение перехода через ноль (см. Application Note AVR182: Zero Cross Detector), а так же балластный резистор в цепи питания я поставил на 150кОм, двухваттный. Ток потребления схемы я не замерял, но с этим сопротивлением обеспечивается ток порядка 14мА — схема при этом нормально работает, резистор греется не сильно. Для лучшего охлаждения я ещё по бокам корпуса насверлил отверстий. Почти всю обвязку (тиристоры, диоды, конденсаторы…) можно взять с родной китайской платы, если, конечно, они исправны.
В схеме используется вывод МК PB5 (Reset), что требует программирования соответствующего FUSE-бита: RSTDISBL = 0. Будьте внимательны: после программирования данного FUSE-бита больше не будет возможности перепрошить МК ISP программатором! Поэтому, рекомендую сначала опробовать, как прошивка работает во всех режимах и, при необходимости, поиграться с включением/выключением фильтра помех для детектора нуля (см. ниже).
По этой схеме я собрал две имеющиеся у меня гирлянды: одну — на тиристорах PCR406, вторую — на MCR100-6.
В исходнике прошивки есть опция препроцессора, включающая (1) или выключающая (0) фильтр помех для детектора нуля:
#define FILTER_ENABLED 1
В моём случае — с одними тиристорами лучше заработал вариант со включенным фильтром, с другими — с отключенным (под словом «лучше» я тут имею ввиду более стабильную работу схемы во всех режимах, без ложных помаргиваний).
Так же, в исходнике доступна ещё одна опция для препроцессора, включающая (1) или отключающая (0) «режим ШИМ». По умолчанию он отключен:
define PWM_ENABLED 0
Включение ШИМ-режима может быть полезно при отладке кода на отладочной плате (управлении светодиодами напрямую) или при использовании в схеме транзисторов. В данном же случае нагрузкой управляют тиристоры, и мы ими управляем фазовым методом (подачей коротких открывающих импульсов через заданное время после перехода питающего напряжения через ноль), поэтому ШИМ-режим оставляем выключенным.
Всего в прошивке предусмотрено шесть режимов:
- «мерцание»;
- «волна»;
- «раскачивание»;
- «шаги»;
- «каскад»;
- «постоянное свечение».
Вместить больше режимов в 1кБ памяти Attiny13 у меня не получилось, впрочем, как по мне — больше их и не нужно. А если желаете больше — можно попробовать оптимизировать код или взять МК с бОльшим размером ПЗУ (например ATtiny25/45/85).
Например вот тут человек на основе моего кода сделал и выложил свою версию прошивки с разными полезными фишками — стоит обратить внимание!
А вот так мои платы выглядят в собранном виде:
Скачать архив с проектом (схема и плата в DipTrace, исходный код прошивки): tiny13-lights.zip