Не знаю, что там за трудности с BAM. У меня все плавно загорается\тухнет. Не понял про периоды кратные 2. Про период 32. По поводу вычислений. У BAM 8 тиков. 128, 64, 32, 16, 8, 4, 2, 1. Самый долгий 128. У меня сейчас МК работает на 16 мгц. Использую 2 таймер. частота таймера /64. Частота BAM получается около 1 кцг. 1054 мс. От инициализации таймера до первого (самый долгий период 128) прерывания 8254 такта. Естественно, считать лучше в этот момент.
Я переделал свою программу. До этого я в прерывании готовил следующие данные. Понял, что прерывание слишком долгое получается. Тогда сделал следующее. Алгоритм такой. Вот у нас новое значение яркости. Состояний светодиодов на период BAM 8. Скажем у меня сейчас 8 светодиодов. Раскидал все состояния на период BAM. Раз 8 светодиодов, значит 8 байт. И в прерывании выкидываю эти соответствующие каждому тику BAM состояния светодиодов. Приходит новое значение яркости. Кадр сменился, гасить, зажигать. Опять раскидал на 8 тиков и все. На 32 светодиода в прерывании нужно всего 4 байта в тик выкидывать.