Простая 4-Х Цветная Многоканальная Гирлянда На Базе Микроконтроллера Attiny13A.

Как говорится - готовь сани летом.

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

Хочется сделать что-нибудь, чтобы, ух ты, оно мигало, как на столичных елках, только в меньшем масштабе.

Или, в крайнем случае, повесить на окно, чтобы эта красота освещала город с 5 этажа.

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

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

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



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

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

Как все работает.

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

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

у них простая схема:

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

Как видите, он поддерживает 4 канала – красный, зеленый, синий и фиолетовый.

Правда, по результатам практических испытаний, фиолетовый цвет хорошо виден только вблизи, но как! Также из-за того, что цвета расположены слишком далеко друг от друга, смешение цветов видно только с 10 метров, если использовать RGB-светодиоды, ситуация будет несколько лучше.

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

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

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

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

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

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

Схема:

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

Схема содержит дополнительные потенциометры – их можно использовать в программе на ПК для удобной и быстрой настройки нужных параметров; на данный момент это реализовано только в тестовой программе в виде возможности назначить любой из потенциометров на любой из 4-х каналов.

Схема подключается к ПК через преобразователь интерфейса USB-UART на микросхеме FT232. Пример пакета, отправленного в сеть:

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

Его начало:

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

Электрические характеристики сигнала: лог.

0 соответствует +9.12В, лог.

1 соответствует 0.5В.

Как видите, данные передаются последовательно, с фиксированной скоростью 4 бита.

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

программным методом, основанным на измерении калиброванного интервала в начале передачи данных, что обеспечивает устойчивость к дрейфу опорной частоты еще на +-10%.

На самом деле алгоритм работы МАСТЕР-модуля не так уж и интересен (он достаточно прост – получаем данные по UART и пересылаем их в сеть ведомых устройств), все самые интересные решения реализованы в SLAVE-модулях, которые собственно и позволяют вам адаптироваться к скорости передачи.

Основным и самым важным алгоритмом является реализация 4-канального 8-битного программного ШИМ, который позволяет управлять 4 светодиодами с 256 градациями яркости для каждого из них.

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

При выбранной тактовой частоте внутреннего генератора 4,8 МГц прерывания происходят на частоте 48 кГц - это разрядность сети ведомых устройств и с такой же скоростью заполняется ШИМ - в результате частота сигнал ШИМ составляет 187,5 Гц, чего вполне достаточно, чтобы не замечать мерцания светодиодов.

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

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

В результате получается следующая картина:

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

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

В начале передачи МАСТЕР выдает импульс длительностью 4 бита лог.

0, по которому все подчиненные модули по простому алгоритму определяют необходимую скорость приема:

   

LDI tmp2, st_syn_delay DEC tmp2 ;<+ BREQ bad_sync ; | SBIC PINB, cmd_port; | RJMP PC-0x0003 ;-+

st_syn_delay = 60 — константа, определяющая максимальную длительность пускового импульса, которая принимается примерно в 2 раза больше номинала (для надежности) Экспериментальным методом установлена следующая зависимость результирующего числа в tmp2 при отклонении тактовой частоты от номинальной: 4,3 МГц (-10%) 51 единица (0x33) соответствует 90 тактам таймера для возврата скорости приема к номинальной.

4,8 МГц (+00%) 43 единицы (0x2B) — соответствует 100 тактам таймера (номинально) 5,3 МГц (+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%.

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

А также утилита для работы с отдельным модулем (в том числе и для переназначения адреса модуля).

Прошивка.

для модуля SLAVE необходимо прошить только предохранители CKSEL1=0 и SUT0=0. Остальное следует оставить непрошитым.

Содержимое EEPROM прошивается из файла RGBU-slave.eep, при необходимости можно сразу задать нужный адрес модуля в сети - 0-й байт EEPROM, по умолчанию он прошивается как $FE=254. , адрес 0х13 содержит калибровочную константу встроенного RC-генератора контроллера, на частоте 4,8 МГц она не загружается автоматически, поэтому нужно с помощью программатора прочитать значение заводской калибровки и записать его в эту ячейку - это значение индивидуально для каждого контроллера, при больших отклонениях частоты от номинального значения можно изменить калибровку через эту ячейку, не затрагивая заводское значение.

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

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

Для управления сетью можно написать свою программу хоть на БЕЙСИКЕ — главное, что должен делать выбранный язык программирования — это уметь подключаться к бессмертным COM-портам и настраивать их параметры.

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

Протокол обмена с МАСТЕР-устройством достаточно прост – отправляем команду и ждем ответа о ее успешности или неудаче; если ответа нет более нескольких миллисекунд, имеются проблемы с подключением или работой МАСТЕР-устройства, в этом случае необходимо провести процедуру переподключения.

На данный момент доступны следующие команды: 0x54; символ «Т» — команда «тест» — проверка соединения, ответ должен быть 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; символ "?" — готово к вводу данных, означает, что устройство готово к приему аргументов команды 0x2Б; символ «+» Ответ – команда выполнена.

0x2D; символ «-» Ответ – команда не определена или неверна Более подробную информацию можно получить из исходного кода, расположенного на GitHub, там же находятся и последние версии готовых прошивок: github.com/Alexeyslav/RGBU_light Теги: #Сделай сам или Сделай сам #RGB #attiny13 #Многоканальная гирлянда

Вместе с данным постом часто просматривают: