Цитата(BVU @ Aug 19 2005, 14:42)
Цитата(CDT @ Aug 19 2005, 15:05)
Так тогда светодиоды будут просто мигать. А мне нада плавные переходы .
В этом случае необходимо иметь массив значений состояния на каждый светодиод хранящий так информацию об интенсивности(яркости) свечения, так и о "векторе" свечения(увеличение свечения или уменьшения).
Я думаю это не займет слишком много ОЗУ, тем более, что массив можно организовать оптимально, так же можно использовать битовую структуру а это даст еще большую экономию оперетивной памяти.
Решил данную проблему таким образом:
Расписал вручную таблицу синуса, т.е. значения от 0 до255 255..0.
приэтом проститав плавное загорание и тушение светодиода. Так как данная зависимость не линейная.
На каждый канал завёл по три байта: первый байт смешение в таблице,
второй байт делитель частоты таймера, третий байт счётчие какнала.
Работает так:
устанавливаем счетчики канала равным делителям канала.
По каждому тику таймера декрементируем счётчики. как только счетчик равен 0 инрементируем смешение в таблице. Приравниваем счётчику значения делителя.
Заносим в шим значание из таблицы синуса.
pwm[i]=sin_table[смещение];
Таким образом происходит рассинхронизация шимов.
Перемещая делители по кругу или по случано мы получим хаотичное зажигание светодиодв