Текст заголовка сообщения полностью:
Раз не удастся полностью автоматизировать аппаратный ШИМ - то программный на сумматорах делай. Запусти пофиг какой сколькоразрядный таймер ну пусть на 100 мкс в режиме СТС с прерыванием. Период таймера определяется лишь бы обработчик успел отработать.(+)Пример для 10-разрядного 3-х канального ШИМ.
Код:
u16 Acc1=0,Acc2=0,Acc3=0; //аккумуляторы трех ШИМов
//изменяемые уставки(ну назови - пороги) для каждого канала PWM.
u16 valPWM1, valPWM2, valPWM3;
//Обработчик прерывания таймера:
__interruptOCR{
//Обслуживание первого каналла ШИМ.
Acc1+=valPWM1;
if(Acc1&0x400) // Есть переполнение из 10-го разряда?
SetBit(bitPWM1); // Да, ставлю бит порта ШИМ1=1
else
ClrBit(bitPWM1); // Бит порта ШИМ1=0
//Обслуживание второго и третьего канала ШИМ аналоргично: прибавляешь свои значения к их аккумуляторам, смотришь на бит переполнения и ставишь/сбрасываеши биты порта.
}