Chip, если задача только в том, чтобы мигать светодиодами, то спокойно можно использовать таймер и вручную мигать.
Простейший расчет:
16МГц (тактовая частота процессора)/100Гц (допустимая частота мигания светодиодов)/256(уверен, что 256 градаций яркости - больше, чем надо) = максимум 625 тактов на прерывание. Для обслуживания 6 каналов - больше чем достаточно. В прерывании достали переменную по каждому каналу, сравнили с счетчиком, если равно - перекинули соответствующую ногу.
Примерно как написано ниже (не проверял на синтаксис, но суть понятна, думаю).
#define PWM_Count 6
uint8_t volatile Counter;
uint8_t volatile PWM_Data[PWM_Count];
uint8_t volatile PWM_Pins[PWM_Count];
void Timer(void)
{
uint8_t i;
if (Counter==0)
{
for (i=0;i<PWM_Count;i++)
Pin[PWM_Pins[i]]=1;
}
for (i=0;i<PWM_Count;i++)
{
if (PWM_Data[i]==i)
Pin[PWM_Pins[i]]=0;
}
}
UPD.
Интересно было бы если бы подсветка горела именно там, где надо, а не вся сторона. Но чую, что это реализовать будет уже сильно посложнее. Хотя почти уверен, что ардуинки хватит и для этого. Повесить динамическую индикацию, можно еще сдвиговые регистры использовать...