Новогодняя звезда на Attiny44 и WS2812

Дата публикации: .

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

Новогодняя звезда на Attiny44 и WS2812Эта декоративная звезда состоит из 50 специальных светодиодов RGB, которые контролируются ATtiny44A. Все светодиоды непрерывно изменяют цвет и яркость в случайном порядке. Также есть несколько разновидностей эффектов, которые также активируются случайно. Три потенциометра могут изменять интенсивность основных цветов. Положение потенциометра индицируется светодиодами при нажатии кнопки, а изменение цвета и скорость эффекта можно переключать в три этапа. Этот проект был полностью построен на компонентах SMD из-за специальной формы печатной платы. Несмотря на простую схему, структура платы довольно сложная и вряд ли подойдет для новичков.

  1. Схема устройства
  2. Аппаратная часть
  3. Программная часть
  4. Ввод в эксплуатацию
  5. Работа устройства
  6. История проекта

Описание

В течение некоторого времени я искал электронное рождественское украшение, которое можно было разместить на окне или повесить. Тем не менее, гирлянды, которые можно купить, не совсем подходили для меня. В результате появился проект звезды из 50-ти специальных RGB-светодиодов. Эти светодиоды дополнительно содержат драйвер PWM для каждого базового цвета и простой контроллер, они управляются поочередно через одну линию передачи данных. Кроме того, светодиоды также имеют выход данных и могут быть соединены в длинную цепь. Это позволяет освещать каждый светодиод этой цепи с любым цветом и яркостью. Цвет и яркость устанавливаются тремя байтами - каждый байт содержит значение цвета для красного, зеленого и синего в диапазоне от 0 до 255. Для управления светодиодами в звезде используется ATtiny44A, который циклически вычисляет значения RGB для 50 светодиодов а затем выводит их как поток последовательных данных в цепочку светодиодов.

Программное обеспечение звезды, которое, кстати, в основном было написано на Cи, контролирует непрерывное изменение цвета всех светодиодов. Очень важную функцию выполняет псевдослучайный генератор. Он определяет следующий цвет, а также некоторые дополнительные эффекты выводятся с помощью него. С помощью 3-х потенциометров вы можете настроить интенсивность трех основных цветов. Кроме того, положение потенциометра считывается, когда звезда включается и используется в качестве стартового значения для генератора случайных чисел. Это позволяет управлять несколькими звездами рядом друг с другом: другое положение потенциометра заставляет звезды показывать совершенно разные изменения цвета и эффекты. Кроме того, имеется кнопка. Она показывает положение потенциометров с помощью светодиодов и изменяет скорость эффектов в 3 этапа.

Из-за особой формы звезды макет печатной платы был разработан другим радиолюбителем Дитмаром Хейером. Печатная плата помещается на куске текстолита размером 160х100мм. Плата состоит из нескольких частей, которые должны быть собраны вместе. Для этого проекта использовались только компоненты типа SMD. Это позволяет иметь компактную плату, но значительно увеличивается сложность конструкции. Этот проект не обязательно подходит для начинающих. Однако есть альтернативная возможность сборки без технологии SMD, которая кратко описана в конце раздела "Аппаратная часть".

Схема устройства

Вся схема устройства описывается относительно просто и быстро: в качестве центрального компонента здесь используется микроконтроллер ATtiny44A (IC1). Он работает с тактовой частотой 16 МГц, которая генерируется кварцем Q1. Относительно высокая частота необходима для получения наиболее точного сигнала данных, который возможен для светодиодов. Потенциометры подключены к 3 выводам контроллера PA0-PA2 (контакты 13, 12 и 11). В зависимости от их положения присутствуют напряжения между 0В и 5В, которые циклически измеряются микроконтроллером и используются для генерации значений цвета. Состояние кнопки S1 считывается через вывод PA3 (контакт 10). Выводы PA4-PA6 и вывод PB3 подсоединяются к разъему J1 ISP. Этот разъем необходим для программирования микроконтроллера и соответствует стандарту Atmel.

Вывод PB2 предназначен для передачи данных в цепочку светодиодов. Как уже упоминалось в описании, передача данных происходит последовательно, причем здесь передаются импульсы с частотой 800 кГц. Каждый импульс передает один бит, а отношение импульсов/пауз определяет лог.0 или лог.1. Общая длина импульса всегда равна 1,25 мкс, для передачи лог.0 вывод PB2 устанавливается на 0,312 мкс, и сбрасывается на 0,938 мкс. Для передачи лог.1 вывод устанавливается на 0,812 мкс и сбрасывается на 0,438 мкс. Таким образом, в поток отправляется в общей сложности 1200 бит, в результате чего получается 150 байт, следовательно 3 байта цвета для 50 светодиодов. Передача полного пакета данных занимает 1,5 мс, и этот процесс повторяется каждые 4 мс, 250 раз в секунду.

Этот поток данных отправляется в цепочку светодиодов (состоящую из IC2-IC51), из которых только три 3 светодиода выводятся на принципиальной схеме. Все остальные светодиоды подключены одинаково. Последовательные данные принимаются от первого светодиода (IC2) на выводе DI(вывод 2), и происходит следующее: первые 3 байта интерпретируются внутренним контроллером как значения цвета в порядке зеленого-красного-синего и цвет отображается на светодиодах. Эти 3 байта не будут отправляться на следующий светодиод. Только 4-й байт и все последующие байты передаются через порт DO(вывод 1) в порт DI следующего светодиода (IC3). Опять же, этот светодиод берет первые 3 байта для себя и передает остальные на следующий светодиод. Таким образом, все светодиоды берут 3 байта из потока данных, а последний светодиод (IC51), наконец, получает последние 3 байта.

Для питания звезды требуется стабилизированное напряжение 5В. При полной яркости потребляемая мощность составляет не более 600 мА, а на светодиоды подается не полная мощность. Для изменения цвета возможного диапазона значений 0-255 используется только диапазон 0-63, при этом эффекты отдельных светодиодов работают до значения 100. Свечение достаточно яркое и экономит много энергии.

Внимание: схема не имеет защиты от перенапряжения или неправильной полярности! Поэтому вы должны обязательно использовать стабилизированный источник питания 5 В и включать звезду исключительно с помощью этого источника питания через разъем с правильной полярностью. Кроме того, светодиоды очень чувствительны к электростатическим разрядам. Если возможно, вы не должны прикасаться к светодиодам и использовать подставку звезды для транспортировки.

В оригинальной схеме использовались светодиоды типа WS2812. Между тем, существуют улучшенные WS2812B, которые по техническим данным полностью совместимы со своими предшественниками, но, к сожалению, имеют другую распиновку. На картинке напротив показана светодиодная цепь на WS2812B. Также следует отметить, что ключ маркировки теперь находится на контакте 3, а не на контакте 1.

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

Прогресс не остановить: в 2016 году на рынке появился преемник WS2813, который, вероятно, заменит всех предшественников. WS2813 имеют дизайн оригинального WS2812 и снова ключ маркировки на выводе 1, но назначение выводов было изменено. Внутри работает новый чип, который имеет дополнительный резервный ввод данных. Он должен быть подключен к входу данных предыдущего светодиода, как показано на принципиальной схеме. В ранее использовавшихся WS2812 и WS2812B отказ одного светодиода приводит к выходу из строя всех последующих светодиодов в цепи. В случае WS2813 резервный вход принимает поток данных в таком случае, скрывает данные предыдущего светодиода, а остальная часть цепочки светодиодов продолжает работать в обычном режиме. Кроме того, светодиоды внутри содержат конденсатор, так что конденсаторы C5-C44 могут не применяться. Кстати, светодиоды доступны в 4 вариантах WS2813A, WS2813B, WS2813C и WS2813D. Варианты A и B работают (например, WS2812 и WS2812B) с током светодиодов 18 мА на цвет, вариант B не такой яркий и немного дешевле. В вариантах C и D ток светодиода составляет 5 мА, а здесь вариант D не такой яркий и дешевый. Для звезды я рекомендую WS2813B.

К сожалению, время передачи данных немного изменилось, так что новогодняя звезда, созданная с WS2813, должна работать с программным обеспечением v1.10 (или выше). Макет платы также снова изменился.

Аппаратная часть

Сборка звезды - дело нелегкое. Во-первых, 5 частей плат должны быть вырезаны и отшлифованы. Требуется высочайшая точность, чтобы все детали точно совмещались. При изготовлении прототипа я использовал ручную пилу, для постройки других звезд я пользовался электрической настольной пилой и дисковой шлифовальной машиной Proxxon, что значительно облегчило работу. Большое спасибо Bastlerkollegen Dietmar Heyer за предоставленное оборудование. Он предоставил фото слева, на котором части платы были припаяны вместе с резисторами 0 Ом. Кроме того, коллега залудил все площадки для облегчения сборки. Но это делать не обязательно. Для лучшей жесткости рекомендуется, чтобы швы на обратной стороне платы (сторона без меди) были соединены двухкомпонентным клеем.

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

На этом рисунке показана центральная часть полностью собранной звезды. Компоненты должны быть собраны в следующем порядке: IC1 (внизу слева), R1, R2, C1, C2, C3, P1, P2, P3, Q1, C4 (внизу), J1 и S1. Затем необходимо запаять резисторы 0 Ом, которые служат перемычками для некоторых соединений. Здесь текущая версия платы отличается от рисунка, и в общей сложности 10 штук резисторов 0 Ом должны быть припаяны. В архиве загрузки для макетов платы сборка хорошо документирована, так что можно ориентироваться на эти чертежи. После окончания сборки центральной части вы должны выполнить первый функциональный тест и, в случае успеха, перенести программное обеспечение в микроконтроллер. Смотрите также раздел "Ввод в эксплуатацию".

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

Если центральная часть схемы работает, то можно установить светодиоды (IC2-IC51) и их конденсаторы (C7-C44). Чтобы упростить компоновку печатной платы, цепочка светодиодов начинается не сверху, а с позиции, отмеченной на рисунке слева, а затем продолжается в направлении стрелки. Цепочка в конце концов заканчивается на IC51 (ниже отметки). Процедуру следует выполнять именно в этом порядке, и это имеет следующую причину: вы можете сначала установить часть цепочки светодиодов, а также конденсаторы и протестировать работу в любое время. Я всегда паял группы из 10 светодиодов при настройке своих звезд, а затем проводил тестовый прогон. Так что любые ошибки легче найти. Было замечено, что используемые светодиоды не обязательно имеют высокое качество. Время от времени обнаруживается дефектная копия, которая только частично или не работает вообще. К сожалению, не всегда ясно, неисправен только ли сам светодиод, потому что проблема также может быть вызвана неисправностью на выходе DO предыдущего светодиода.

Важно: всегда обращайте внимание на правильное положение при пайке светодиодов! Это можно узнать из файлов макета платы. Здесь два варианта сильно различаются: в то время как WS2812 и WS2813 имеют ключ маркировки на контакте 1, ключ маркировки WS2812B на контакте 3.

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

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

Я собрал группу из 4-х звезд. Здесь используется соединение каскадом, и общий источник питания 5 В/3 А. Кроме того, при работе нескольких звезд параллельно, важно установить потенциометры всех звезд по-разному. Это гарантирует, что псевдослучайный генератор каждой звезды инициализируется по-разному и, таким образом, будут выполняться разные программы изменения цвета и эффектов. Кстати, фотографировать звезды во время работы довольно сложно. К сожалению, улучшить фото было невозможно, но на самом деле звезда выглядит действительно хорошо :-)

Если кого-то не устраивает технология SMD, то есть другая альтернатива. Светодиоды, используемые для звезды, также доступны на готовых лентах и есть в продаже. Они могут быть разделены по мере необходимости после каждого светодиода, затем части могут быть наклеены в форме звезды на несущую пластину и соединены в виде цепочки светодиодов. Центральный контур может быть собран при помощи выводных компонентов на монтажной плате. Этот вариант не был проверен. Кроме того, звезда будет немного больше, так как расстояние между светодиодами 17 мм, что болше чем 11,5 мм на плате.

Программная часть

Текущее программное обеспечение для звезды было написано на Си и Ассемблере в Atmel Studio 7, состоит в основном из следующих файлов:

Weihnachtsstern.c содержит основную программу на Cи для контроля изменения цветов и эффектов
Weihnachtsstern_asm.s содержит процедуру вывода критичных по времени данных на Ассемблере.

Функции этих двух файлов более подробно описаны в следующем разделе:

Weihnachtsstern.c

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

В следующем разделе объявляется много переменных. Таблица данных в 150 байтов образует наибольшую переменную, которая состоит из 3 цветовых байтов для каждого из 50 светодиодов. Здесь полностью обработанные данные сохраняются и передаются каждые 4 мс в цепь светодиодов. Кстати, оперативная память ATtiny44A была в значительной степени исчерпана, но, к сожалению, здесь нет места для расширения. Кроме того, переменные объявляются в EEPROM, здесь последний выбранный уровень скорости сохраняется постоянно. Следующий раздел содержит 3 функции. Первая используется для генерации случайных чисел и состоит из относительно простого метода, основанного на сдвигах битов и операциях исключающего ИЛИ. Для улучшения случайных значений текущий счетчик 16-битного таймера 1 также считывается и также работает с исключающим ИЛИ. Для этого таймер 1 работает с максимальной тактовой частотой 16 МГц. Таким образом, случайное значение также зависит от времени вызова функции. Следующая функция необходима для управления изменением цвета, а последняя - для управления одним из эффектов с 6 светодиодами. Для этого мне нужно кратко перейти к концепции управления светодиодами: поскольку оперативной памяти недостаточно для полного управления всеми 50 светодиодами, я выбрал компромисс. Только 3 переменные используются для постоянного расчета нового значения для изменения цвета, и это значение всегда выводится параллельно всем 50 светодиодам, т.е. Все светодиоды всегда показывают один и тот же цвет. Чтобы это не стало слишком однообразным, я определил 6 светодиодных эффектов, каждый из которых имеет свою особенность. Таким образом, из стандартного изменения цвета можно извлечь до 6 светодиодов и управлять независимо от остальных. Эффект сначала активируется с помощью процедуры в этом разделе. Контроллер в основной программе затем постепенно переводит этот светодиод из текущего значения цвета в определенное значение белого, а затем медленно возвращает яркость и цвет к нормальному значению цвета. Эти 6 светодиодов производят эффект звездного блеска.

Далее в исходном коде следует процедура прерывания. Она срабатывает по таймеру 0 каждые 2 мс и контролирует все время работы звезды. Во-первых, аналого-цифровой преобразователь (АЦП) считывается и всегда содержит значение одного из 3-х потенциометров. От того какой канал считывается, определяет переменную, которая увеличивается каждый раз, когда вызывается подпрограмма прерывания, и устанавливает АЦП на следующий канал. После 3 проходов первый канал считывается снова, так что текущие значения потенциометров доступны каждые 6 мс. Это также уменьшает некоторые значения счетчиков, которые отвечают за время изменения цвета и паузы между эффектами. Каждый из 6 светодиодов эффекта также имеет счетчик, который обрабатывается здесь. Оставшаяся часть процедуры прерывания используется для определения нажатия кнопки. Для этой цели состояние кнопки считывается каждое прерывание, и если она нажимается непрерывно (50 мс) в течение по меньшей мере 25 прерываний, то устанавливается переменная, и основная программа сигнализирует о том, что обнаружено короткое нажатие кнопки. Кроме того, увеличивается другой счетчик, и если после 20 х 50 мс кнопка все еще активна, то длинное нажатие кнопки передается основной программе. Основная часть программы начинается с инициализации, здесь сначала устанавливаются порты ввода/вывода, АЦП и два таймера. Затем сохраненный уровень скорости считывается из EEPROM, обслуживаются 3 прерывания таймера, считываются определенные позиции потенциометра и определяется начальное значение для псевдослучайного генератора. По завершении инициализации значение цвета устанавливается на низкое начальное значение, и запускается последовательность данных.

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

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

Управление эффектом с 6 светодиодами: если эффект был активирован, сначала проверяется, не истек ли счетчик эффекта. Если это так, то в зависимости от состояния можно управлять включением светодиода (повышая значения цвета до фиксированного максимума), затемнением (возвращаясь к нормальному значению изменения цвета) или остановкой эффекта.

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

Звездный блеск - этот эффект случайным образом выбирает один из 50 светодиодов, кратковременно затухает и медленно возвращается к цвету других светодиодов. Этот процесс повторяется случайным образом от 10 до 30 раз, а также время до следующего блеска определяется генератором случайных чисел.

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

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

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

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

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

Flash All Star Tips - этот эффект активируется только один раз, когда звезда включена, делая процесс загрузки немного оживленнее.

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

Эта программная часть выполняет еще одну функцию: в режиме настройки выводятся положения трех потенциометров. Это делается путем преобразования диапазона значений 0-63 в диапазон 0-49, а затем заполнение таблицы данных определенным значением цвета.

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

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

Weihnachtsstern_asm.s

Эта процедура отправляет поле данных, рассчитанное программой на языке Cи, в цепь светодиодов. Сначала первый передаваемый параметр копируется в Z-регистр в качестве указателя адреса. Второй параметр содержит количество отправляемых байтов, после отправки полного байта он уменьшается и проверяется на равенство единице. Сначала регистр подсчета для отдельных битов устанавливается равным 8-ми и 1-й байт выбирается из таблицы данных. Началу вывода данных предшествует высокий логический уровень и, таким образом, начинается передача данных. При сдвиге байта влево, самый верхний бит устанавливает флаг переноса и, в зависимости от этого, присутствует пауза на короткое время (0 бит), либо на длинное время (1 бит), а затем снова устанавливает низкий уровень вывода данных. Выполняется проверка, чтобы убедиться, что все 8 битов были отправлены, и либо следующий бит помещается в перенос, либо проверяется счетчик байтов. Если нужно отправить больше байтов, цикл начинается снова, в противном случае процедура завершается. Структуру этой процедуры можно составить из множества команд NOP. Отличия почти нет, если время выбрано точно. Хотя эксперименты показали, что светодиоды допускают довольно большие допуски в скорости и времени импульса / паузы. Тем не менее, я придерживался интервалов в соответствии с техническими характеристикахми WS2812, WS2812B и WS2813, так что в дальнейшем при непрерывной  работе при колебаниях напряжения и температуры не было никаких сюрпризов.

Ввод в эксплуатацию

Для ввода в эксплуатацию требуется загрузить текущее программное обеспечение v1.10 от 25.01.2018. Этот пакет содержит файлы исходного кода на Си и Ассемблере и, конечно же, скомпилированный файл прошивки Weihnachtsstern.hex, который можно найти в каталоге Weihnachtsstern\Weihnachtsstern\Release. Это программное обеспечение поддерживает все типы светодиодов WS2812, WS2812B и WS2813.

Перед первым включением я рекомендую установить на плату только часть комполнентов, а также первый светодиод (IC2). Теперь лучше всего подключить источник питания 5 В, предназначенный для звезды, к плате, при этом линия плюс подключается к плате не напрямую, а через сопротивление в диапазоне от 50 до 100 Ом. Это позволяет избежать повреждения цепи и источника питания, если на плате имеется короткое замыкание. После включения источника питания измерьте напряжение непосредственно в цепи (за резистором), и здесь должно быть как минимум 4,5 В. Если это не так, то необходимо проверить плату на наличие коротких замыканий.
Если напряжение в порядке, вы можете начать программирование. Подключите программатор, (питание включено на этот раз без дополнительного резистора) и загрузите программное обеспечение poinsettia.hex в микроконтроллер. Затем перейдите к настройке битов конфигурации, которые должны выглядеть следующим образом:

EXTENDED = 0xFF
HIGH = 0xD5
LOW = 0xFF

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

Работа устройства

После включения источника питания звезда начинает свою работу и это выглядит следующим образом: сначала считываются позиции 3-х потенциометров P1-P3, значения сохраняются в 16-разрядной переменной, а результат передается псевдослучайному генератору в качестве начального значения. Затем генерируются случайные числа для красного, зеленого и синего значений и активируется элемент управления изменением цвета. В то же время активируется стартовый эффект, при котором все кончики звезды на короткое время ярко светятся. Чуть позже появляется первый эффект, это всегда «звездный блеск». При этом отдельные светодиоды звезды на короткое время гаснут, и здесь также происходит совпадение - оно определяет число (от 10 до 30), номер светодиода и время до следующего свечения. После того, как кончики отсверкают, звезда делает короткий перерыв, и один из эффектов бегущего огня становится активным. Здесь также совпадение определяет тип бегущего огня, а также определяет, с какой точки начинать. После завершения цикла эффект заканчивается, и после короткой паузы звезда снова активируется - цикл начинается снова. Чередование звездного блеска и одного из эффектов бегущего огня всегда повторяется, в то время как изменение цвета на фоне постоянно активно. Эта программа работает бесконечно, пока не отключится питание. Кроме того, вы можете управлять процессом с помощью следующих элементов управления:

Потенциометры P1, P2 и P3 - программное обеспечение использует диапазон значений от 0 до 63 для каждого основного цвета (красного, зеленого и синего) для управления изменением цвета. Значение 0 означает, что этот базовый цвет не используется вообще, и чем выше значение, тем интенсивнее содержание цвета. Этот диапазон значений может быть изменен потенциометрами P1-P3 для настройки изменения цвета, а также яркости. Программное обеспечение постоянно считывает положение поненциометров и использует установленное значение в качестве предела диапазона. Потенциометр P1 определяет диапазон для красного цвета, P2 диапазон для зеленого и P3 диапазон для синего. Потенциометры имеют другую функцию. Поскольку в микроконтроллере нет реальных совпадений, ему нужно немного помочь. Для этой цели положение 3-х потенциометров считывается при включении питания, значения связываются, и определенное 16-битное значение используется для инициализации генератора случайных чисел. Это особенно важно, если несколько звезд работают рядом, и они должны работать с разной программой воспроизведения. Таким образом, вы просто устанавливаете потенциометры немного по-другому, и тогда каждая звезда будет показывать свою картину.

Поскольку оценить положение потенциометра сложно, я сделал функцию для отображения положения и для этого используется другой элемент управления:

Кнопка S1 - эта кнопка используется для реализации 2-х функций, которые выбираются по разной длительности нажатия:

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

Длительное нажатие (более одной секунды): эта функция переключает уровень скорости. Звезда может работать с 3-мя уровнями скорости, и это влияет как на изменение цвета, так и на эффекты. После ввода в эксплуатацию звезды средняя скорость (уровень 2) изначально активна. Длительное нажатие кнопки переключает на следующую более высокую скорость, то есть на уровень 3. На это также указывает короткое мигание первых 3-х светодиодов, начиная с верхнего кончика. После отпускания кнопки звезда начинает свою нормальную работу - но на новом уровне скорости. Если кнопка нажимается снова в течение длительного времени, то она переключается на следующий уровень, и в этом случае она снова запускается на уровне 1. Это также подтверждается кратким включением первого светодиода. Пока кнопка нажата, обнаруживается короткое нажатие и временно отображается положение потенциометра - это нормально. Затем скорость переключается, новый уровень отображается и также постоянно сохраняется в EEPROM контроллера. Кстати, он не предназначен для указания установленного уровня скорости, он может быть только переключен. Так что просто нажмите три раза, после чего исходный уровень будет установлен и отобразится снова.

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

История проекта

Идея для этого проекта была разработана давно, но я никогда не задумывался о реализации, потому что здесь нельзя использовать мою любимую технику монтажных плат. Только с помощью коллеги созрела эта идея и так в январе 2013 года стартовал проект. Сначала искали подходящие светодиоды и включили в список компонентов светодиоды RGB. Однако у них был недостаток: нужен резистор для каждого цвета (по 3 штуки на светодиод), а также мощные драйверы для управления. Таким образом, поиск продолжился, и в итоге был обнаружен WS2812. Сначала я заказал 20 штук и собрал небольшую тестовую схему с существующим модулем на ATmega8. После того, как управление светодиодами был освоено, начались первые успехи, и можно было начать разработку схемы и компоновку платы. Также был сделан большой заказ 500 светодиодов, потому что должно быть построено всего 10 звезд. Наконец, первый прототип был построен и введен в эксплуатацию в конце февраля 2013 года. Конечно, программное обеспечение все еще находилось в начальном состоянии, и его работа также показала некоторые недостатки.

После длительного перерыва работы продолжились в июле 2013 года. Макет платы был уже готовым и мог быть запущен в производство. Работа над программным обеспечением продолжалась, и были созданы еще 4 звезды, которые также использовались в качестве прототипов. Здесь была еще одна проблема, о которой вы даже не задумывались. Например, медные поверхности самодельных плат окисляются, и это выглядит некрасиво в открытой конструкции. Однако различные тесты прототипа также нашли решение этой проблемы (см. Раздел «Аппаратная часть»). Если вы решите изготовить плату в компании, то у вас, вероятно, не будет этой проблемы, так как медные поверхности здесь покрыты паяльной маской.

К сожалению, технический прогресс нас немного обогнал, и WS2812B появился на рынке. Они были оптимизированы в процессе производства и технически улучшены (защита от переполюсовки), но имеют другое назначение контактов и только 4 вместо 6-ти выводов. Технически они полностью идентичны своим предшественникам, поэтому программное обеспечение менять не нужно. Но требуется новый макет платы. По этой причине коллега Басти Дитмар Хейер еще раз разработал компоновку, а также протестировал ее, поэтому в конечном итоге макет платы доступен как для WS2812, так и для WS2812B.

К концу 2017 года коллега по хобби сообщил мне, что следующее поколение светодиодов WS2813 не работает надежно в звезде. Более того, он предоставил мне собранную звезду с WS2813 для тестирования. Я не мог понять проблему и определить основную причину разрыва между пакетами данных. Хотя для WS2812 и WS2812B было достаточно 50 мкс, для WS2813 требуется не менее 300 мкс. Оригинальное программное обеспечение обеспечивало перерыв 500 мкс, колебания времени выполнения часто ниже 300 мкс. Была еще одна проблема с настройкой программного обеспечения: библиотека файлов stdlib.h в текущей версии GCC Atmel Studio 7 требует слишком много ресурсов оперативной памяти. Удалив эту библиотеку и используя упрощенный генератор случайных чисел, можно создать пространство и настроить время, чтобы можно было использовать все типы светодиодов. Еще раз спасибо Анри Бекману, который также предоставил макет платы для звезды с WS2813.

Автор: Scott-Falk Huhn


Файлы к статье "Новогодняя звезда на Attiny44 и WS2812"
Описание:

Исходный код программы, файл прошивки микроконтроллера, макеты печатных плат SprintLayout, PDF

Размер файла: 3.77 MB Количество загрузок: 66 Скачать

Метки: Световой эффект, WS2812, ATtiny44, WS2813

Печать