Пытаюсь разобраться в коде и возник вопрос, очевидно от недостатка знаний. Каким образом ШИМ может управляться асинхронно? Ну вот посмотрите. Допустим частота таймера ШИМ (TIMER0) 20 КГц. Это значит, что через каждые 1/20КГц секунд на выход поступит импульс с определенной скважностью. Чтоб получить синус, скважность КАЖДОГО импульса должна измениться по закону синуса. Однако скважность пересчитывается с частотой 10 КГц в функции fast_calc(). Это значит что синус формируется с частотой 10 КГц на удвоенных импульсах таймера? В линейных цифрах -если синус должен быть 0-1-2-3-2-1-0 мы делаем 0-0-1-1-2-2.......? Или я чего не понимаю?
Дальше идет АЦП. Работает синхронизируясь с таймером ШИМ от таймера 7 (TIMER7)
Код: Выделить всё
timer7_initparam.period = (TIMER_CAR(TIMER0) << 1)/30;