Давно хотелось сделать елочную гирлянду на радость детям. Конечно Вы можете сказать что сейчас есть много разных китайских светящихся ленточек из которых можно выбрать что-то подходящее, но я среди китайского товарного многообразия так ничего и не нашел того что бы мне подошло.
Требования к елочной гирлянде ставились такие:
- Управление RGB светодиодами каждым по отдельности, включая управление яркостью.
- Возможность загрузки программ световых эффектов по USB без перепрошивки контроллера.
- Возможность эмуляции работы гирлянды на персональном компьютерею
В результате получилось устройство состоящее из следующих частей:
- Корпус и блок питания – использовалось то, что было под рукой, а именно корпус и блок питания от старого сетевого свитча. Блок питания имеет на выходе два напряжения - +5в по-слабее и +3.3в по-мощнее. Было решено использовать линию +5в для питания процессоров, а линию +3.3в – для питания светодиодов. Если у Вас будет источник питания только +5в – это не страшно, так как контроллеры RGB светодиодов на ATTiny2313A могут работать и от +5в только надо подобрать токоограничивающие резисторы для светодиодов. Я подбирал по току 10ма при напряжении на 0.3в меньше чем напряжение питания светодиодов.
- Контроллер гирлянды на STM32F2XX. В архиве со схемами, программами и чертежами плат есть два варианта платы – для 64pin QFP корпуса и для 144pin QFP корпуса. В качестве бонуса еще есть чертеж платы для STM32F1xx в корпусе 64pin QFP, благо STM32F1 и STM32F2 варианты отличаются только назначением двух выводов. В кажестве разъема JTAG использовался разъем под плоский кабель XF2W-1615-1A. Плата переходника на стандартный 20-контактный разъем есть в файлах приложеных к этой статье.
- Макетная плата, на которой установлены платы контроллера гирлянды на STM32F2XX, SPI eeprom (я использовал W25Q16 емкостью 16 мбит, выпаянную из какой-то старой платы, возможна замена на другую, только придется менять параметры файловой системы и вносить коррективы в протокол общения с микросхемой памяти).
- Плоский 10-жильный кабель длиной 3.6 метра с прикрепленными через каждые 20 см разъемами IDC-10 для подключения собственно плат контроллеров RGB светодиодов.
- Контроллеры RGB светодиодов (в моем варианте 16 штук). Используется процессор ATTiny2313A. Позволяет управлять двумя RGB светодиодами. Номер контроллера записывается по адресу 1 в eeprom. Он не может быть нулем так как нулевой номер контроллера используется для обращения ко всем контроллерам сразу. В моем варианте с 16-ю контроллерами они имеют номера с 1 по 16 соответственно.
Все схемы нарисованы с помощью KiCad. На схемах плат STM32 я не указывал блокировочные конденсаторы в цепях питания. Они имеют следующие номиналы: те которые 0402 и 0603 – 0.1uF, те которые 1206 – 2.2 uF. Самые большие – 100uF или 47uF.
Программирование световых эффектов выполняется на языке Java – смотрите папку sergvs201ledc_jvmDebug – там находятся все нужные файлы для компиляции программ.
Вкратце пройдемся по структуре архива:
- в корне архива лежат файлы печатных плат.
- в папке kikad – схемы.
- в папке sergvs2010ledc_jvm – эмулятор гирлянды для Windows.
- sergmyProgramsARMboard_stm32f207_ledc_java – проект Keil uVision с исходниками для прошивки контроллера STM32.
- sergmyProgramsAVRRGB_Led_Control – проект AVRStudio для прошивки ATTiny2313.
Общение с контроллером гирлянды происходит через виртуальный USB ком порт. Команды которые понимает контроллер таковы:
- dir – вывод каталога файлов на SPI eeprom.
- reset – сброс контроллеров RGB светодиодов.
- format – форматирование SPI eeprom.
- run program_name arguments – запуск программы на исполнение.
- stop – останов программы.
- deletefile – удаление файла из файловой системы SPI eeprom.
Инициализация устройства:
- Форматирование SPI eeprom командой format.
- Загрузка обязательных файлов с помощью утилиты spi_flash_write:
spi_flash_write имя_ком_порта classes/Message.class /binary
spi_flash_write имя_ком_порта classes/Syst.class /binary
spi_flash_write имя_ком_порта Board.class /binary
Файлы находятся в папке sergvs201ledc_jvmDebug.
По умолчанию устройство при старте пытается выполнить программу записанную в файл main.class. Загрузить другие файлы в устройство можно с помощью той же программы spi_flash_write.
В файле main1.java Вы найдете четыре программы которые я использовал для тестов. Также файл ledc_test служит для тестирования модулей на ATTiny2313. (он имеет один параметр коммандной строки – номер устройства).
Пройдемся вкратце по API для работы с гирляндой:
- Класс classes/Syst:
- HeapgetFree – получение размера свободной памяти.
- GC_Collect – вызов garbage collector.
- delay – задержка в миллисекундах.
- Класс classes/Message:
- show – вывод сообщения в ком порт.
- printf – аналог такой же команды на языке С за исключением того что внутри этой функции все параметры ппреобразуются в строки так что для любого типа переменных надо указывать в строке формата %s.
- Класс Board:
- ledc_reset – сброс контроллеров RGB светодиодов.
- ledc_send – команда контроллеру RGB светодиодов. Имеет семь параметров – номер контроллера (на номер 0 откликаются сразу все контроллеры), и значения яркостей R, G, B для первого и второго светодиода. Значения яркости могут быть от 0 до 255.
- random – получение случайного числа от 0 до 0xFFFFFFFF.
Должен предупредить, что далеко не все классы реализованы во встроенной java машине. Список классов и список реализованных функций вы сможете найти в исходниках Java машины.
Фото контроллера RGB светодиодов:
Фото платы для STM32F2 144pin QFP:
Фото устройства:
Файлы:
переходник с 20 контактного jtag на разъем XF2W-1615-1A
Схемы, прошивки, исходные тексты программ, файлы печатных плат