Цитата(CSB @ Nov 1 2006, 12:34)

Выдержка интервалов нужна для алгоритма, не для ШИМа. Источник сигнала - один.
Трудность заключается в том, что для есть только один таймер, который нужно использовать для измерения и выдержки, т.е. если нормально использовать схему захвата - учитывать количество переполнений и текущее значение счетного регистра, после использования TAR его следует обнулить. Как при таком режиме выдерживать временые интервалы? Ведь может потребоваться несколько переполнений счетчика, а TAR обнулен.
С другой стороны можно использовать непрерывный режим работы таймера и с выдержкой интервалов будет все отлично, но как тогда лучше оргнизовать захват? Ведь обнуления TAR не будет и точка отсчета сместится.
Как то все смутно и непонятно...
Если мы говорим об одном и том же, то можно сделать так. Таймер работает в непрерывном режиме. Для каждой сехмы захвата/сравнения вводим дополнительную переменную счетчик срабатываний выбранной схемы.
a) Допустим нужно выждать дико большое время T1, а период тамера T2.
Устанавливаем схему сравнения на значение TAR + T1 - [T1/T2]*T2, где [x] - целая часть. Значение счетчика N=T1/T2+1. Включаем соответсвующее прерывание и делаем каждый раз N--. Когда N==0 - прошло нужное время и можно отключить прерывание.
Пример: T1 = 95 попугаев, T2=15 попугаев ==> N=7. В первый раз прерывание щелкает через 95-[95/15]*15=5 попугаев. Затем оно будет срабатываит еще 7-1=6 раз через каждые 15 секунд. В итоге 5 + 6*15 = 95. Вопрос: а что будет если T1<T2, тогда N=1 и прерывание будет вызвано один раз через T1 попугай, после чего N-- дает 0 и все - время вышло. Надеюсь понятно.
б) Нужно посчитать время от текущего момента до некоторого события. Запоминаем текущее значение TAR, т.е TAR_0 = TAR. Сбрасываем соответствующий счетчик M в ноль. При каждом переполнении таймера (TAIF) делаем M++ и ждем событие. И тут оно случилось. Время которое прошло - M*0xFFFF + TAR-TAR_0 (или 0xFFFF-TAR_0 + (M-1)*0xFFFF + TAR - если не понятно). Только нужно пересчитать все эти 0xFFFF в попугаев (т.е. определиться с частотой тактирования и единицами измерения)
Для большей наглядности нарисуй несколько периодов пилы и потренируйся.
Количество устройств задержки на время T1 определяется количеством схем сравнения/захвата ( TimerA/TimerB). А количество измерений времени от ... до .... - количеством ОЗУ и точностью измерения. Когда много счетчиков - долго обрабатывать ==> задержки (можно их учесть).
Возможные проблемы - при вычислении [T1/T2]*T2 и M*0xFFFF возможно переполнение если использовать простой int, а не длинный int.
Если все написанное выше неправильно, то или я или ты не поняли, что нужно сделать