В порядке абстрактных размышлений

Шина USB может делать прерывание даже для низкоскоростных устройств - 1 раз в мс - это если есть еще низкоскоростные девайсы на хабе - тупо ищется нужный адрес .Ну или 1 раз в 8 мс. В эти моменты ломается передача на WS2811 (методом ногодрыга).

Если синхронизировать управление от этих прерываний - то появится шанс и для софт-USB.


Для Атмега168 - можно разрешить прерывание дополнительно "по ноге": PCMSK2=(1<<PCINT16)

в обработчике разрешить основное прерывание, установить флажок старта обмена

ISR(PCINT2_vect)
{
sei();
//разумеется определить полярность перепада - если нужный -
Set_Flag_Start_WS2811;
}


В основном цикле отлавливать этот флаг и запускать обмен на линейку. Пакет ограничить ~800-900 мкс - должно хватить на ~40 светодиодов.

Терпят ли Ws2811 при обмене паузы между байтами? Тогда логично просится работа через SPI - один байт будет кодировать один бит в обмене, битовым заполнением этого байта подобрать 1/0 - для возможной скорости. При этом больше будет загружена аппаратная часть.


ЗЫ: у самого пока руки не добрались до WS2812 пощупать - лежат уже больше месяца.