- 1описание rgb светодиодов ws2812 и ws2812b
- ↑ p.s. немного воспоминаний, не совсем в тему
- ↑ без единого гвоздя
- 1обзор программатораch341a
- 1установка и пайка радиоэлектронных компонентов
- 2управление светодиодами ws2812b (или ws2812)
- 3примеры работы с логическим анализатором
- 3управление светодиодной панелью ws2812b по spi с помощью ft2232h
1описание rgb светодиодов ws2812 и ws2812b
Светодиод WS2812 (или его модификация WS2812B, которая и будет использована в данной статье) представляет собой RGB светодиод. То есть в одном корпусе представлены сразу три светодиода разных цветов: красный, зелёный и синий.

Светодиод WS2812 имеет 6 выводов, в то время как WS2812B – лишь 4.
| Номер вывода | Название | Назначение вывода |
|---|---|---|
| 1 | Dout | Выход управляющего сигнала |
| 2 | Din | Вход управляющего сигнала |
| 3 | VCC | Питание управляющей цепи, 6…7 В |
| 4 | NC | Не подключен |
| 5 | VDD | Питание светодиода, 6…7 В |
| 6 | Gnd | Земля |
А вот назначение выводов светодиода WS2812B:

| Номер вывода | Название | Назначение вывода |
|---|---|---|
| 1 | VDD | Питание светодиода, 3,5…5,3 В |
| 2 | Dout | Выход управляющего сигнала |
| 3 | Gnd | Земля |
| 4 | Din | Вход управляющего сигнала |
Главное преимущество данных светодиодов в том, что они могут соединяться в цепочку последовательно друг за другом, их можно соединять в ленты или собирать из них панели. При этом управление осуществляется всего по одному проводу. Это возможно благодаря тому, что каждый светодиод содержит в своём составе контроллер, который и управляет цветом и яркостью трёх каналов RGB.
Для примера на схеме показано последовательное подключение трёх светодиодов. На вход DIN первого светодиода подаётся управляющий сигнал. Светодиод обрабатывает его и передаёт далее со своего выхода DOUT на вход следующего в цепочке светодиода.

На фотографии представлена панель размером 10 на 10 светодиодов, с которой мы и будем экспериментировать. Как видно, на нижней части панели светодиоды соединены в единую цепочку.
Обратите внимание, что светодиодная панель весьма «прожорлива». На иллюстрации ниже это можно видеть по показаниям встроенного датчика тока источника питания: панель из ста светодиодов WS2812B потребляет ток более 3 амперов. Правда, почти все светодиоды в данном случае включены на максимальную яркость белым цветом (самый энергозатратный режим, т.к. для обеспечения белого свечения используются все три канала RGB на максимальной яркости).

Приблизительное потребление вашего устройства можно оценть так. Один канал светодиода на максимальной яркости потребляет около 20 мА. В одном корпусе располагаются 3 светодиода. Следовательно, один RGB светодиод в максимуме потребляет до 60 мА тока. Умножаете это число на количество светодиодов в вашей матрице или ленте – это и будет максимально возможное потребление, и ваш источник питания должен иметь возможность выдать такой ток.
↑ p.s. немного воспоминаний, не совсем в тему
В далёкие школьные и студенческие времена, «идея» заложенная в описанную в статье макетную плату сильно пригодилась в условиях недостатка фольгированных материалов. Изрядно подустав крутить проволочки, стал собирать не очень сложные схемы, припаивая детали на устаноленных в нужных местах платы жестяных площадках и дорожках, в общем делал нечто среднее между печатным и навесным монтажом.
Конечно способ не без недостатков, но обслуживание изделия, замену неисправных деталей, и внесение изменений в схему делать быстрей и удобней чем на стандартной «печатке». До сих пор сохранилось несколько артефактов изготовленных этим экзотическим способом:

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

Одна из гитарных примочек
Как видите пара плат сделана из картона. Давно уже, лет двадцать назад. Видать торопился тогда. Подумываю заменить их на печатные да и схему изрядно перелопатить, только всё руки не доходят. Тем более в уличных концертах этому изделию уже вряд-ли предстоит участвовать.

Неведомая антинаучная фигня
Когда-то в докомпьютерные времена служила ритм-боксом и обеспечивала моё гитарное брыньканье ударным сопровождением бумканьем и дыцканьем :russian: Несмотря на опять же картонные платы, криво сделанную, не вполне законченную схему и общую неактуальность, работает до сих пор.
Ну, для изготовления рабочих плат я этот способ уж точно никому рекомендовать не буду. Так, для смеха вспомнил. Хотя, думаю, вполне можно использовать для быстрой сборки и настройки чего-нибудь не очень сложного, когда нет времени или настроения делать макетку описанную в статье.
Одна такая плата, сделанная под одну из первых гитарных примочек, впоследствии разобранную, в разное время «носила на себе» предусилитель, генератор, и ещё несколько похожих по смыслу и топологии платы схем. Некоторые из этих блоков после доведения до ума работают на других платах, сделанных уже специально под них.
↑ без единого гвоздя
1. Берётся подходящий по размерам кусок гетинакса или текстолита.

Естественно, нефольгированного. В противом случае можно было бы сделать намного быстрее. И получилось бы красивее, но в долговечности такого изделия сильно сомневаюсь. Фольга имеет дурную привычку отслаиваться от основы при нагревании. Размеры определяются «требованиями заказчика» и имеющимися в наличии кусками материала. Когда-то у меня был «монстр» примерно 20×40 см. Жаль потерял. Это сейчас маленькие делал. На большие масштабы пока не замахиваюсь. Спаять блок на паре-тройке транзисторов можно. Или даже что-нибудь звуковое на микросхеме, благо у них сейчас выводов не так много, да и обвески тоже.
2. Шилом, ножом, или ещё каким подходящим инструментом на поверхности материала «процарапывается» разметка под будущие контактные площадки. Указанные на рисунке размеры срисовал со своего изделия. Если кому нужно — могут сделать другие.
3. По разметке, на месте будущих контактных площадок сверлятся отверстия диаметром 2 — 3 мм (для площадок шириной 5 мм, как в моём случае).
4. А потом отверстиям на плате придаётся вот такая форма.
Для этой цели мне пришлось изготовить инструмент из обломка ножовочного полотна по металлу. Обломок был обточен на наждаке примерно так.

Вместо такого самопального «лобзика» вполне можно воспользоваться треугольным надфилем. Форма отверстий будет малость не такая, но свою задачу (препятствовать вращению лепестков) они выполнят так же. Только не было надфилей под рукой в то время. Да и сверло нашлось только на 1,5 мм. Поэтому получились абсолютно ровные сквозные пазы.
6 А потом из подходящей жести вырезаются полосы шириной 5 мм. В моём случае это была знаменитая жесть от банок из под сгущёнки.
7. Полосы режутся на куски длиной примерно 24 мм (для площадок 8×5 мм.). Заготовки сгибаются примерно так:
Полученные изделия вставляются в вышеописанные отверстия:
И фиксируются.
В результате получается что-то вот такое.
Теперь можно спокойно паять свою конструкцию (если она не превышает размеры платы или не собирается на сверхминиатюрных компонентах). Замерять и гонять режимы, вносить в схему изменения. А когда заработает как надо — разрабатывать печатку, корпус и т. д.
Из-за торчащих с обратной стороны платы жестянок работать нужно, естесственно на диэлектрической поверхности. Ну и не допускать попадания под плату металла. В этом смысле доска с жестянками выгодно отличается, если гвозди не слишком длинные: smile: Для большей гарантии можно прикрепить к плате снизу кусок текстолита (гетинакса) такого же размера. Или ножки приспособить как на картинке из «ЮТ», если плата достаточно большая.
Согласен, что всё можно сделать слегка проще. Например «конструкцию» контактных площадок. (Сам когда-то делал вариант где жестяная заготовка просто сгибалась пополам.) Да и саму плату можно делать хоть из картона, если что-то новое делается не так уж часто и нет риска перегреть его во время работы. В нём и пазы под площадки режутся куда легче. (Когда-то и его использовал, правда для несколько других целей.)
А можно и вообще не делать. Но, возможно пригодится кому-нибудь. Мало ли.
И в завершении — фото платы «в деле». То есть во время проверки блока для очередного изделия.
Дело было вдали от цивилизации, нормальных приборов инструментов и радиодеталей.
Так что сильно не удивляйтесь «музейным экспонатам» из которых всё собрано. Делалось всё только для подбора катушки, так что тип остальных элементов роли не играл. К тому же, поблизости у знакомых водился осциллограф, позволяющий контролировать сигнал на радиочастотах, который для меня до сих пор остаётся в планах и мечтах. Стоящий на заднем плане приёмник в данном случае выполняет роль частотомера.
На данный момент сделано две такие платы. Надеюсь, что пригодятся для подготовки следующих статей.
1обзор программатораch341a
Как следует из названия программатора, его основная часть – это микросхема CH341A. Рядом с ней располагается кварцевый резонатор на 12 МГц, а также стабилизатор напряжения AMS1117, который выдаёт 3,3 вольта. По бокам от USB разъёма, которым программатор подключается к компьютеру, располагаются светодиодные индикаторы: сверху (на фото) – индикатор питания (POWER), а снизу – индикатор обмена данными между ПК и программатором (RUN). Он включается, когда программатор считывает данные из программируемой микросхемы и когда происходит запись.

Для подключения программируемых микросхем установлена 16-контактная DIP панель с нулевым усилием (ZIF), которая промаркирована TFXTDOL. С обеих сторон панели располагаются две группы контактов. Их назначение описано на нижней стороне программатора и приводится на фото ниже:

По названиям выводов понятно, что верхняя (на фото) гребёнка предназначена для обмена по интерфейсу SPI, а нижняя – по UART. Также тут имеется площадка для пайки, на которую можно припаять программируемую микросхему.
Лучше использовать переходные панели с нулевым усилением (т.н. ZIF панели), которые позволяют подключать микросхемы к программатору без пайки посредством DIP панели на верхней стороне.
С помощью перемычки, которая по умолчанию установлена между контактами 1 и 2, можно менять режим работы программатора. Так, если перемычка установлена между контактами 1 и 2, программатор работает в параллельном режиме и определяется в диспетчере устройств Windows как параллельный порт (USB-EPP/I2C), а если между контактами 2 и 3 – в последовательном режиме и определяется в диспетчере устройств как COM-порт.

Программатор предназначен для чтения и записи данных в микросхемы flash-памяти серий 24 и 25. На шелкографии на нижней стороне программатора CH341A указано, каким образом нужно подключать программируемую микросхему каждой из серий. Приобрести программатор можно на Али-Экспресс, например, здесь, а подходящие микросхемы памяти здесь.
1установка и пайка радиоэлектронных компонентов
Продаётся набор DSO138 вот в таком виде (купить можно тут). В набор входит собственно печатная плата с установленными на ней SMD компонентами (есть также разновидность набора, где SMD компоненты не установлены), плата с ЖК дисплеем, пакетик с комплектующими, кабель с BNC разъёмом и «крокодилами», а также инструкция по сборке и инструкция по настройке на английском языке.

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

Следующий шаг – пайка трёх дросселей и двух диодов. Дроссели одинаковые, а вот диоды – разные, но в одинаковых корпусах. Кроме того, диоды имеют полярность. На шелкографии платы «минус» (катод) обозначен белой чертой, как и на корпусе самих диодов. Так что соблюдайте внимательность.

Далее припаиваем кварцевый резонатор на 8 МГц. Полярность не важна.

Следующим паяем разъём mini-USB на плату и пять тактовых кнопок. И разъём, и кнопки имеют специфические размеры корпуса и выводов, так что перепутать ничего невозможно.

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

Следующим делом припаяем светодиод. Длинный вывод – это анод, «плюс». Для него предназначено отверстие с квадратной контактной площадкой.

Теперь очередь штыревого белого разъёма для питания. Ставим его открытой частью по направлению от центра платы.

Устанавливаем на плату 2 транзистора и 2 регулятора напряжения. Они все разных типов, но в одинаковых корпусах. Будьте внимательны при установке их на плату осциллографа. Формуйте выводы перед установкой и не перегревайте их паяльником.

Устанавливаем два переменных конденсатора.

Монтируем большую катушку индуктивности для фильтра питания.

Далее устанавливаем 6 электролитических конденсаторов. При установке важно соблюдать полярность. Более длинный вывод – это «плюс». Он устанавливается в отверстие с квадратной площадкой под пайку.

Ставим на плату осциллографа DSO138 разъём для питания. Он имеет широкие довольно толстые выводы, его нужно хорошо пропаять.

Далее – пайка штыревых разъёмов и соответствующих колодок на плату осциллографа DSO138.

Устанавливаем три подвижных переключателя SW1, SW2 и SW3. Затем монтируем BNC разъём. Его корпус из толстого слоя металла, и трудно поддаётся пайке. Тем не менее, нужно очень хорошо его припаять к контактным площадкам. Это разъём часто будет подвергаться механической нагрузке, и его пайка должна быть очень качественной. Хорошо прогревайте толстые выводы его корпуса.

Теперь припаяем петлю из проволоки толщиной 0,5 мм в отверстия разъёма J2. Это будет контакт для выхода сигнала самотестирования осциллографа.
После этого закоротим с помощью паяльника и припоя контакты перемычки JP3.

Займёмся платой TFT LCD экрана. Нужно припаять 3 штыревых разъёма с нижней части платы. Два маленьких разъёма по два пина и один двухрядный 40-пиновый.
Мы почти закончили пайку. Но не спешите убирать паяльник, он нам ещё ненадолго понадобится.

Теперь желательно промыть плату ацетоном, бензином или каким-либо другим способом очистить от следов флюса.
Промытой плате нужно дать хорошо просохнуть. Это очень важно! Влаги на плате не должно остаться совершенно.
После этого подключим источник питания к плате и замерим напряжение между землёй и точкой TP22. Если напряжение примерно равно 3,3 вольтам, значит вы всё хорошо спаяли, поздравляю! Сейчас нужно отключить источник питания и закоротить припоем контакты перемычки JP4.

Сейчас можно подключить к осциллографу ЖК дисплей, совместив его штыревые выводы с колодками на печатной плате осциллографа.

2управление светодиодами ws2812b (или ws2812)
Если просто подать на светодиодную ленту напряжение, ничего не произойдёт. Светодиоды ждут определённый сигнал, который будет ими управлять. Для управления используется последовательный однопроводный интерфейс. Биты «0» и «1» кодируются импульсами различной длины.

На диаграмме обозначены:
- T0H – время выдержки высокого уровня при передаче кода логического нуля;
- T0L – время выдержки низкого уровня при передаче кода логического нуля;
- T1H – время выдержки высокого уровня при передаче кода логической единицы;
- T1L – время выдержки низкого уровня при передаче кода логической единицы;
- Treset – время сигнала оповещения об окончании управляющей последовательности.
Причём временные допуски заданы весьма жёстко. Так, для WS2812B время T0H = T1L и составляет 0,35 мкс, а время T1H = T0L и составляет 0,9 мкс. Для светодиода WS2812 временные параметры более изощрённые: T0H = 0,35 мкс, T1H = 0,7 мкс, T0L = 0,8 мкс, T1L = 0,6 мкс. Но длительность передачи одного бита и там, и там составляет 1,25 мкс.
Для указания цвета светодиода используется 24-битная схема RGB: под каждый из трёх каналов отводится по 8 бит. И расположены цвета в следующем порядке:

То есть для того чтобы выставить желаемый цвет на первом светодиоде в цепочке, необходимо сформировать 24-битный код и подать его на вход DIN цепочки. Если мы хотим выставить цвет на двух светодиодах, необходимо сформировать уже 48-битный сигнал и так же подать его на вход DIN цепочки. И так далее.
Чем больше светодиодов в цепочке – тем более длинную последовательность мы должны подать на её вход. Получив управляющий сигнал, контроллер светодиода берёт из неё первые 24 бита и выставляет тот цвет, который указан в этих 24 битах. Затем он отбрасывает эти 24 бита, а оставшуюся часть последовательности передаёт дальше.
Осталось дело за малым: передать цепочке светодиодов WS2812B осмысленную управляющую последовательность.
На этот счёт есть такая идея. По сути нам необходимо передавать 24-битные значения цвета в соответствии с положением светодиода в матрице 10 на 10. Аналогичным образом данные хранятся в графических файлах формата *.BMP. Только у них в начале файла ещё присутствует заголовок, который содержит дополнительную информацию: размер изображения, сколько бит приходится на один пиксель, есть ли сжатие и т.д. Вот как в деталях устроен формат BMP:

Можно в любом графическом редакторе (например, Paint .NET) нарисовать изображение размером 10 на 10 пикселей (или такого, какой размерности у вас светодиодная панель), сохранить его в 24-битном формате, а затем взять массив байтов из раздела Image Data Pixel Array с данной схемы, и таким образом мы получим управляющий массив для загрузки светодиодной панели.
Обратите внимание, что в массиве данных о точках изображения BMP содержатся заполнители (Padding), которые дополняют строку байтов до числа, кратного 4. Т.е., например, в нашем случае строка содержит 10 пикселей по 24 бита на цвет (3 байта). Соответственно, строка будет содержать 3×10=30 байтов.
Ах, да, чуть не забыл. В файле изображения BMP данные о цвете хранятся в формате R-G-B, а светодиод WS2812 принимает цвет в формате G-R-B. Необходимо поменять местами цвета, иначе все изображения будут совсем не тех цветов, которые мы ожидаем.
3примеры работы с логическим анализатором
Для первого эксперимента возьмём преобразователь USB-UART на микросхеме FTD1232. Подключим анализатор к порту USB. Выводы каналов с 1 по 6 подключим к выводам USB-UART преобразователя. По большому счёту, больше всего нас интересует только две линии – Rx и Tx, можно обойтись только ими.

Запускаем программу Saleae Logic. Если драйверы для анализатора установлены корректно, в заголовке программы будет указано Connected – подключено. Допустим, мы не знаем на каком канале будет сигнал, а на каком нет, поэтому не будем выставлять триггер для начала захвата сигнала.
Просто нажмём на стрелки большой зелёной кнопки Start (Старт) и выставим в поле Duration (Длительность), скажем, 10 секунд. Это время, в течение которого логический анализатор будет собирать приходящие по всем 8-ми каналам данные после нажатия кнопки «Старт».
Запускаем захват и одновременно отправляем в COM-порт какое-нибудь сообщение. Через 10 секунд анализатор закончит сбор данных и выведет результат в поле просмотра сигналов. В данном случае сигнал будет лишь на одном канале, который присоединён к выводу Tx (передатчик) USB-UART преобразователя.

Для наглядности можно настроить декодер перехваченных данных. Для этого в правом столбце находим поле Analyzers, нажимаем иконку в виде плюса – «Добавить», указываем тип – Async Serial. Появится окно с выбором настроек.
В первое поле вводим номер канала, на котором у вас данные. Остальное оставим как есть. После нажатия кнопки Save (Сохранить), над полем соответствующего канала появятся метки голубого цвета с отображением значений байтов, которые были перехвачены.

Тут же, в правом столбце программы Saleae Logic, можно добавлять к перехваченным данным закладки, проводить измерения задержек и длительностей, выставлять всевозможные маркеры и даже проводить поиск по данным для декодированных протоколов.
Аналогичным образом подключим логический анализатор к преобразователю USB-RS485. Линии данных всего две, поэтому можно установить триггер срабатывания по фронту любого из каналов: сигнал в протоколе RS-485 дифференциальный и фронты импульсов появляются одновременно на каждом из каналов, но в противофазе.

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

Программа Saleae Logic позволяет экспортировать сохранённые данные в виде изображений и текстовых данных, сохранять настройки программы, аннотации и декодеры каналов.
Последний пример в данном небольшом обзоре – захваченный кадр данных, переданный по последовательному протоколу SPI. В канале 2 виден сигнал выбора ведомого, в канале 0 – тактовые импульсы, а в канале 1 – собственно данные от ведущего устройства к ведомому.
3управление светодиодной панелью ws2812b по spi с помощью ft2232h
Предлагаю использовать для управления диодами WS2812B отладочную плату с микросхемой FT2232H и программу SPI via FTDI, которые уже не раз нас выручали. Единственная загвоздка в том, что FT2232H не может формировать импульсы с заданной длительностью. Придётся сымитировать их. Идея здесь следующая.
Короткие импульсы (T0H и T1L) для WS2812B одинаковые и они в 3 раза короче, чем длинные (T0L и T1H). Таким образом, используя 4 импульса можно закодировать «0» или «1». А именно: для передачи логического нуля будем формировать бинарную последовательность «1000» или 0x8, а для передачи логической единицы будем формировать бинарную последовательность «1110» или 0xE.
Будем использовать режим SPI и его линию MOSI для передачи двоичных данных загрузки светодиодов. Причём необходимо выбрать такую частоту передачи, чтобы длительность одного бита равнялась 1,25 мкс. Т.к. нам вместо одного бита нужно передавать четыре, то для обеспечения той же длительности одного бита управляющей последовательности частота SPI должна быть в 4 раза выше: вместо 1/1.25 будет 4/1.25 мкс = 3.2 МГц. Это микросхема FT2232H способна обеспечить.
Если сформировать произвольную управляющую последовательность и посмотреть её на осциллографе, то увидим, что эта идея вполне работоспособна: на осциллограмме видны 6 логических единиц, а затем логический ноль. Причём длительность передачи одного бита в среднем равняется как раз тем самым 1.25 мкс.

Теперь, когда мы умеем формировать биты необходимой длительности, нужно взять массив, считанный из соответствующего раздела BMP файла, и преобразовать его побитово в то, что нам нужно (бит «0» – в 0x8, «1» – в 0xE).
Я всё это уже проделал и прикладываю к статье маленькое консольное приложение, которое принимает на вход файл *.BMP и генерирует из него бинарный файл с управляющей последовательностью, которую нужно «скормить» цепочке светодиодов.
Чтобы загрузить управляющую последовательность, воспользуемся программой SPI via FTDI. Подключимся к микросхеме FT2232H, установим режим SPI и зададим скорость передачи 3 МГц. Также в полях состояний выводов укажем «00000000»; этот нулевой уровень будет служить сигналом Reset, по которому светодиодная лента «поймёт», что передача управляющей последовательности завершена.

В качестве примера на изображении в поле «Команда» приведён массив, который активирует первые три светодиода в цепочке цветами красный, зелёный, синий.

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

С помощью такой панели можно создавать довольно красивые и зрелищные эффекты, как, например, цветовые градиенты:
https://www.youtube.com/watch?v=4AoHuyOH9GE
Как развитие данной идеи, с помощью такой LED-панели можно воспроизводить анимацию. Для этого можно создать управляющий файл, в котором последовательно будут содержаться управляющие массивы для всех кадров анимации, а для обеспечения пауз между кадрами будет необходимое число нулей. Посчитать число нулей несложно, если вспомнить, что время передачи одного бита составляет 1,25 мкс.





